Autor Thema: Feld Validierungen @Prombt zusammenfassen  (Gelesen 5040 mal)

Offline marsu_2

  • Junior Mitglied
  • **
  • Beiträge: 62
Feld Validierungen @Prombt zusammenfassen
« am: 17.10.13 - 18:15:16 »
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)
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)

"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
« Letzte Änderung: 17.10.13 - 18:24:46 von marsu_2 »

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Feld Validierungen @Prombt zusammenfassen
« Antwort #1 am: 18.10.13 - 08:31:58 »
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 )

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 )

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

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline marsu_2

  • Junior Mitglied
  • **
  • Beiträge: 62
Re: Feld Validierungen @Prombt zusammenfassen
« Antwort #2 am: 21.10.13 - 14:57:22 »
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));

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]); "")
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
« Letzte Änderung: 21.10.13 - 16:27:16 von marsu_2 »

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Feld Validierungen @Prombt zusammenfassen
« Antwort #3 am: 21.10.13 - 15:17:31 »
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" ; "" ) :
also ohne das _var :

Ansonsten müsste es in einer Schalftläche funktionieren....
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline marsu_2

  • Junior Mitglied
  • **
  • Beiträge: 62
Re: Feld Validierungen @Prombt zusammenfassen
« Antwort #4 am: 21.10.13 - 16:23:57 »
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.

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Feld Validierungen @Prombt zusammenfassen
« Antwort #5 am: 21.10.13 - 16:30:47 »
SafeOptions ist in jedem Fall die "optimale" Lösung... Ist das nämlich auf "0" gesetzt, dann kann man das Dokument gar nicht mehr speichern. Der Benutzer verliert beim drücken auf Esc (auch beim versehentlichen drücken) alle seine Änderungen und wird nicht mal mehr gefragt....
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline marsu_2

  • Junior Mitglied
  • **
  • Beiträge: 62
Re: Feld Validierungen @Prombt zusammenfassen
« Antwort #6 am: 21.10.13 - 16:32:56 »
Äh also war der erste Teil sarkastisch gemeint!?

Dann kenne und sehe ich keine suabere Möglichkeit die Feld Validierung über @Formeln zu realisieren? Wenn als Bedingung gilt sie zusammen in den QuerySave zu setzen.


Offline Keydins

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
Re: Feld Validierungen @Prombt zusammenfassen
« Antwort #7 am: 22.10.13 - 08:43:41 »
Was den Verlust der Eingaben bei auf 0 gesetztem SaveOptions angeht, so hilft eine kleine Ja/Nein Abfrage im QueryClose, um den Benutzer zu fragen, ob er seine Eingaben tatsächlich verwerfen möchte.

Gruß
Dirk
Gruß Dirk

Aktuelle Notesumgebung
~800 BasicClients 9.0.1 FP9 SHF55
  10 FullClients 9.0.1 FP7 SHF143
    7 DominoServer 9.0.1 FP9 HF 139 / 64 Bit

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Feld Validierungen @Prombt zusammenfassen
« Antwort #8 am: 22.10.13 - 09:07:09 »
Was den Verlust der Eingaben bei auf 0 gesetztem SaveOptions angeht, so hilft eine kleine Ja/Nein Abfrage im QueryClose, um den Benutzer zu fragen, ob er seine Eingaben tatsächlich verwerfen möchte.
... und dann kommt eines Tages eine Erweiterung, bei der z.B. mittels Schaltfläche ein paar Felder gesetzt und dann das Dokument hart geschlossen werden soll. Dazu setzt man natürlich auch SaveOptions auf 0 und das QueryClose kommt mit der Frage dazwischen. Also muss die Schaltfläche ein weiteres Feld mit einem Flag setzen, damit das QueryClose in diesem Fall nicht die Frage stellt.

Kann man alles machen. Man kann auch mit einem Porsche ein Feld pflügen und mit einem Trecker Autorennen fahren. Oder mit Formeln im Querysave eine Validierung bauen. Zum Glück muss man es nicht ...

