Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: eknori am 23.08.02 - 10:01:27
-
@All
Habe ein kleines Problem. Vermutlich ist es einfach zu lösen, aber irgendwie komme ich nicht auf den Dreh.
Folgendes soll passieren
Ich habe eine Maske mit folgendem Aufbau:
Freigabe K: o J o N Datum Freigabe: xx.xx.xxxx
Freigabe T: o J o N Datum Freigabe: xx.xx.xxxx
Bei einem neuen Doc ist J/N leer, also keine Option gewählt und das Datum der Freigabe noch nicht gefüllt.
Die Datumsfelder sind berechnet und enthalten folgende Formel:
@If(KFrei="" | @IsNewDoc;
@If(KFJN="J" | KFJN = "N";@Now;"");
@If(KFJN="J" | KFJN = "N";@Text(@Date(@Now))+" (!)";""))
(entsprechend für TFrei)
Es soll damit erreicht werden, kenntlich zu machen, wenn ein User den Status der Freigabe im Nachhinein geändert hat.
Also: User T gibt das Doc am 22.08.2002 frei; dann enthält Datum Freigabe : 22.08.2002.
Speichert er nun das Document und öffnet es erneut, um den Freigabestatus zu ändern, enthält das Feld naxch der Änderung den Wert 22.08.2002 (!).
Damit ist klar, dass sich hier im Nachhinein etwas geändert hat.
Das Problem ist aber nun, dass sich der Wert in TFreiDatum auch dann ändert, wenn ich in KFrei den Status ändere.
Die Option "Felder bei Schlüsselwort..." ist aktiviert.
Nach der Formel ist das auch logisch; nur, wie bekomme ich das hin, dass sich nur in den zugehörigen Datumsfeld etwas ändert ???
eknori
P.S. Ich hoffe, ich habe nicht zu nuschelig geschrieben
-
Hi eknori,
eine Lösung wäre Script-Programmierung:
(Declarations)
dim KFreiJN_Alt as string
dim TFreiJN_Alt as string
Postopen:
KFreiJN_Alt = Source.FieldGetText("KFreiJN")
TFreiJN_Alt = Source.FieldGetText("TFreiJN")
Querysave:
if KFreiJN_Alt <> Source.FieldGetText("KFreiJN") then
Source.Document.KFrei = today
end if
KFreiJN_Alt = Source.FieldGetText("KFreiJN")
if TFreiJN_Alt <> Source.FieldGetText("TFreiJN") then
Source.Document.TFrei = today
end if
TFreiJN_Alt = Source.FieldGetText("TFreiJN")
Mit Formelsprache ist das aufwendiger: Du müsstest Hilfsfelder einbauen, die jeweils HINTER den beiden Stati-Feldern und Datums-Feldern stehen, bspw.
KFfreiJNAlt
berechnet, Formel: KFreiJN
analog TFreiJN
Dann im Datumsfeld:
@If(
KFreiJN != KFreiJNAlt;
@Today;
KFrei
)
Gruß
Andreas
-
@Andreas: DANKE, werde ich gleich mal ausprobieren.
-
Hi,
vielleicht zum Verständnis. Diese beiden Zeilen könnten auch so aussehen oder:
WENN @If(KFrei="" | @IsNewDoc;
DANN @If(KFJN!="";@Now;"");
SONST @If(KFJN!="";@Text(@Date(@Now))+" (!)";""))
So wie ich das sehe, läuft das Programm, wenn KFRei geändert wird sofort in Zeile "SONST" und steht drin, das wenn KFJA!="" ist das Datum gesetzt werden soll.
Liege ich da richtig ?
Andreas
-
@Andreas
Das ist richtig; das Problem liegt ja darin, dass bei einer nachträglichen Änderung im Feld TFreiJN durch die Aktualisierung bei schlüssewortänderung auch das Datum bei KFrei geändert wird, da ja die SONST Bedingung erfüllt ist.
Ich werde das jetzt mit Script machen, da ich noch mehrere dieser felder habe.
@Gombi
Das funktioniert noch nicht 100%, ist aber ein guter Ansatz.
Da kann ich drauf aufbauen.
eknori
-
witziges Problem...
ich habs mal mit einem Optionsfeld zunächst getestet, da das Prinzip entscheidend ist. Dann kann man es immer noch auf 2 Optionsfelder ausdehnen. Wobei ich nicht ganz verstanden habe, warum Du beide kombiniert überwachst und nicht jedes für sich getrennt.
Also:
1. Feld "Option"
"ja" oder "nein"
2. Feld "Dater"
Anzeige des Datums als Text
in sich selbst berechnet: Formel: Dater
3. Feld hidden "Checker"
bearbeitbar, kein Vorgabewert
nun eine Eingabeübersetzungsformel in "Option":
@If(
checker!=Option &
!@IsNewDoc &
@IsDocBeingSaved &
!@Contains(Dater;"ÄNDERUNG");
@Do
(@SetField("Dater";"ÄNDERUNG");@SetField("Checker";Option)
);
checker!=Option & @IsNewDoc;
@Do
(@SetField("Dater";@Text(@Today));@SetField("Checker";Option)
);
Option)
Im zweiten Teil der Formel wird dafür Sorge getragen, daß das versteckte Vergleichsfeld "Checker" den Wert von "Option" bekommt und das Datum abgestempelt wird. Aber nur wenn Doc neu ist.
Im ersten Teil triggert die Formel nur dann den Wert vom hidden Field "Checker" UND dann auch vom Field "Dater" (der die Änderung optisch anzeigt), wenn
das Doc
1. gespeichert wird
2. nicht neu ist
3. Inhalt von Option und Checker sich unterscheiden
4. und "DATER" eh nicht bereits Deinen Änderungs-Marker "!" enthält (in meinem Falle habe ich den String "Änderung" benutzt)
Klappelt wunderbar ;D
-
Ich überwache die felder nicht kombiniert; da hast du was falsch verstanden.
Bei einem feld funktioniert die Formel auch hervorragend; kommt aber ein zweites Feld hionzu; geht es nicht mehr.
Werde mal deine Möglichkeit probieren
eknori