Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: robertpp am 11.08.05 - 14:27:27

Titel: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag 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
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: Semeaphoros am 11.08.05 - 14:35:28
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
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: Axel am 11.08.05 - 14:37:27
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
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: robertpp am 11.08.05 - 15:49:01
@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.
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: Semeaphoros am 11.08.05 - 16:24:00
Stehen die Namen alle im gleichen Dokument? Dann geht das, wenn das eigene Dokumente sind, dann über eine separate Ansicht.
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: robertpp am 11.08.05 - 16:28:02
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?
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: Axel am 11.08.05 - 16:47:29
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







 
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: Semeaphoros am 11.08.05 - 18:41:52
Axel, wie willst Du in einer View die Werte aus mehreren Dokumenten in eine Zeile bekommen?
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: koehlerbv am 11.08.05 - 18:56:33
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
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: Semeaphoros am 11.08.05 - 19:07:38
Siehe hier:


Das was du in der Ansicht ob siehst "Robert Prinz" "ich" und "du" das sind alles eingenständige doc's!
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: koehlerbv am 11.08.05 - 19:20:01
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
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: Semeaphoros am 11.08.05 - 19:34:49
Ungefähr das, was ich auch schon gesagt habe .....  :P
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: robertpp am 12.08.05 - 08:05:52
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:
Zitat
Stehen die Namen alle im gleichen Dokument?
und ich sagte:
Zitat
"Robert Prinz" "ich" und "du" das sind alles eingenständige doc's
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: Axel am 12.08.05 - 08:09:40
Hi,

na dann sollte es eigentlich so funktionieren wie ich es beschrieben habe.


Axel
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: robertpp am 12.08.05 - 08:10:01
Zusätzlich hab ich in der View jetzt  eine Spalte eingefügt siehe Bild:
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: robertpp am 12.08.05 - 08:12:41
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!
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: Axel am 12.08.05 - 08:18:42
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
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: Semeaphoros am 12.08.05 - 09:06:20
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).
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: robertpp am 12.08.05 - 10:37:47
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?
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: Axel am 12.08.05 - 10:42:56
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

Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: robertpp am 12.08.05 - 11:23:38
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:.................
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: Axel am 12.08.05 - 11:34:33
Was mir jetzt aber noch eingefallen ist:.................

Was denn?

Axel

Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: robertpp am 12.08.05 - 11:48:20
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?
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: Axel am 12.08.05 - 13:55:56
Hi,

eigentlich schon. Einen Versuch's wäre es wert.


Axel
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: koehlerbv am 12.08.05 - 15:30:35
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
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: Semeaphoros am 12.08.05 - 15:36:34
Volle Zustimmung, Bernhard, das entspricht meinem ersten Vorschlag.
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: robertpp am 17.08.05 - 10:29:09
@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?
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: robertpp am 22.08.05 - 09:54:56
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?
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: Jörg am 01.09.05 - 10:52:57

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??
Titel: Re: Feld füllen mit @DbLookup und 2 Wert finden.
Beitrag von: robertpp am 01.09.05 - 12:05:18
@FOR

Note  This @function is new with Release 6.

Robert