Autor Thema: Laufende Nummerierung  (Gelesen 1822 mal)

Offline alindinger

  • Frischling
  • *
  • Beiträge: 4
  • Ich liebe dieses Forum!
Laufende Nummerierung
« 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

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re:Laufende Nummerierung
« Antwort #1 am: 12.11.02 - 11:56:14 »
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
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Offline luna

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.362
  • Geschlecht: Weiblich
  • mein name ist hase...
    • sixtnix homepage
Re:Laufende Nummerierung
« Antwort #2 am: 12.11.02 - 13:07:22 »
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
im moment in mutterschutz

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz