Autor Thema: Script gegen doppelte Einträge  (Gelesen 3251 mal)

Offline Diro

  • Frischling
  • *
  • Beiträge: 21
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Script gegen doppelte Einträge
« 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

Driri

  • Gast
Re:Script gegen doppelte Einträge
« Antwort #1 am: 09.09.04 - 13:40:26 »
Dann mach doch aus dem Wert einfach einen String.

Set tmpdoc = view.GetDocumentByKey( CStr(doc.Lieferantennr(0)) )

Offline Diro

  • Frischling
  • *
  • Beiträge: 21
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re:Script gegen doppelte Einträge
« Antwort #2 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

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Script gegen doppelte Einträge
« Antwort #3 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?
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Script gegen doppelte Einträge
« Antwort #4 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

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Script gegen doppelte Einträge
« Antwort #5 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....
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Script gegen doppelte Einträge
« Antwort #6 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

Offline Diro

  • Frischling
  • *
  • Beiträge: 21
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re:Script gegen doppelte Einträge
« Antwort #7 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


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Script gegen doppelte Einträge
« Antwort #8 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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz