Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: dabjoern am 10.02.06 - 10:29:38

Titel: In einem Editable Field als DefaultValue ein Wert mittels @DbLookup
Beitrag von: dabjoern am 10.02.06 - 10:29:38
Hallo Leute,

ich habe eine Dialogliste. Die holt per @DbColumn den Namen eines Unternehmens ran
Code
@DbColumn("":"NoCache";"";"($CompanyList)";1)

Anschließend habe ich ein editierbares Textfeld "pOfficeStreetAddress". Im Default Value steht:
Code
lookup_str := @Text(CompanyName_1_1);
lookup := @DbLookup( "":"NoCache" ; "" ; "($CompanyList)" ; lookup_str ; "OfficeStreetAddress");
@If(@IsError(lookup);"";lookup)

In Input Enabled steht:
Code
BranchOffice="1"

Mein Problem ist, dass kein Default Value eingetragen wird. Testweise habe ich das Default Value in Owner geändert (das ist ein Feld auf der Maske) und da wurde was eingetragen. Warum geht meine Lookup Version nicht? Liegt es am NoCache? Wie kann ich es lösen? Danke für jede Antwort.

Grüße
Björn
Titel: Re: In einem Editable Field als DefaultValue ein Wert mittels @DbLookup
Beitrag von: koehlerbv am 10.02.06 - 10:32:44
Wenn Du ein neues Dokument erstellst, wird sofort das @dbLookup im Default Deines Feldes ausgeführt. Zu diesem Zeitpunkt ist aber noch gar keine Firma ausgewählt ...

Bernhard
Titel: Re: In einem Editable Field als DefaultValue ein Wert mittels @DbLookup
Beitrag von: Glombi am 10.02.06 - 10:33:55
lookup_str := @Text(CompanyName_1_1);
Ist  CompanyName_1_1 (toller Feldname ;-) ) wirklich KEIN Textfeld? falls doch, ändern in
lookup_str := CompanyName_1_1;


lookup := @DbLookup( "":"NoCache" ; "" ; "($CompanyList)" ; lookup_str ; "OfficeStreetAddress");


Zur Fehlersuche
  @If(@IsError(lookup);"";lookup)
ändern in
   @If(@IsError(lookup);@text(lookup);lookup)

Andreas

Titel: Re: In einem Editable Field als DefaultValue ein Wert mittels @DbLookup
Beitrag von: dabjoern am 10.02.06 - 10:44:50
Hi,

ich habe mal den Code geändert in:
Code
lookup_str := CompanyName_1_1;
@If(lookup_str!="";lookup := @DbLookup( "":"NoCache" ; "" ; "($CompanyList)" ; lookup_str ; "OfficeStreetAddress");lookup:="");
lookup

Das Feld Company_Name_1_1 ist eine Dialogliste, die aber nur Text enthält. Da kann ich dann wohl auf @Text verzeichten? Also ich hab es mal rausgenommen. Der Feldname ist tatsächlich komisch, aber ich habe mehrere Felder und später läuft ein Skript drüber und da brauch ich die Zählvariable...

Dennoch geht die Sache noch nicht. Ich habe mal eben auf Computed umgestellt und da funktioniert es. Wieso nicht im Editable Modus?

Grüße
Björn
Titel: Re: In einem Editable Field als DefaultValue ein Wert mittels @DbLookup
Beitrag von: koehlerbv am 10.02.06 - 10:49:40
Hast Du mein Posting nicht gelesen?
Titel: Re: In einem Editable Field als DefaultValue ein Wert mittels @DbLookup
Beitrag von: Glombi am 10.02.06 - 10:54:48
Warum muss das Feld editierbar sein?
Titel: Re: In einem Editable Field als DefaultValue ein Wert mittels @DbLookup
Beitrag von: dabjoern am 10.02.06 - 10:55:47
@koehlerbv: Für das Feld Company_Name_1_1 habe ich "Refresh fields on keyword change" aktiviert. Da müsste doch dann der Lookup neu ausgeführt werden oder?
Grüße
Björn
Titel: Re: In einem Editable Field als DefaultValue ein Wert mittels @DbLookup
Beitrag von: koehlerbv am 10.02.06 - 10:58:08
Der Lookup wird nur einmalig bei Erstellen eines neuen Dokuments ausgeführt, wenn er im Default steht. Später nie wieder.