... Ich habe das ganze dann jetzt mit Script erstellt so passt es. Mich würde natürlich immer noch interessieren warum mein versuch scheiterte ...
... weil Dein Porsche im Morast verreckt ist. Der Trecker (hier also Script) ist für dieses Feld einfach die bessere Wahl.  ;)

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Feld Validierungen @Prombt zusammenfassen
« Antwort #9 am: 22.10.13 - 09:09:34 »
Jetzt hast Du es... es GIBT keine saubere Möglichkeit, eine zentrale Feldvalidierung mit Formeln im QuerySave zu machen (wenn man von einem bösen Workaround absieht, nämlich im QuerySave ein Feld zu befüllen, was sich selbst dann wiederum in einer Feldvalidierung abfragt und... lassen wir das).

@Peter: +1
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline marsu_2

  • Junior Mitglied
  • **
  • Beiträge: 62
Re: Feld Validierungen @Prombt zusammenfassen
« Antwort #10 am: 22.10.13 - 09:41:34 »
warum finde ich dann diese Antwort nicht im Forum  :D ... nein Spaß

und PS: wenn meine anderen Kollegen Porsche fahren aber noch nie einen Traktor gesehen haben kann es vielleicht sogar Sinn machen mit einem Cayenne das Feld zu pflügen.  ;)


Offline pimpfling

  • Senior Mitglied
  • ****
  • Beiträge: 367
  • Geschlecht: Männlich
Re: Feld Validierungen @Prombt zusammenfassen
« Antwort #11 am: 22.10.13 - 09:56:12 »
Was den Verlust der Eingaben bei auf 0 gesetztem SaveOptions angeht, so hilft eine kleine Ja/Nein Abfrage im QueryClose, um den Benutzer zu fragen, ob er seine Eingaben tatsächlich verwerfen möchte.
... und dann kommt eines Tages eine Erweiterung, bei der z.B. mittels Schaltfläche ein paar Felder gesetzt und dann das Dokument hart geschlossen werden soll. Dazu setzt man natürlich auch SaveOptions auf 0 und das QueryClose kommt mit der Frage dazwischen. Also muss die Schaltfläche ein weiteres Feld mit einem Flag setzen, damit das QueryClose in diesem Fall nicht die Frage stellt.

Kann man alles machen. Man kann auch mit einem Porsche ein Feld pflügen und mit einem Trecker Autorennen fahren. Oder mit Formeln im Querysave eine Validierung bauen. Zum Glück muss man es nicht ...

... Ich habe das ganze dann jetzt mit Script erstellt so passt es. Mich würde natürlich immer noch interessieren warum mein versuch scheiterte ...
... weil Dein Porsche im Morast verreckt ist. Der Trecker (hier also Script) ist für dieses Feld einfach die bessere Wahl.  ;)

Warum sollte man mit einem Porsche 218 nicht das Feld pflügen können? ;)
Gruß Stefan

----------------------------------
EDV-Systeme verarbeiten, womit sie gefüttert werden. Kommt Mist rein, kommt Mist raus.

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Feld Validierungen @Prombt zusammenfassen
« Antwort #12 am: 22.10.13 - 10:12:20 »
Ich habe nicht gesagt, dass man es nicht kann, sondern dass man es zum Glück nicht muss ... ;)

Und klar, auch Porsche hat mal Trecker gebaut, wie auch Ferrari und Lamborghini und sicher noch viele andere (irgendwie wusste ich vorher, dass da sowas zurückkommt ;D ) ...

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Feld Validierungen @Prombt zusammenfassen
« Antwort #13 am: 22.10.13 - 11:05:18 »
warum finde ich dann diese Antwort nicht im Forum
Weil Du nicht gesucht hast?
Forumsuche nach QuerySave Feldvaldierung liefert:
http://atnotes.de/index.php/topic,56775.0.html
http://atnotes.de/index.php/topic,56437.0.html
http://atnotes.de/index.php/topic,43858.0.html

Eins der Themen ist nicht mal einen Monat alt, das andere aus dem Juli...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline marsu_2

  • Junior Mitglied
  • **
  • Beiträge: 62
Re: Feld Validierungen @Prombt zusammenfassen
« Antwort #14 am: 22.10.13 - 12:27:20 »
 ;D nene so nicht

Ich habe so einiges zu dem Thema gelesen.

Auch deinen ersten Link habe ich gelesen und dazu folgenden Beitrag gelesen
http://atnotes.de/index.php/topic,16581.0.html

deswegen dachte ich mir "hmmm irgendwie widersprüchlich, da schaust du doch mal wo du rauskommst",

Dank euch für eure Unterstützung.



 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz