Domino 9 und frühere Versionen > ND6: Administration & Userprobleme

Eindeutige Adressnummer vergabe!

(1/1)

Ozan:
Hallo zusammen,

irgendwie ist diese Script immer noch zu langsam(Querysave):

If doc.adrnr(0)="" Then
 Dim eval2 As Variant
 eval2=Evaluate({@DbColumn("":"NoCache";"":"";"adrvergabe";1)})
 oldnumber=Clng(eval2(0))+1
 doc.AdrNr = Clng(OldNumber)
End If

Wenn gleichzeitig von 5 Arbeitsplätzen erfasst werden haben wir das Problemm dass
immer noch Adressnummern verdoppelt werden. Gibt es eine bessere technik bzw. Möglichkeit eine 99,99% iger eindeutige Adressnummer zu erzeugen?

Gruss

Ozan

Lossa:
Hi,

in Lotus Script gibt es die Möglichkeit mittel der Createlock und destroylock eine Umgebung zu erstellen, die eine gesichert ist solange ein lock darauf ist. Somit kannst du das erzeugen was du erreichen willst. Erreichen könntest du es über eine Agent der die Vergabe auf Serverseite macht (runonserver) beim Speichern des Dokumentes.

Hier ein Code Beispiel:

Sub Initialize
   Dim Sess As New NotesSession
   Dim Doc As NotesDocument
   Dim Count As NotesItem
   Dim Status As Integer
   Dim LockID As Integer
   Dim others As Integer
   
   '  Creating a Lock ID or getting the Lock ID
   '  For the event of "Addresses"
   LockID = Createlock("Addresses")
   
   '  Infinite loop that can only be exited
   '  when this agent has a successfull
   '  lock.  An unsuccessfull lock means
   '  that this agent is presently being
   '  run by someone else.
   Do While True
      If Codelock(LockID) Then
         Exit Do      '  We finally have a lock, exiting Loop
      End If
   Loop
      
   Set Doc = Sess.SavedData
   
   Set count = Doc.GetFirstItem("Addresses")
   If count Is Nothing Then
      Set count = New NotesItem(Doc, "Adresse", 0)
   End If
   
   count.Values = count.Values(0) + 1
   
   Call Doc.Save(True,False)
   
   '  Once completed, release and
   '  destroy this lock so another
   '  run of this agent can continue.
   Status = CodeUnlock(LockID)
   Status = DestroyLock(LockID)
   
End Sub

Ozan:
Hi,

jepp das Beispiel habe auch in der Hilfe gesehen, müssen dann die User so lange warten bis der Lock wieder freigegeben ist?

Gruss

Ozan

Lossa:
Hi,

wie schrieben muss der/die anderen Agenten in eine Warteschleife gehen, dann dauert es halt ein wenig länger, aber das sollte nicht in allzu grossen Dimensionen liegen.

smoki:
Hallo!

Nach meiner Meinung müsste sogar nur ein "RunOnServer" reichen, da ein Agent nur jeweils einmal (ich glaub es gibt einen notes.ini Eintrag mit dem man das ändern kann...) auf einem Server läuft.

Solange nur dieser Agent dieses Dokument hochzählt, sollte es keine doppelten Nummern geben. Zumindest konnte ich dies so bei mir verhindern!

Natürlich hat diese Lösung das Problem, dass diese mit Clusterausfällen usw. nicht klar kommt.

Gruss
Chris

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln