Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Wiesel am 04.09.06 - 11:28:34

Titel: @SetField
Beitrag von: Wiesel am 04.09.06 - 11:28:34
Hallo!

Ich habe in einer Aktionsschaltfläche einer Maske einen Formelsprachencode eingebaut, der je nach Inhalten in der Maske etwas ausführen soll. Grundsätzlich hier auch kein Problem.

Aber mein @SetField bereitet mir Kopfzerbrechen.

Ich habe in meiner Maske ein berechnetes Textfeld mit Mehrfachwerten-Zulassung.
Per Schaltfläche wird dieses Feld gefüllt:

@SetField("txtWerWann";txtWerWann : @Name([CN];@UserName) + " am " + @Text(@Today) + " Weiterleitung an Kollegen");

Nun wird mir aber nicht einfach genau dieser vorgegebene Text in das Feld geschrieben (Wiesel am 04.09.2006 Weiterleitung an Kollegen) sondern:

am 04.09.2006 Weiterleitung an Kollegen
Wiesel am 04.09.2006 Weiterleitung an Kollegen

Und bei der nächsten Verwendung der Schaltfläche steht dann das drin:

am 04.09.2006 Weiterleitung an Kollegen am 04.09.2006 Weiterleitung an Kollegen
Wiesel am 04.09.2006 Weiterleitung an Kollegen am 04.09.2006 Weiterleitung an Kollegen
Wiesel am 04.09.2006 Weiterleitung an Kollegen

und so weiter...

Was mache ich falsch?

Gruß,
Wiesel
Titel: Re: @SetField
Beitrag von: dirk_2909 am 04.09.06 - 11:42:30
Hallo
versuche es mal so:

Code
...
@SetField("txtWerWann";@Trim( txtWerWann : ( @Name([CN];@UserName) + " am " + @Text(@Today) + " Weiterleitung an Kollegen" ) ) ) ;
...
Titel: Re: @SetField
Beitrag von: Wiesel am 04.09.06 - 12:49:19
Das funktioniert super.
Aber merkwürdig finde ich das schon...

Danke auf jeden Fall!!!
Titel: Re: @SetField
Beitrag von: Tode am 04.09.06 - 14:19:16
das ist überhaupt nicht merkwürdig, sondern die grösste Stärke der Formel- Sprache....

Diese kann nämlich -ohne dass man sich manuell per loop durch elemente einer Liste arbeiten muss- Befehle automatisch auf jedes einzelne Listenelement durchführen.

Liste1 := "a" : "b" : "c";
Liste2 := "1" : "2" : "3";

Liste1 + Liste2 ergibt:
"a1" : "b2" : "c3"

Du bist jetzt auf einen Spezialfall gestossen:

Liste1 := "a";
Liste2 := "1" : "2" : "3";
Liste1 + Liste2 ergibt:
"a1" : "a2" : "a3"

Hier handelt es sich (wei in der Mathematik) um bestimmte Präzedenzen:

In der Schule haben wir gelernt: Punkt vor Strich, Klammer vor Punkt
Übertragen gilt das in Notes genau so: (Doppel)punkt vor Strich, Klammer vor (Doppel)punkt

Deine Zuweisung wird also intern so abgearbeitet:

1. Operation:
Liste1 := txtWerWann : @Name([CN] ; @UserName)
(ergibt: "" : "Hanswurst" )

2. Operation
Liste1 + " am " + @Text(@Today) + " Weiterleitung an Kollegen"

Hier zieht das oben genannt beispiel: Werden zwei Listen verkettet, von denen eine weniger Elemente hat, dann wird die "kürzere" Liste so oft wiederholt, dass es wieder passt:
Das ganze wird also so aufgedröselt:
"" + " am " + @Text(@Today) + " Weiterleitung an Kollegen" :
"HansWurst" + " am " + @Text(@Today) + " Weiterleitung an Kollegen"

Und mit jeder weiteren Addition potentiert sich das Problem....

Mit der Klammer veränderst Du die Reihenfolge und erstellst erst einen Wert aus Username + Text + Zeit + Text, und hängst diesen EINEN Wert dann an die Liste über das ":" an.

Nur so als Erklärung für die Zukunft (und für andere mit ähnlichen Problemen)

Tode