Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Kiezkicker am 05.04.06 - 14:05:54
-
Hallo,
ich möchte per @SetField einen Feldwert ändern, wenn in einem bestimmten Feld der Wert geändert wird. Meine Idee war die @-Formel im onChange unterzuringen, allerdings ist hier ja nur Lotus Script möglich, was ich nicht beherrsche. Wäre jemand so nett untenstehende Formel in Lotus Script umzusetzen? Oder (noch besser) gibt es eine Möglichkeit mit der @-Formel an anderer Stelle/auf andere Weise gleiches zu erreichen?
Danke im Voraus
-
Hallo
Welche "Untenstehende Formel" ?
Du kannst eine @Formula in der eingabumsetzung des Feldes einsetzen, dass sich ändert, um das Andere Feld zu ändern:
Bsp.:
_x := @ThisValue ;
Field dasAndereFeld := @if( _x = "XYZ" ; "neuer Wert" ; dasAndereFeld ) ;
_x
Dirk
-
Die Scriptversion für das OnChange-Event:
Sub Onchange(Source As Field)
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = ws.CurrentDocument
If uidoc.FieldGetText("DaszuprüfendeFeld") = "Test" Then
Call uidoc.FieldSetText("DaszuänderndeFeld", "Das ist ein Test")
End If
End Sub
Axel
-
Sorry..... hatte die Formel vergessen:
FIELD Pruefung := Pruefung;
GSTkurz := @Word(GS ;" "; 2);
GST := "#GS " + GSTkurz;
@SetField("Pruefung"; @Text( @DbLookup("":"no cache";"Server":"names.nsf"; "($VIMPeopleAndGroups)"; GST; 8)))
Mit der Eingabeumsetzung habe ich es probiert, allerdings wurde jeweils der Wert des Feldes, dessen Wert das SetField auslösen soll mit dem Inhalt gefüllt, den das Feld Pruefung bekommen sollte.
-
Mit der Eingabeumsetzung habe ich es probiert, allerdings wurde jeweils der Wert des Feldes, dessen Wert das SetField auslösen soll mit dem Inhalt gefüllt, den das Feld Pruefung bekommen sollte.
Tja, dann hast Du einen Codefehler. Und ohne Deinen Code können wir auch nix dazu sagen ...
Bernhard
-
der Fehler ist ganz einfach:
die Eingabeumsetzung erwartet am Ende einen neuen Wert für das Feld, in dem sie steht.
Einfach an den vorhandenen code eine Zeile mit
@ThisValue
anhängen, schon ist der Kittel geflickt, in dem geposteten Code wird as Feld immer auf das Ergebnis der Formel
@SetField("Pruefung"; @Text( @DbLookup("":"no cache";"Server":"names.nsf"; "($VIMPeopleAndGroups)"; GST; 8)))
gesetzt, und das Ergebnis ist ... keine Ahnung, was @Setfield als Rückgabewert liefert, auf jeden Fall nix gescheites.
HTH
Tode
-
Einfach an den vorhandenen code eine Zeile mit
@ThisValue
anhängen, schon ist der Kittel geflickt
Genau so war es. Besten Dank
-
Die SetField-Formel funktioniert nun ja. Durch diese Formel werden alle Mitglieder einer bestimmten Gruppe im Adressbuch abgefragt und in das Feld Pruefung geschrieben. Anschließend wollte ich das Feld Prüfung für eine Eingabevalidierung benutzen:
Es sollte geprüft werden, ob der jeweilige Benutzer überhaupt Mitglied der ausgewählten Abteilung ist.
Formel:
@If(Abt = "" ;
@Failure("Bitte eine Abteilung auswählen!");
Pruefung = @UserName;
@Failure("Sie sind nicht berechtigt eine Bestellung für diese Abteilung auszuführen!");
@Success
)
Obwohl ich nicht Mitglied der entsprechenden Abteilungsgruppe bin bekomme ich allerdings keine Fehlermeldung.
Anfangs habe ich es mit @Contains(@UserName) versucht, was den gleichen Effekt hatte.
Woran könnte das liegen?
Oder sollte man vielleicht das Auslesen der Adressbuchgruppe sein lassen und besser jeder Abteilung eine Rolle zuweisen, die kontrolliert wird?
-
Das macht doch nun gar keinen Sinn: In Prüfung hast Du eine LISTE von Gruppenmitgliedern. Die kann ja nun (fast) nie dem aktuellen Usernamen entsprechen. Ausserdem brauchst Du die Negation:
!@IsMember (@UserName, Pruefung)
Bernhard
-
Das hast du wohl Recht, hab ich im Nachhinein auch gemerkt. Hab jetzt mit Rollen und dem Befehl !@IsMember ([..]; @UserRoles) das Problem gelöst.
Danke
-
ähmmm... @Bernhard: Kann es sein, dass Du in letzter Zeit etwas neben Dir stehst ? ;)
Ich weiss nicht, wie es in Deinem Notes aussieht, aber bei mir liefert
liste = einzelWert schon seit jeher "True", wenn der einzelWert in der Liste steht.
Wichtig zu wissen ist dabei nur:
Die Negierung funktioniert anders:
liste != einzelWert ist genau dann True, wenn in der Liste auch nur ein Wert ist, der nicht dem Einzelwert entspricht.
!(liste = einzelWert) ist genau dann True, wenn einzelWert nicht in der Liste vorkommt...
in dem unten genannten Beispiel müsste es also heissen: !(Pruefung = @UserName)
Gruß
Tode