Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: watschn am 16.01.12 - 14:50:32
-
Hallo zusammen,
ich habe ein ganz seltsames Problem und muss zur Erklärung leider etwas weiter ausholen.
Ich habe eine Schaltfläche programmiert die aber nur dann richtig funktioniert wenn ich keine @if Funktion verwende
Hier meine Formel:
@If(Anhang != "OK";
@Return(@Prompt([Ok];
"Fehler";"Kein Anhang!"));
Date := Datum_ab;
WeekThursday := @Adjust(Date; 0; 0; @If (@Weekday(Date) = 1; -3; -@Weekday (Date) + 5); 0; 0; 0);
WeekYear := @Year (WeekThursday);
January4Date := @Date (WeekYear; 1; 4);
FirstThursday := @Adjust (January4Date; 0; 0; @If (@Weekday (January4Date) = 1; -3; -@Weekday (January4Date) + 5); 0; 0; 0);
Week := ((WeekThursday - FirstThursday) / 86400) / 7 + 1;
@SetField ("KW"; Week);
@True;
@Command([FileSave]);
@Do(
@Command([FileCloseWindow]));
FIELD SaveOptions:="0")
Was ich machen möchte. Prüfen ob das Feld "Anhang" den Wert "OK" Hat,
trifft die Bedingung nicht zu, dann soll eine Meldung erscheinen "Kein Anhang gefunden" und der Vorgang abgebrochen werden.
--> dies funktioniert!
trifft die Bedingung zu, dann soll anhand des Feldes "Datum_ab" die Kalenderwoche ermittelt werden und das Dokument gespeichert werden
--> dies funktioniert nicht, ich erhalte die Meldung
Falscher Datentyp für Operator oder @Funktion:Zahl erwartet
Und nun das komische an der Sache:
Schreib ich die Formel ohne der @if Bedingung, dann funktioniert es. Die Kalenderwoche wird ohne Fehlermeldung berechnet
Date := Datum_ab;
WeekThursday := @Adjust(Date; 0; 0; @If (@Weekday(Date) = 1; -3; -@Weekday (Date) + 5); 0; 0; 0);
WeekYear := @Year (WeekThursday);
January4Date := @Date (WeekYear; 1; 4);
FirstThursday := @Adjust (January4Date; 0; 0; @If (@Weekday (January4Date) = 1; -3; -@Weekday (January4Date) + 5); 0; 0; 0);
Week := ((WeekThursday - FirstThursday) / 86400) / 7 + 1;
@SetField ("KW"; Week);
@True;
@Command([FileSave]);
@Do(
@Command([FileCloseWindow]));
FIELD SaveOptions:="0";
Kann mir jemand erklären wo hier der Fehler liegt? Bitte um Hilfe.
Grüße, Michael
-
Die @If-Syntax wurde aber auch nicht eingehalten, Michael! Und das auch noch mit @Prompt - da passieren dann seltsame Dinge ;)
Setze als Else-Zweig einfach einen Leerstring, und alles wird gut.
Bernhard
-
Hallo Bernhard,
jetzt verwirrst du mich aber noch mehr.
Ich habe doch einen Else-Zweig :-:
Wenn
@If(Anhang != "OK"
Dann
@Return(@Prompt([Ok];
"Fehler";"Kein Anhang!"))
Sonst
Date := Datum_ab;
WeekThursday := @Adjust(Date; 0; 0; @If (@Weekday(Date) = 1; -3; -@Weekday (Date) + 5); 0; 0; 0);
WeekYear := @Year (WeekThursday);
January4Date := @Date (WeekYear; 1; 4);
FirstThursday := @Adjust (January4Date; 0; 0; @If (@Weekday (January4Date) = 1; -3; -@Weekday (January4Date) + 5); 0; 0; 0);
Week := ((WeekThursday - FirstThursday) / 86400) / 7 + 1;
@SetField ("KW"; Week);
@True;
@Command([FileSave]);
@Do(
@Command([FileCloseWindow]));
FIELD SaveOptions:="0")
Steh ich jetzt auf dem Schlauch oder wo ist mein Denkfehler?
-
Dein Else müsste in diesem Fall in ein @Do() eingeschlossen werden, um als komplette Else-Anweisung verstanden zu werden.
Ich persönlich nutze aber auch lieber die von Bernhard vorgeschlagene Version, die Abbruchbedingung in einem @If mit leerem Else zu prüfen, da man in der Formelsprache ansonsten ganz schnell mit den Klammerebenen aneinander geraten kann. :-\
Gruß
Dirk
-
Das mit dem @Do ist nicht erforderlich. Es reicht ein "; ""); hinter der Prompt-Klammer.
Bernhard
-
So wie Michael den Vorgang in seinem letzten Post beschrieben hat bräuchte er aber schon das @Do, oder?
Michaels Lösung:
Wenn(
Kein Anhang
Dann
Abbrechen
Sonst
Restlicher Code
)
Bernhards Lösung:
Wenn(
Kein Anhang
Dann
Abbrechen
Sonst
Nix/Leer
)
Restlicher Code
-
Die Lösung von Dirk mir dem @Do funktioniert - vielen Dank!
Wenn ich das wie von Bernhard vorgeschlagen mache, dann brauch ich aber zwei IF-Bedingungen. Also eine für den Abbruch mit @prompt (wenn Feldwert ist nicht "OK") und eine für den anderen Fall.
Hab ich wieder was gelernt, prima :)
-
Nein, auch bei der Lösung von Bernhard brauchst du kein zweites @If
@If(
Anhang != "OK";
@Return(
@Prompt([Ok];"Fehler";"Kein Anhang!")
);
""
);
... Hier dann der restliche Code ...
Wenn ein Anhang da ist, passiert im Else nichts und die Formel wird nach der Klammer ganz normal fortgesetzt. Ist kein Anhang da, wird über das Return abgebrochen und der restliche Code wird ignoriert. Ist grade bei längerem Code übersichtlicher, da man sich nicht mit noch einer zusätzlichen Klammerebene (die des @Do) belasten muss.
-
Achso, das mit dem Codeabbruch durch @return wußte ich nicht. Habe aber ewig in der Hilfe nach diesem Befehl gesucht
-
hierzu passend: http://atnotes.de/index.php/topic,53261.msg343671.html
Gruß Stefan