Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Diro am 09.09.04 - 13:15:45

Titel: Script gegen doppelte Einträge
Beitrag von: Diro am 09.09.04 - 13:15:45
Hallo Leute,

ich habe ein kleines Problem mit einem Script welches in Querysave einer Maske integriert ist. Das Script funktioniert nur wenn sich dieses auf ein Feld mit Typ Text bezieht aber nicht wenn es sich um den Feldtyp Zahl handelt.
Das Script sieht wie folgt aus:
Sub Querysave(Source As Notesuidocument, Continue As Variant)
   Dim session As New NotesSession
   Dim workspace As New NotesUIWorkspace
   
   Set uidoc = workspace.CurrentDocument
   Set doc = uidoc.Document
   Set db = session.CurrentDatabase
   Set view = db.GetView( "Lieferanten" )  'Name der Ansicht mit allen Dokumenten
   If doc.IsNewNote Then  'Prüfung auf doppelte Dokumente nur wenn Dokument neu
      Set tmpdoc = view.GetDocumentByKey( doc.Lieferantennr(0) )
      If tmpdoc Is Nothing Then
      'Lieferantennummer noch nicht vorhanden
      Else
      'Lieferantennummer bereits in der Datenbank vorhanden
         continue=False
         Msgbox "Ein Lieferant mit dieser Lieferantennummer ist schon vorhanden!!!"
         Exit Sub
      End If
   End If
   
End Sub

Vielleicht könnt Ihr mir ja einen Tipp geben  ::) ::)

Gruß Diro
Titel: Re:Script gegen doppelte Einträge
Beitrag von: Driri am 09.09.04 - 13:40:26
Dann mach doch aus dem Wert einfach einen String.

Set tmpdoc = view.GetDocumentByKey( CStr(doc.Lieferantennr(0)) )
Titel: Re:Script gegen doppelte Einträge
Beitrag von: Diro am 09.09.04 - 13:55:22
Hallo Ingo,

das mit dem String-Eintrag habe ich probiert, aber irgend ein Fehler muß noch vorhanden sein, denn ein speichern des doppelten Datensatzes ist immer noch möglich. Habe auch nochmal den Feldnamen und den der Ansicht überprüft, aber keinen Fehler gefunden.

Sub Querysave(Source As Notesuidocument, Continue As Variant)
   Dim session As New NotesSession
   Dim workspace As New NotesUIWorkspace
   
   Set uidoc = workspace.CurrentDocument
   Set doc = uidoc.Document
   Set db = session.CurrentDatabase
   Set view = db.GetView( "Lieferanten" )  'Name der Ansicht mit allen Dokumenten
   If doc.IsNewNote Then  'Prüfung auf doppelte Dokumente nur wenn Dokument neu
      Set tmpdoc = view.GetDocumentByKey( Cstr(doc.Lieferantennr(0)) )
      If tmpdoc Is Nothing Then
      'Lieferantennummer noch nicht vorhanden
      Else
      'Lieferantennummer bereits in der Datenbank vorhanden
         continue=False
         Msgbox "Ein Lieferant mit dieser Lieferantennummer ist schon vorhanden!!!"
         Exit Sub
      End If
   End If
   
End Sub

Gruß Diro
Titel: Re:Script gegen doppelte Einträge
Beitrag von: TMC am 09.09.04 - 21:05:00
n speichern des doppelten Datensatzes ist immer noch möglich.

Meinst Du damit, es kommt zwar jetzt die Meldung "Ein Lieferant mit dieser Lieferantennummer ist schon vorhanden!!!" aber das Dokument wird trotzdem gespeichert? Kann eigentlich nicht sein, da ja Continue = False drinsteht.

Wie speicherst Du Dein Dokument? Über einen Script-Button? Wird dort vielleicht das Backend-Dokument (NotesDocument) gespeichert?
Titel: Re:Script gegen doppelte Einträge
Beitrag von: koehlerbv am 09.09.04 - 21:10:06
Nix Buhtong, Matthias. Guck mal:

Das Script sieht wie folgt aus:
Sub Querysave(Source As Notesuidocument, Continue As Variant)
-----
End Sub


Bernhard
Titel: Re:Script gegen doppelte Einträge
Beitrag von: TMC am 09.09.04 - 21:14:02
Schon klar, Bernhard, aber irgendwie muss ja das Dokument gespeichert werden, damit der QuerySave-Event ausgelöst wird.

Meine Vermutung: Das Dok wird im Backend gespeichert. (da wohl hier Continue = False nicht greift).

Aber genau weiß ich es nicht, daher meine Frage....
Titel: Re:Script gegen doppelte Einträge
Beitrag von: koehlerbv am 09.09.04 - 21:32:58
GetDocumentByKey mit Longs (was Lieferantennummern ja sein können) könnte in manchen Versionen durchaus Ärger bringen - wir hatten erst vor nicht allzu langer Zeit einen Thread hierzu.

Mein Tip:
Ist die DB noch nicht produktiv: Sowieso Lieferantennummer als Text verwenden. Zumindest aber die Lookup-Ansicht mit Textwert für die Lieferantennummer ausführen.

@Matthias:
Wenn er vorab im Backend speichert, wäre die Nummer ja auf jeden Fall doppelt.
Und: Diro schrieb hier seinen Code aus dem QuerySave - schau mal nach. Da greift natürlich Continue = False

@Diro:
Wie stellst Du sicher, das ein Dokument, dass die Prüfung als "NewDoc" durchlief, nicht später hinsichtlich der Nummer geändert wird ? Das ist eine prinzipielle Frage !

Bernhard
Titel: Re:Script gegen doppelte Einträge
Beitrag von: Diro am 10.09.04 - 16:06:59
Hallo Bernhard,

zu deiner Frage die berechtigt ist:

"Wie stellst Du sicher, das ein Dokument, dass die Prüfung als "NewDoc" durchlief, nicht später hinsichtlich der Nummer geändert wird ? Das ist eine prinzipielle Frage !"

habe ich ehrlich gesagt noch gar nicht daran gedacht. Hast Du mir eventuell einen Tip wie ich das auch noch abfangen könnte?

Im übrigen könnte ich schon noch das Feld "Lieferantennr" in ein Textfeld umwandeln, nur habe ich dann das Problem wenn ich eine Suche mit <(kleiner) oder >(größer) als durchführen möchte.

Gruß Diro

Titel: Re:Script gegen doppelte Einträge
Beitrag von: koehlerbv am 10.09.04 - 16:17:51
Der gewünschte Tipp:
NotesView.GetAllDocumentsByKey.
In der NotesDocumentCollection darf dann eigentlich nur ein Dokument stehen - und dieses muss die gleiche UniversalID haben wie das Dokument, aus dem Du prüfst. Wenn nicht - dann ist was faul.
Steht gar kein Dokument in der Collection, ist auch alles grün, dann ist das Dokument neu.

Wegen der Prüfung auf grösser oder kleiner: Einerseits kannst Du - wenn Eure Lieferantennummern nur aus Ziffern bestehen - diese für solcherart Prüfungen wieder in eine Zahl umwandeln, andererseits kannst Du (was ich zu tun pflege) die Lieferantennummern auch normieren: Vorschrift ist zum Bleistift
"########"
User gibt
"123"
ein.
Du speicherst den Wert aber als
"00000123".

Kommt später jemand auf die Idee, die Lieferantennummern anders aufzubauen (zum Beispiel durch Voransetzen eines Ländercodes), bist Du fein 'raus - Dein Änderungsaufwand hält sich dann in Grenzen.

HTH,
Bernhard