Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: s.berger am 21.09.07 - 14:23:54

Titel: Validierungsformel
Beitrag von: s.berger am 21.09.07 - 14:23:54
Ich bekomme es leider nicht hin! Im Textfeld "id" soll kein doppelter Wert erscheinen. Da dachte ich, folgende Formel bei der Eingabevalidierung zu nehmen.

Code
double_id:=@DbLookup("":"NoCache";"";"(ids)";@LowerCase(id);1);
@If((id = "") | (@LowerCase(id) = double_id);@Failure("Bitte korrektes Kürzel eingegeben!");@Success);

Wenn die beiden Fälle der @If Bedingung eintreten, ist alles ok. Aber wenn double_id @IsError ist, kommt "Feld hat Validierungsformel nicht entsprochen". Was mache ich falsch?

Danke im voraus.
Titel: Re: Validierungsformel
Beitrag von: Thomas Schulte am 21.09.07 - 14:34:31
Mach einen [Failsilent], dann liefert er dir in diesem Fall wenn er nix findet einen leeren wert zurück. Der ist ja dann legitim .....
Titel: Re: Validierungsformel
Beitrag von: s.berger am 21.09.07 - 14:42:07
Danke, das hat geholfen.
Nur mal so, was würde man unter Notes 5 machen, als es noch kein [failsilent] gab?
Titel: Re: Validierungsformel
Beitrag von: pete_bla am 21.09.07 - 14:48:48
@isError gabs auch schon zu R5er zeiten

also so:
Code
double_id:=@DbLookup("":"NoCache";"";"(ids)";@LowerCase(id);1);
idok:= @IF(@IsError(double_id); @False;
             @LowerCase(id) = double_id);
@If((id = "") | (idok);@Failure("Bitte korrektes Kürzel eingegeben!");@Success)
Titel: Re: Validierungsformel
Beitrag von: Tode am 21.09.07 - 14:59:28
einen DBLookup nicht auf @IsError abzufragen ist ganz schlechter Programmierstil...
Das führt nämlich im dümmsten Fall dazu, dass Du Dokumente gar nicht mehr aufmachen kannst, weil der Fehler beim DBLookup das verhindert.

Failsilent nehme ich auch manchmal, das ist aber immer dann nervig, wenn der DBLookup nicht das zurückliefert was Du erwartest, und Du "debuggen" willst: Dann musst Du immer erst mal das Failsilent als Parameter entfernen, um zu sehen, was schief läuft.

In Deinem Beispiel würde das so aussehen:

double_id:=@DbLookup("":"NoCache";"";"(ids)";@LowerCase(id);1);
@If(@IsError( double_id ) ; @Success ; (id = "") | (@LowerCase(id) = double_id);@Failure("Bitte korrektes Kürzel eingegeben!");@Success);

ABER: Dein Konzept hat einen Schwachpunkt. Es funktioniert nur für neue Dokumente. Wenn Du versuchst, ein bestehendes Dokument erneut zu speichernn, wirst Du immer den @Failure kriegen, weil das Dokument sich per Lookup selbst findet...

Gruß
Tode
Titel: Re: Validierungsformel
Beitrag von: s.berger am 21.09.07 - 15:09:13
double_id:=@DbLookup("":"NoCache";"";"(ids)";@LowerCase(id);1);
@If(!@IsNewDoc;@Success;@IsError(double_id);@Success;id = "";@Failure("Bitte ein Kürzel eingeben!");@LowerCase(id) = double_id;@Failure("Kürzel ist schon vorhanden!");@Success)

So geht's auch für neue Dokumente. Danke nochmal.