Ich weiß das der Spagetti Code nicht schön ist, war doch aber der Meinung das er funktionieren sollte!?
Solange ich nur eine IF Anweisung mit Do durchgehe und die Variable dann mit @Prombt ausgebe klappt es wie gewünscht. Wenn mehrere Anweisungen hintereinander folgen kommt ein Gemenge unterschiedlichster Meldungen die nicht dem Schema folgen.
Mein Ziel ist:
Drei Felder abfragen, wenn sie leer sind in Ordnung, wenn aber was drin steht muss es auch Sinn machen. Dafür wird dann die Länge und die Art der Satzzeichen geprüft.
Der Code klappt:
var:="";
@If(PersonenNr.="";@Success;@Do(
@If(@Length(PersonenNr.)!=10;
@Set("var";var+@NewLine+"Personen-NR muss zehnstellig sein");@Success);
@If(@Matches(PersonenNr.;"+?{!0-9}");
@Set("var";var+@NewLine+"Sie dürfen in der Personen-NR nur Zahlen verwenden");@Success)));
@Prompt([Ok];Hinweiß;var)
Der klappt nicht mehr:
var:="";
@If(PersonenNr.="";@Success;@Do(
@If(@Length(PersonenNr.)!=10;
@Set("var";var+@NewLine+"Personen-NR muss zehnstellig sein");@Success);
@If(@Matches(PersonenNr.;"+?{!0-9}");
@Set("var";var+@NewLine+"Sie dürfen in der Personen-NR nur Zahlen verwenden");@Success)));
@If(FKB_OE="";@Success;@Do(
@If(@Length(FKB_OE)!=7;
@Set("var";var+@NewLine+"OE muss siebenstellig sein");@Success);
@If(@Matches(FKB_OE;"+?{!0-9}");
@Set("var";var+@NewLine+"Sie dürfen in der OE nur Zahlen verwenden");@Success)));
@If(PeronenNr.="";@Success;@Do(
@If(@Length(Gruppen_V_NR)!=4;
@Set("var";var+@NewLine+"Die Gruppenvertragsnummer muss vierstellig sein");@Success);
@If(@Matches(Gruppen_V_NR;"+?{!0-9}");
@Set("var";var+Newline+"Die Gruppenvertragsnummer darf nur Buchstaben enthalten");@Success)));
@Prompt([Ok];Hinweiß;var)
"Der klappt nicht mehr" heißt je nach Eingabe kommen unterschiedliche Meldungen aber nicht die die kommen sollten, so als würde er mit der IF Anweisung durcheinadner kommen.
Grüße
Thomas
1. In der Formelsprache verschachtelt man nicht so tief, sondern geht sequentiell vor.
2. Der Text bei @Prompt kann maximal 254 Zeichen lang sein (und ich meine, auch die Anzahl der Zeilen ist beschränkt).
3. Du machst ein @Prompt am Ende... Das bricht NIX ab... Also egal wo der Code steht: Der Benutzer kann mit "Strg + S" oder drücken auf das Diskettensymbol jederzeit speichern,
ohne dass Deine Validierungen abgefragt werden.
Wenn man all das ignoriert, und auf dem Spaghetti- Code besteht, dann würde das so aussehen:
_var := @If( @Length(PersonenNr.)!=10; "Personen-NR muss zehnstellig sein" ; "") :
@If( @Matches(PersonenNr.;"+?{!0-9}"); _var : "Sie dürfen in der Personen-NR nur Zahlen verwenden" ; "" ) :
@If( FKB_OE!="" & @Length( FKB_OE ) != 7; "OE muss siebenstellig sein" ) :
...
_msg := @Implode( @Trim( _var ) ; @NewLine );
@Prompt( [OK] ; Hinweis; _msg )
Die @Ifs werden also einfach als Liste hintereinandergeschaltet und dann am Ende per @NewLine zu einem String implodet.
Das ändert immer noch nix an 2 und 3, aber funktioniert wenigstens. Wenn Du das in eine FeldValidierung packst, dann müsste die letzte Zeile so aussehen:
@If( _var != "" ; @Failure( _msg ) ; @Success )
Problem bei der Sache: @Failure kennt kein @NewLine und auch keine andere Möglichkeit, Zeilenumbrüche unterzubringen... ziemlich hässliche Meldung dann...
Hi Tode,
danke für die guten Tips, ich hatte es dann wie folgt probiert
FIELD SaveOptions := SaveOptions;
_var := @If( @Length(PersonenNr)!=10; "PR-NR 10 Stellen" ; "") :
@If( @Matches(PersonenNr;"+?{!0-9}"); _var : "PR nur Zahlen" ; "" ) :
@If( FKB_OE!="" & @Length( FKB_OE )!= 7; _var : "OE 7 Stellen" ; "") :
@If(@Matches(FKB_OE;"+?{!0-9}"); _var : "OE nur Zahlen" ; "" ) :
@If( Gruppen_V_NR!="" & @Length(Gruppen_V_NR)!=4; _var : "GRVNR 4 Stellen" ; "") :
@If(@Matches(Gruppen_V_NR;"+?{!0-9}"); _var : "GVNR nur Zahlen" ; "");
_msg := @Implode( @Trim( _var ) ; @NewLine );
@If(_msg!=""; @Return(@SetField("SaveOptions";"0")) & @Prompt([Ok];"Hinweiß";"die folgenden Felder müssen der Syntax entsprechen:"+@NewLine+_msg);
@SetField("SaveOptions";@Unavailable));
Aber dann nimmt er nur die erste Anweisung aus der IF-Abfrage also das @Return und gibt keine Fehlermeldung raus, auch der Speicherbutton @If(@Command([FileSave]); @Command([FileCloseWindow]); "")
funktioniert nicht so wie von mir erwartet. Ich habe das ganze dann jetzt mit Script erstellt so passt es. Mich würde natürlich immer noch interessieren warum mein versuch scheiterte aber es ist nicht mehr dringend
Nochmal: Die Formel mit @Prompt bricht keine Speicherung ab... Das geht nur mit @Failure als Feldvalidierungsformel in einem bearbeitbaren Feld.
und ausserdem war in meiner Formel in der zweiten Zeile noch ein Fehler, das hätte so heissen müssen @If( @Matches(PersonenNr;"+?{!0-9}"); "PR nur Zahlen" ; "" ) :
also ohne das _var :
Ansonsten müsste es in einer Schalftläche funktionieren....