Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: brathaenchen am 21.04.05 - 08:51:36

Titel: Abfrage ob name schon vorhanden
Beitrag 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?
Titel: Re: Abfrage ob name schon vorhanden
Beitrag von: klaussal am 21.04.05 - 08:58:43
Zitat
ob ein anderes Dokument diesen Namens existiert

Wie soll man das verstehen ? Ansonsten mit "getdocumentbykey" (siehe Designer-Hilfe).
Titel: Re: Abfrage ob name schon vorhanden
Beitrag von: entertainer1105 am 21.04.05 - 09:09:15
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.
Titel: Re: Abfrage ob name schon vorhanden
Beitrag von: Axel am 21.04.05 - 09:24:14
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
Titel: Re: Abfrage ob name schon vorhanden
Beitrag von: ..Andreas.. am 21.04.05 - 09:29:08
@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
Titel: Re: Abfrage ob name schon vorhanden
Beitrag von: brathaenchen am 21.04.05 - 09:39:18
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?
Titel: Re: Abfrage ob name schon vorhanden
Beitrag von: rar am 21.04.05 - 09:49:58
Mit Continue = False

-d
Titel: Re: Abfrage ob name schon vorhanden
Beitrag von: TMC am 21.04.05 - 23:45:52
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.
Titel: Re: Abfrage ob name schon vorhanden
Beitrag von: TMC am 21.04.05 - 23:49:03
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.
Titel: Re: Abfrage ob name schon vorhanden
Beitrag von: koehlerbv am 22.04.05 - 00:00:21
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