Domino 9 und frühere Versionen > ND8: Entwicklung
Primärschlüssel: JJJJ-XXXX bzw. Jahr-ID, durchlaufende Nummerierung, Zählwerk
padkey:
hallo zusammen,
mal wieder ein Problem mit einer Datenbank. Die Datenbank soll für jedes neu erstellte Dokument, einen "Primärschlüssel" vergeben. Der Aufbau soll sein:JJJJ-XXXX, bsp 2010-0001, 2010-0002 usw. Im Endeffekt eine durchlaufende Nummerierung.
Realisiert wurde dies durch ein Lotus Script. Es gibt ein Document Namens "Documentnumber", welches immer die aktuelle Nummer enthält. Ein Dokument erhält die Nummer erst, wenn es gespeichert wird und ein neues Dokument ist.
Das Script befindet sich in der Form des Dokuments unter Querrysave.
Der Code:
--- Code: ---....
If validateForm(uidoc) = True Then
Set view = db.GetView("$lookup")
Set doc = view.GetDocumentByKey("Documentnumber")
If uiDoc.IsNewDoc = True Then
Dim t As Integer
t = doc.hiddenDocumentNumber(0)
If Year(Today) <> doc.hiddenYear(0) Then
Call uidoc.FieldSetText("DocumentNumber",Year(Today) +"-" + "0001")
' damit nicht Doppel 1 kommt, sollte, eine 2 hin
doc.hiddendocumentnumber = 2
doc.hiddenyear = Year(Today)
Call doc.Save(True,False)
Else
Call uidoc.FieldSetText("DocumentNumber", Cstr(Year(Today) +"-" + Right("0000" + Cstr(t),4)))
doc.Log = doc.Log(0) + "Uhrzeit :" + Cstr(Now) + "Number :" + Cstr(doc.HiddendocumentNumber(0)) + " UniqueID : " + Cstr(uidoc.Document.UniversalID) + Chr(10)
doc.hiddenDocumentNumber = t + 1
Call doc.Save(True,False)
Call uidoc.Refresh
End If
' Else
End If
Else
Continue = False
Exit Sub
End If
--- Ende Code ---
Fehler:
Es werden Ids ausgelassen, bzw erhalten Dokumente mehrere IDs und werden überspeichert... Dazu befindet sich ein "Log" in DocumentNumber welcher dies verdeutlicht:
So sieht die Sache dann in der Ansicht aus:
Meine Annahme ist, dass der User "irgendwie" doppelt das Dokument abspeichert und er somit irgendwie die Erzeugung einer neuen ID verursacht, obwohl schon eine vergeben ist. Replizierungsprobleme können ausgeschloßen werden, da die DB nur auf dem Server gestartet werden kann.
Hat jmd eine Idee, woran dies liegen könnte?
Wie könnte ich eine besseres Zählwerk erstellen?
Hat Notes dazu schon was zur Verfügung?
Vielen Dank!!!
botschi:
Vielleicht gibt es einen Speicherkonflikt mit dem Documentnumber? Was ist denn, wenn 2 oder mehrere User gleichzeitig ein neues Dokument anlegen?
Wird die Nummer auch nur bei neuen Dokumenten vergeben?
Ist das Dokument denn auch wirklich neu?
Ich meine, wenn ein neues Doc mit Script erzeugt wird, ist "isnewedoc" = false...
Matthias
padkey:
Danke...^^
--- Zitat von: botschi am 19.01.10 - 10:28:25 ---Vielleicht gibt es einen Speicherkonflikt mit dem Documentnumber? Was ist denn, wenn 2 oder mehrere User gleichzeitig ein neues Dokument anlegen?
Wird die Nummer auch nur bei neuen Dokumenten vergeben?
Ist das Dokument denn auch wirklich neu?
Ich meine, wenn ein neues Doc mit Script erzeugt wird, ist "isnewedoc" = false...
Matthias
--- Ende Zitat ---
Die Nummer wird ja erst beim Speichern vergeben,also kommt es drauf an wer zuerst auf Speichern klickt. Speicherkonflikt gibt es nicht.
"Wird die Nummer auch nur bei neuen Dokumenten vergeben?
Ist das Dokument denn auch wirklich neu?"
Das sollte doch durch die Abfrage abgefragt werden...
In der Datenbank werden keine neuen Dokumente per Script erzeugt. Es gibt zu einer Nummer nicht unterschiedliche Dokumente, so dass eine Nummer mehrfachbelegt sit. Sondern ein und das selbe Dokument hat mehrere Nummern!!!
Ralf_M_Petter:
Abgesehen davon, dass man sowas in Notes nicht machen soll, auch wenn ich es selber schon gemacht habe, sollte man zumindest das Dokument, dass der Speicher für die Nummer ist vor dem Verändern Sperren und erst nach dem Ändern wieder entsperren. Dafür muss die Datenbank natürlich für Documentlocking eingerichtet sein.
Grüße
Ralf
padkey:
okay, wieso, sperren und entsperren?
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln