Domino 9 und frühere Versionen > ND8: Entwicklung

Feld Validierungen @Prombt zusammenfassen

(1/3) > >>

marsu_2:
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:

--- Code: ---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)
--- Ende Code ---
Der klappt nicht mehr:

--- Code: ---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)
--- Ende Code ---

"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

Tode:
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:


--- Code: ---_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 )
--- Ende Code ---

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:


--- Code: ---@If( _var != "" ; @Failure( _msg ) ; @Success )
--- Ende Code ---

Problem bei der Sache: @Failure kennt kein @NewLine und auch keine andere Möglichkeit, Zeilenumbrüche unterzubringen... ziemlich hässliche Meldung dann...

marsu_2:
Hi Tode,

danke für die guten Tips, ich hatte es dann wie folgt probiert


--- Code: ---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));
--- Ende Code ---

Aber dann nimmt er nur die erste Anweisung aus der IF-Abfrage also das @Return und gibt keine Fehlermeldung raus, auch der Speicherbutton
--- Code: ---@If(@Command([FileSave]); @Command([FileCloseWindow]); "")
--- Ende Code ---
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

Tode:
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
--- Code: ---@If( @Matches(PersonenNr;"+?{!0-9}"); "PR nur Zahlen" ; "" ) :
--- Ende Code ---
also ohne das _var :

Ansonsten müsste es in einer Schalftläche funktionieren....

marsu_2:
Danke Tode, das ist und war mir klar, deswegen ja der Versuch mit den SafeOptions. Ich benutze das in einem QuerySave! und Setze so wie hier im Forum gelesen das Feld SafeOptions bei einem Fehler auf null, ansonsten lösche ich es wieder.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln