Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: watschn am 16.01.12 - 14:50:32

Titel: Komisches Problem mit @IF - bitte um Hilfe
Beitrag 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
Titel: Re: Komisches Problem mit @IF - bitte um Hilfe
Beitrag von: koehlerbv am 16.01.12 - 14:54:14
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
Titel: Re: Komisches Problem mit @IF - bitte um Hilfe
Beitrag von: watschn am 16.01.12 - 15:07:19
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?
Titel: Re: Komisches Problem mit @IF - bitte um Hilfe
Beitrag von: Keydins am 16.01.12 - 15:16:01
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
Titel: Re: Komisches Problem mit @IF - bitte um Hilfe
Beitrag von: koehlerbv am 16.01.12 - 15:18:32
Das mit dem @Do ist nicht erforderlich. Es reicht ein "; ""); hinter der Prompt-Klammer.

Bernhard
Titel: Re: Komisches Problem mit @IF - bitte um Hilfe
Beitrag von: Keydins am 16.01.12 - 15:34:54
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
Titel: Re: Komisches Problem mit @IF - bitte um Hilfe
Beitrag von: watschn am 16.01.12 - 15:37:47
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  :)
Titel: Re: Komisches Problem mit @IF - bitte um Hilfe
Beitrag von: Keydins am 16.01.12 - 15:46:16
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.
Titel: Re: Komisches Problem mit @IF - bitte um Hilfe
Beitrag von: watschn am 16.01.12 - 15:49:30
Achso, das mit dem Codeabbruch durch @return wußte ich nicht. Habe aber ewig in der Hilfe nach diesem Befehl gesucht
Titel: Re: Komisches Problem mit @IF - bitte um Hilfe
Beitrag von: cebolina am 16.01.12 - 15:56:23
hierzu passend: http://atnotes.de/index.php/topic,53261.msg343671.html

Gruß Stefan