Das Notes Forum
Domino 9 und frühere Versionen => Administration & Userprobleme => Thema gestartet von: alindinger am 12.11.02 - 11:29:39
-
Ich brauche dringend für eine Datenbank mit mehreren Einträgen ein Feld mit einer automatisch beim Anlegen berechneten fortlaufenden Nummer, welche nur einmal vergeben wird und am besten beim Replizieren auch überprüft wird, ob es diese Nummer schon gibt.
Falls dies nicht möglich ist könnte man die Nummer auch manuell vergeben, es sollte aber automatisch kontrolliert werden, ob eine Nummer schon vergeben ist, damit keine doppelt vergeben wird (es soll schließlich eine eindeutige ID sein!).
Am besten wäre es, wenn die Nummer nicht lokal sondern am Server vergeben wird, denke ich, damit es nicht so leicht zu doppelt vergebenen Nummern bei der Replizierung kommt. Ich wäre für Antworten sehr dankbar!
Vielen Dank!
Andreas Lindinger
andreas.lindinger@gmx.net
-
lies mal das hier, weil es normalerweise heißt "unique und replication zusammen geht nicht", aber einer von JGA hat für IRIS nen Artikel dazu geschrieben, daß es doch geht. Bin da geteilter Meinung, aber lies selbst:
http://www-10.lotus.com/ldd/today.nsf/62f62847467a8f78052568a80055b380/74bd0cdadb2602c385256b56001c0517?OpenDocument&Highlight=0,unique
-
hallo andreas,
ich hab so eine datenbank, in der die user die nummer allerdings manuell eingeben muessen.
dazu hab ich eine eingabevalidierung:
_VorhNummern := @If ( @IsNewDoc; @DbColumn("":"nocache" ;
"SECLN01/DE/SANYO-ENERGY-EU":"sanyoquo.nsf" ; "($All)" ; 2 );
"");
@If( @IsMember(@Text(quotation_number) ; @Text (_VorhNummern)) ; @Failure
("This number is already existing! Please use next number!") ; @Success )
damit keine konflikte bestehen, locke ich das dokument vorher mit einem script, das ich hier aus dem forum habe.
postopen:
Sub Postopen(Source As Notesuidocument)
Dim sess As New NotesSession
Dim doc As NotesDocument
Dim thatUser As String
Set doc = source.document
If Source.EditMode Then
If doc.HasItem("LockEdit") Then
Source.EditMode = False
thatUser = doc.LockEdit(0)
Msgbox thatUser & "is currently editing this document. You will not be able to edit it until this user has finished editing. Click OK for read only. Close and re-open document for editing later."
Else
Call doc.ReplaceItemValue("LockEdit",sess.CommonUserName)
Call doc.ReplaceItemValue("LockEditTime", Now)
Call doc.Save(True,True)
End If
End If
End Sub
querymodechange:
Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
Dim sess As New NotesSession
Dim doc As NotesDocument
Dim thatUser As String
Set doc = source.document
If Source.EditMode Then
Continue = True
Else
If doc.HasItem("LockEdit") Then
thatUser = doc.LockEdit(0)
Msgbox thatUser & "is currently editing this document. You will not be able to edit it until this user has finished editing. Click OK for read only. Close and re-open document for editing later."
Continue = False
Else
Continue = True
Call doc.ReplaceItemValue("LockEdit", sess.CommonUserName)
Call doc.ReplaceItemValue("LockEditTime", Now)
Call doc.Save(True, True)
End If
End If
End Sub
queryclose:
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
Dim sess As New NotesSession
Dim doc As NotesDocument
Set doc = source.document
If doc.LockEdit(0) = sess.CommonUserName Then
Call doc.RemoveItem("LockEdit")
Call doc.RemoveItem("LockEditTime")
Call doc.Save(True, True)
End If
End Sub
das klappt soweit bei mir eigentlich ganz gut. hab die DB 3 x (einmal auf 1er server, cluster auf 2er server, replikation auf webserver) und manche haben sie auch lokal. ich hatte bis dato nur das problem, dass manche user das dokument geoeffnet haben, sich es anders ueberlegt haben, und mit cancel ein leeres dok erzeugt wurde. passierte aber nur ein paarmal am anfang.
ich kann damit ganz gut leben, aber wenn der vorschlag von rob green besser ist, nehm ich den. ich muss wieso ein kassenbuch fuer die buchhaltung machen, da brauch ich genau das gleiche.
gruss,
daniela