Das Notes Forum
Domino 9 und frühere Versionen => ND6: Administration & Userprobleme => Thema gestartet von: Ozan 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
-
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
-
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
-
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.
-
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