Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: brathaenchen am 21.04.05 - 08:51:36
-
Hi!
ich möchte in Script abprüfen, das wenn ich ein neues Dokument erstelle
abgeprüft wird, ob ein anderes Dokument diesen Namens existiert und wenn ja zum Abbruch beim Speichern führt.
Wie mache ich sowas?
-
ob ein anderes Dokument diesen Namens existiert
Wie soll man das verstehen ? Ansonsten mit "getdocumentbykey" (siehe Designer-Hilfe).
-
Vielleicht hilft Dir das:
Dim session As New NotesSession
Dim db As Notesdatabase
Dim view As Notesview
Dim doc As Notesdocument
Dim uidoc As NotesUIDocument
Dim workspace As New NotesUIWorkspace
Dim ProjektNrStr As String
Set uidoc=workspace.Currentdocument
If uidoc.IsNewDoc Then
ProjektNrStr=uidoc.FieldGetText("ProjektNr")
Set db= session.currentdatabase
Set view=db.GetView("nach Projektnummern")
Set doc=View.GetDocumentbyKey(ProjektNrStr,True)
If Not (doc Is Nothing) Then
Msgbox "ProjektNr schon vergeben",MB_OK,"Fehler"
Call uidoc.FieldSetText("ProjektNr","")
Call uidoc.GotoField("ProjektNr")
End If
End If
Das ist ein Script Eintrag, der in einem Key-Feld (in diesem Fall die Projektnummer) unter "Exiting" steht und prüft, ob es diese Projektnummer schon gibt. Falls ja, wird wieder in das Feld "Projektnummer" gesprungen.
-
Hi,
gegen den Code ist nichts zu sagen, aber ich würde das nicht im Exiting - Event machen. Dieser Event wird unter Umständen nicht ausgeführt. Besser ist so was im QuerySave-Event der Maske aufgehoben.
Axel
-
@entertainer1105 ... der Exiting event wird allerdings nur beim Verlassen des Feldes ausgeführt, also sollte man das Ganze auch (oder ausschließlich?) beim Speichern prüfen. Denn per Lotusdefinition verlässt man beim Speichern das Feld nicht.
Andreas
-
Hey!
danke für die tollen Antworten. Hat alles Prima geklappt. hab es im Querysafe untergebracht, da dies etwas sicherer ist.
hab nur noch ein kleines Problem. Ich möchte nicht das das Dokument bei falschem Feldnamen gespeichert und geschlossen werden kann.
Wie kann das verhindert werden?
-
Mit Continue = False
-d
-
Weiß nicht ob man da unbedingt LotusScript braucht ???
Idee:
_DeinFeld := FeldDasDuPrüfenWillst;
_Lookup := @DbColumn("":"NoCache"; ""; "(lookupName)");
_AlreadyExists := @IsMember( _DeinFeld ; _Lookup);
@If(_AlreadyExists;
@Failure("Möööp, Name existiert bereits");
@Success
)
Die Ansicht "(lookupName)" enthält da Deine Namen...
Dabei vielleicht noch @Trim und andere String-Absicherungen verwenden, um z.B. Leerzeichen rauszuwerfen.
-
Ach ja, was machst Du, wenn mit mehreren Repliken gearbeitet wird? Dann kannst Du das so vergessen. Da müssen dann andere - sehr durchdachte - Werkzeuge ran, sonst lässt es sich nicht vermeiden, dass doppelte Namen erzeugt werden.
-
Alle bisherigen Vorschläge setzen voraus, das die Prüfung nur dann durchgeführt wird, wenn das Dokument gerade erstellt wird. Jede spätere Änderung des Dokuments würde dann entweder ungeprüft verlaufen oder zu einer "Document already exists !"-Meldung führen.
Ergo: Entweder darf das zu prüfende Feld nur bei der Erstellung editierbar sein oder die Prüfung muss aufwändiger werden (GetAllDocumentsByKey, wenn in der Collection dann ein Doc ist, das nicht die UNID des aktuellen Docs hat, dann schlägt die Prüfung fehl).
Sowas liesse sich mit Verrenkungen auch mit @functions machen, aber das sollte hier mal nicht das erste Mittel der Wahl sein ;D
Bernhard