Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: ReinhardR am 28.03.03 - 12:43:30
-
Hallo ich habe ein Problem,
nachfolgender Code benutze ich zum Erzeugen einer laufenden Nr beim Erzeugen eines neuen Dokumentes. Hat bis jetzt auch funktioniert. Nun können aber mehrere Nutzer neue Dokumente anlegen. Folglich kommt es zu doppelten Nummern in der DB. Hat jemand eine Lösung wie ich das verhindern kann?
Sub Postopen(Source As Notesuidocument)
'nur bei neuem Dokument lfd. Nr. bilden
If Not source.IsNewDoc Then
Exit Sub
End If
Dim sess As New notessession
Dim db As Notesdatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim neunum As String
Set db=sess.currentdatabase
Set view=db.GetView("Aufrüstungsliste")
Set doc=view.getlastdocument
If Not doc Is Nothing Then
neunum=Cint(doc.lfdNr(0))+1
Else
'1. Dokument
neunum=1
End If
'Nummer eintragen
source.fieldsettext "lfdNr",Cstr(neunum)
End Sub
-
... geh mal im Forum auf die Suche nach "Fortlaufenden Nummern" oder "Sequenzing" , ca 300 Tage zurück, du wirst auf jeden Fall fündig werden...
ata
-
hm..kannst Du die Nummer nochmals im QuerySave checken, ob bereits vergeben? Wenn ja, dann nochmals hochzählen, sonst lassen. Möglicherweise benötigt der User Kenntnss von der systemseitig nochmals im QuerySave hochgezählten Nummer? Dann spuck ne Meldung aus zB. Somit kann man zumindest etwas besser verhindern, daß die Nummern doppelt vergeben werden, ausschließen auch da nicht.
Bei Deiner Lösung ist die Gefahr der Doppelvergabe recht hoch, - wenn die Nutzungsfrequenz höher ist - daß vom zeitlichen Abstand der Nummern-Vergabe im PostOpen bis zum Save einige Zeit vergehen kann.
-
... schau mal da...
http://www.atnotes.de/index.php?board=7;action=display;threadid=6243;start=0 (http://www.atnotes.de/index.php?board=7;action=display;threadid=6243;start=0)
... doliman hat da ne DB zur Verfügung gestellt, in der so etwas verankert ist...
ata
-
Hi,
ich habe den Code (siehe mein Posting) jetzt in QuerySave eingefügt und aus PostOpen rausgenommen. Funktioniert super. Wir haben es mit 4 gleichzeitigen Zugriffen getestet, keine Probleme. Ich hoffe das hilft auch anderen.
Hier die Lösung:
Sub Querysave(Source As Notesuidocument, Continue As Variant)
'nur bei neuem Dokument lfd. Nr. bilden
If Not source.IsNewDoc Then
Exit Sub
End If
Dim sess As New notessession
Dim db As Notesdatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim neunum As String
Set db=sess.currentdatabase
Set view=db.GetView("lfdNrInst")
Set doc=view.getlastdocument
If Not doc Is Nothing Then
neunum=Cint(doc.lfdNr(0))+1
Else
'1. Dokument
neunum=1
End If
'Nummer eintragen
source.fieldsettext "lfdNr",Cstr(neunum)
End Sub
-
@ReinhardR
danke erstmal!
Hat aber leider ne Hacken wenn die Db auch im Web genutzt wird.
Bei der Doc Erstellung im Web greift der ganze Nonsens nicht, leider!
Grüße
-
@adminnaddel ->
hierfuer gibt es den webquerysave...
-
:'( :'( :'(
War ja nur ne Testfrage :P ;D