Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: ReinhardR am 28.03.03 - 12:43:30

Titel: Laufende Nummern anlegen
Beitrag 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
Titel: Re:Laufende Nummern anlegen
Beitrag von: ata am 28.03.03 - 12:56:12
... 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
Titel: Re:Laufende Nummern anlegen
Beitrag von: Rob Green am 28.03.03 - 12:57:05
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.
Titel: Re:Laufende Nummern anlegen
Beitrag von: ata am 28.03.03 - 13:26:18
... 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
Titel: Re:Laufende Nummern anlegen
Beitrag von: ReinhardR am 31.03.03 - 08:16:46
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
Titel: Re:Laufende Nummern anlegen
Beitrag von: adminnaddel am 31.03.03 - 10:28:31
@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
Titel: Re:Laufende Nummern anlegen
Beitrag von: Till_21 am 31.03.03 - 10:37:38
@adminnaddel ->

hierfuer gibt es den webquerysave...
Titel: Re:Laufende Nummern anlegen
Beitrag von: adminnaddel am 31.03.03 - 10:41:20
 :'( :'( :'(
War ja nur ne Testfrage  :P ;D