Bernhard
Titel: Re: In einem Editable Field als DefaultValue ein Wert mittels @DbLookup
Beitrag von: dabjoern am 10.02.06 - 10:59:01
@Glombi: Weil ich, sobald man im Feld BranchOffice ein Häkchen setzt, die Adresse des Textfeldes pOfficeStreetAddress editieren kann. Ich denke, nur wenn pOfficeStreetAddress editierbar ist, steht mir Input Enabled zur Verfügung. Dort steht
Code
BranchOffice="1"

Idee ist diese: ich habe ein Personendokument. Über die Dialogliste (Company_Name_1_1) ordne ich der Person eine Unternehmung zu. Per Lookup werden die Adressdaten ausgefüllt. Arbeitet die Person in einer Zweigniederlassung, kann sie das Feld BranchOffice anklicken und eine abweichende Adresse angeben.

Grüße
Björn
Titel: Re: In einem Editable Field als DefaultValue ein Wert mittels @DbLookup
Beitrag von: dabjoern am 10.02.06 - 11:00:53
@koehlerbv: Wie könnte dann eine saubere Lösung aussehen, dass das trotzdem klappt? Ich könnte neue Felder anlegen, die erst sichtbar werden, wenn BranchOffice=1. Doch dann müsste ich weitere Felder ändern und meine Ansichten anpassen. Das wäre ein haufen Arbeit.
Titel: Re: In einem Editable Field als DefaultValue ein Wert mittels @DbLookup
Beitrag von: ascabg am 10.02.06 - 11:03:53
Hi,

Eventuell koennten die Events "Queryrecalc" oder "Postrecalc" eine Alternative sein.

Andreas
Titel: Re: In einem Editable Field als DefaultValue ein Wert mittels @DbLookup
Beitrag von: koehlerbv am 10.02.06 - 11:10:31
@Björn: Pack den Lookup in die Validation und prüfe vor dem Lookup, ob das Feld noch leer ist. Ein Problem bekommst Du dann natürlich, wenn später die Company-Zugehörigkeit geändert werden soll.
Ich würde allerdings die Firmenauswahl in einen Hotspot setzen und die Programmatik dorthinein verlagern. Am Editable bräuchte damit ja nichts geändert werden.

Bernhard
Titel: Re: In einem Editable Field als DefaultValue ein Wert mittels @DbLookup
Beitrag von: Glombi am 10.02.06 - 11:12:48
Ich würde die Formel

@If(BranchOffice="1";@Return(FELDNAME);"");
lookup_str := CompanyName_1_1;
@If(lookup_str!="";lookup := @DbLookup( "":"NoCache" ; "" ; "($CompanyList)" ; lookup_str ; "OfficeStreetAddress");lookup:="");
lookup

in die Eingabeumsetzungformel schreiben und in dem Dialogfeld die Option "Felder bei Schlüsselwortänderung aktualisieren" aktivieren,

In @Return(FELDNAME) muss Du den richtigen Namen des Feldes schreiben.

Andreas
Titel: Re: In einem Editable Field als DefaultValue ein Wert mittels @DbLookup
Beitrag von: dabjoern am 10.02.06 - 11:21:37
Ich danke euch allen!

Ich habe es jetzt wie Andreas vorgeschlagen hat, umgesetzt (das war der geringste Aufwand). Der Code sieht jetzt bpsw. so aus:

Code
@If(BranchOffice="1"; @Return(pOfficeStreetAddress) ; "");
lookup_str := CompanyName_1_1;
@If(lookup_str!="";lookup := @DbLookup( "":"NoCache" ; "" ; "($CompanyList)" ; lookup_str ; "OfficeStreetAddress");lookup:="");
lookup

Super! Klappt wunderbar.

Grüße
Björn