Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: robertpp am 11.08.05 - 14:27:27
-
Hallo,
Ich hab da ein kleines Problem mit einer Maske und füllen von Feldern.
Wie im Bild ersichtlich hab ich eine Maske mit einem Divivision Feld, dieses holt sich mittels @DbColumn("";""; "Division";1) die Einträge.
Das Teilprozess Feld holt sich die Einträge aus der unten angeführten View mittels:
value := "";
@If(Division != ""; @Set("value"; @DbLookup("":"ReCache"; ""; "InputOutput";Division; 2)); "");
@If(@IsError(value) | value = ""; ""; value)
Wie kann ich jetzt die dazugehörigen Verantwortlichen aus der View in das Feld Prozessverantworlicher eintragen?
danke Robert
-
Genau gleich wie die Teilprozesse. Machst Du eine versteckte Ansicht mit der ersten Spalte aus Division+Teilprozess und dann einen DBLookup mit Schlüsselwert Division+Teilprozess auf diese Ansicht
-
Hi,
am einfachsten geht das mit einem Hotspot.
In der entsprechenden Ansicht legt du eine versteckte Spalte mit den in Frage kommenden WErten an. Diese WErte trennst du mit "~~"
Im Hotspot liest du mit @DbLookup diese Spalte aus. Mit @Word trennst du den Rückgabewert auf und packst ihn in die entsprechenden Felder.
Axel
-
@jens:
Das mit der Ansicht war mir klar weil es ja eben der selbe Vorgang ist nur das wollte ich mir ersparen.
Ich denke ich werde es mit der ~~ trennen und so versuchen.
-
Stehen die Namen alle im gleichen Dokument? Dann geht das, wenn das eigene Dokumente sind, dann über eine separate Ansicht.
-
Das was du in der Ansicht ob siehst "Robert Prinz" "ich" und "du" das sind alles eingenständige doc's!
Ich denke es geht nicht mit der Methode wie alex gesagt ich bekomm immer das :
"Robert Prinz; ich; du" zurück. Also muss ich es jetzt doch über eine View machen oder gibt es noch eine Möglichkeit?
-
Hi,
das sollte aber schon so gehen. Deine Spaltenformel in der Ansicht muss so aussehen:
FeldA + "~~" + FeldB
Die Werte in der Spalte werden dann so dargestellt:
2.2 001 Logistik Management~~Robert Prinz
1.2 902 Permanente Inventur durchführen~~ich
usw.
Der Code im Hotspot müsste dann ungefähr so aussehen:
@If(Division != ""; @Set("value"; @DbLookup("":"ReCache"; ""; "InputOutput";Division; 2)); "");
@If(@IsError(value) | value = ""; ""; value);
@SetField("FeldA"; @Word(value; "~~"; 1));
@SetField("FeldB"; @Word(value; "~~"; 2));
Die Rückgabespalte und die Feldnamen musst du natürlich anpassen.
Axel
-
Axel, wie willst Du in einer View die Werte aus mehreren Dokumenten in eine Zeile bekommen?
-
Aber sind es denn wirklich zwei Dokumente, Jens ? Laut des Schirmschusses gibt es doch offensichtlich in genau einem Dokument die Angaben der Projektnr. und des dafür Verantwortlichen.
Aber natürlich habe ich die Applikation nicht vor mir. Wenn es nicht ein Dokument ist, geht es nun mal wirklich nicht (dann aber auch nicht die abgebildete Ansicht ...).
Bernhard
-
Siehe hier:
Das was du in der Ansicht ob siehst "Robert Prinz" "ich" und "du" das sind alles eingenständige doc's!
-
Naja, aber jeder Teilprozess hat doch eine eigene Nummer. Mit der Auswahl des Teilprozesses kann damit beim Eintragen ins entsprechende Feld auch gleich der Prozessverantwortliche mit einem eigenen DBLookup ausgewählt werden. Nimmt man natürlich als Schlüssel die Division, dann bekommt man bei einem Lookup aus der bestehenden Ansicht logischerweise mehrere Prozessverantwortliche zurück, die ja alle in anderen Dokumenten stehen.
Bernhard
-
Ungefähr das, was ich auch schon gesagt habe ..... :P
-
Stop:
Das ist dann woll ein Missverständnis.
Es ist so das wie im Bild ersichtlich der Teilprozess die Division und der Verantwortliche in einem Doc steht.
dh.:
1 doc: 2.2 001 Logistik Management Robert Prinz 0999 PRR
2 doc: 1.2 902 Permanente Inventur durchführen ich 0999 PRR
3 doc: 2.3 101 Abruf bearbeiten / Vertriebsprozeß du 0999 PRR
4 doc: 2.2 001 Logistik Management Er 04147 Andere Division
@Jens du hast mich gefragt:Stehen die Namen alle im gleichen Dokument?
und ich sagte:"Robert Prinz" "ich" und "du" das sind alles eingenständige doc's
-
Hi,
na dann sollte es eigentlich so funktionieren wie ich es beschrieben habe.
Axel
-
Zusätzlich hab ich in der View jetzt eine Spalte eingefügt siehe Bild:
-
Axel das Problem bei deinem Code ist aber, dass ich wieder auf die Division abfrage aber es gibt ja x doc's zur Division und somit bekomme ich ja auch x Einträge retour!
-
Stimmt. :P
Du könntest die Auswahl aber auch mit einer Picklist machen und der die Division als Kategorie übergeben. Dann siehst du nur die Dokumente dieser Kategorie (Vorraussetzung ist, dass die Ansicht für die Picklist in der ersten Spalte danach kategorisiert ist). Von der Picklist lässt du dir die zusammengesetzte Spalte zurückgeben.
Die kannst du dann wieder mit @Word aufteilen.
Axel
-
Das geht, wenn man aus den bisher zwei Auswahlen eine einzige, kombinierte macht und dann die Werte auf die Felder verteilt. Hängt dann ein wenig von Datenstruktur und Arbeitsablauf ab, ob das empfehlenswert ist (das ist dann aber schon weniger ein technischer Aspekt).
-
Hilft es mir etwas weiter wenn ich die View wie im Bild aufbaue und dann versuche wenn ich eine Division ausgewählt habe mit dem @DBLookup nur auf den ersten Teil der Kategorie (auf die Divsion) zugreife und den Zweiten teil dann im Teilprozessfeld anzeige? Somit hab ich dann immer nur einen Eintrag pro Kategorie und bekommm so meinen Verantwortlichen?
-
Hi,
wieso machst du es denn so kompliziert?
Füge in die Maske neben das Feld Teilprozess einen Hotspot ein. Mit dem lässt du dir in einer Picklist, der du die Division als Kategorie übergibst, anzeigen. Als Rückgabewert der Picklist nimmst du die zusammengesetzte Spalte und die teilst du dann auf die Felder auf.
Wo liegt denn da das Problem?
Axel
-
Ja ok axel ich hab es jetzt so gemacht:
choice:=@PickList( [Custom] ; "" ; "InputOutput" ; "Select an Entry" ; "Please select the products you want to order" ; 4 ;Division);
@SetField("ResponsibleProcess"; @Word(choice; "~~"; 2));
@SetField("SubProcess"; @Word(choice; "~~"; 1))
Was mir jetzt aber noch eingefallen ist:.................
-
Was mir jetzt aber noch eingefallen ist:.................
Was denn?
Axel
-
Das mit der Picklist geht aber wie oben schon gesagt:
Wenn ich im Teilprozessfeld bei formula for choice das hier habe:
value := "";
value1:="";
value2:="";
@If(Division != ""; @Do(@Set("value"; @DbLookup("":"ReCache"; ""; "InputOutput";Division; 2));
@Set("value1"; @DbLookup("":"ReCache"; ""; "InputOutput";Division; 4));
@SetField("ResponsibleProcess";value1);
@Prompt([Ok] ; "value1"; @Implode(value1))
)
; "");
@If(@IsError(value) | value = ""; ""; value)
Dann steht im Feld ResponsibleProcess das hier:
2.2 001 Logistik Management~~Robert Prinz; 1.2 902 Permanente Inventur durchführen~~ich; 2.3 101 Abruf bearbeiten / Vertriebsprozeß~~du
Wenn ich jetzt alle doc zurückbekomme und im Feld Teilprozess hab ich ja dann zb
2.2 001 Logistik Management das ausgewählt dann kann ich ja mir mit einer
@for-Schleife doch den value1 durchsuchen und mit @Word(value1;"~~;2) dann den Namen rausholen?
Oder nicht?
-
Hi,
eigentlich schon. Einen Versuch's wäre es wert.
Axel
-
Mag sein, dass ich was verpasst habe, aber ... warum holst Du Dir denn den Prozessverantwortlichen nach Auswahl des Prozesses nicht einfach aus einer (neuen) Ansicht "(LookupProcesses)", die nach der Prozessnummer sortiert ist ? Dann stehen Dir nach Auswahl der Division und des Prozesses automatisch auch gleich die Angaben zum Verantwortlichen zur Verfügung.
Nur - über die vorhandene Ansicht geht das eben nicht, dazu braucht es eine eigene.
Bernhard
-
Volle Zustimmung, Bernhard, das entspricht meinem ersten Vorschlag.
-
@Bernhard: Es ist sicher so machbar aber das ist denke ich der letzte Lösungsweg.
Ich hab jetzt das hier:
FIELD SubProcess := SubProcess;
value := "";
value1:="";
value2:="";
@If(Division != ""; @Do(@Set("value"; @DbLookup("":"ReCache"; ""; "InputOutput";Division; 2));
@Set("value1"; @DbLookup("":"ReCache"; ""; "InputOutput";Division; 4));
@SetField("ResponsibleProcess";value1);
@For(n := 1;
n <= @Elements(value1);
n := n + 1;
@Prompt([Ok] ; "For "; value1[n]);
@If(value1[n] = SubProcess ; value2 := value1[n] ; "");@Prompt([Ok] ; "value1"; value2))
)
; "");
@If(@IsError(value) | value = ""; ""; value)
in meinem Teilprozessfeld als formula for choice.
Wenn ich das Feld jetzt auf einen anderen Wert setze dann passiert folgendes:
Eine Msgbox mit "FOR": 2.2 001 Logistik Management~~Robert Prinz
jedoch ist die Msgbox mit "Value1" gleich leer, dann
Msgbox mit "FOR": 1.2 902 Permanente Inventur durchführen~~ich
und wieder Msgbox mit "Value1" als Tilte gleich leer.
usw.
dh irgendwie macht er das Vergleichen nicht!
@If(value1[n] = SubProcess ; value2 := value1[n] ; "")
An was kann das liegen?
-
So und jetzt für alle die das Problem auch schon mal gehabt haben und die Lösung über eine zweite View oder über die Picklist nicht machen wollten meine Lösung:
value := "";
value1:="";
value2:="";
@If(Division != ""; @Do(@Set("value"; @DbLookup("":"ReCache"; ""; "InputOutput";Division; 2));
@Set("value1"; @DbLookup("":"ReCache"; ""; "InputOutput";Division; 4));
@SetField("ResponsibleProcess";"");
@For(n := 1;
n <= @Elements(value1);
n := n + 1;
@If(SubProcess = @Word(value1[n];"~~";1) ; value2 := @Word(value1[n];"~~";2) ; "")
);
@SetField("ResponsibleProcess";value2)
)
; "");
@If(@IsError(value) | value = ""; ""; value)
Eigentlich schon fertig gewesen nur ein kleiner Denkfehler in der @if -Schleife im @For.
Ich werde das ganze unter Tips & Tricks eintrragen auch mit den anderen Lösungswegen nur fehlt mir eine passende Überschrift??? Wie könnte man das taufen?
-
value := "";
value1:="";
value2:="";
@If(Division != ""; @Do(@Set("value"; @DbLookup("":"ReCache"; ""; "InputOutput";Division; 2));
@Set("value1"; @DbLookup("":"ReCache"; ""; "InputOutput";Division; 4));
@SetField("ResponsibleProcess";"");
@For(n := 1;
n <= @Elements(value1);
n := n + 1;
@If(SubProcess = @Word(value1[n];"~~";1) ; value2 := @Word(value1[n];"~~";2) ; "")
);
@SetField("ResponsibleProcess";value2)
)
; "");
@If(@IsError(value) | value = ""; ""; value)
Bei Lotus Notes5 bekomme ich immer angezeigt, das der Befehl@for nicht bekannt ist,daher die Frage wie dies ausehen muss??
-
@FOR
Note This @function is new with Release 6.
Robert