Autor Thema: Eindeutige Adressnummer vergabe!  (Gelesen 1499 mal)

Offline Ozan

  • Senior Mitglied
  • ****
  • Beiträge: 277
Eindeutige Adressnummer vergabe!
« am: 03.05.06 - 14:44:13 »
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

Offline Lossa

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.404
  • Geschlecht: Männlich
    • alphaTrain
Re: Eindeutige Adressnummer vergabe!
« Antwort #1 am: 03.05.06 - 15:04:24 »
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
Viele Grüße

Ulrich Lossa
Aktiv als Notes Admin und Entwickler seit Version 1.
Freier Trainer und Berater.
Zertifiziert für alle Versionen SA und DB.
HCL Certified Administrator
IBM Certified Advanced Application Developer (PCLP AD)
IBM Certified Advanced System Administrator (PCLP SA)
IBM Certified Instructor for System Administration and Application Development ( CLI)
IBM Certified Instructor for Websphere Software
IBM Certified Instructor for DB2
http://www.alphatrain.de
Lossa@alphatrain.de

Offline Ozan

  • Senior Mitglied
  • ****
  • Beiträge: 277
Re: Eindeutige Adressnummer vergabe!
« Antwort #2 am: 05.05.06 - 12:53:58 »
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

Offline Lossa

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.404
  • Geschlecht: Männlich
    • alphaTrain
Re: Eindeutige Adressnummer vergabe!
« Antwort #3 am: 05.05.06 - 13:25:36 »
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.

Viele Grüße

Ulrich Lossa
Aktiv als Notes Admin und Entwickler seit Version 1.
Freier Trainer und Berater.
Zertifiziert für alle Versionen SA und DB.
HCL Certified Administrator
IBM Certified Advanced Application Developer (PCLP AD)
IBM Certified Advanced System Administrator (PCLP SA)
IBM Certified Instructor for System Administration and Application Development ( CLI)
IBM Certified Instructor for Websphere Software
IBM Certified Instructor for DB2
http://www.alphatrain.de
Lossa@alphatrain.de

Offline smoki

  • Senior Mitglied
  • ****
  • Beiträge: 325
  • Geschlecht: Männlich
    • Smoki's Lotus Notes
Re: Eindeutige Adressnummer vergabe!
« Antwort #4 am: 08.05.06 - 08:55:48 »
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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz