Laufende nummer

  • Guten morgen allerseits,


    ich plane in mein DB für jeden Datensatz eine Eindeutige nummer vorzugeben.


    Jetzt frage ich mich nur wie. Eine möglichkeit währe natürlich immer die ganze View durchzugehen und die höchste nummer rauszusuchen.


    Jetzt stellt sich mir allerdings die frage giebt es nicht eine einfachere möglichkeit.


    Hat jemand erfahrung damit.

  • Hi,


    erstelle Dir ein berechnetes Feld beim Anlegen in der Maske (z.B. Counter, Typ Zahl). In das Postopen der Maske setzt Du folgenden Code:


    'Code zum Zählen der vorhandenen Dokumente in der DB.
    'Feld Counter wird dann um Anzahl der Dokumente plus 1 erhöht.
    'Dies nur, wenn es sich um ein neues Dokument handelt.

    If source.IsNewDoc Then
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim collection As NotesDocumentCollection
    Dim n As Integer
    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim curdoc As NotesDocument

    Set uidoc = workspace.CurrentDocument
    Set curdoc = uidoc.document
    Set db = session.CurrentDatabase
    Set collection = db.AllDocuments
    n = collection.Count
    curdoc.Counter = n+1
    End If


    Gruß,


    Sascha

  • Selbst ohne Repliken hat die Lösung entscheidende Nachteile:


    - Es werden auch Konfigurations und sonstige Dokumente mitgezählt.
    - Werden Leserfelder eingesetzt, dann stimmen die Nummern nicht, da AllDocuments immmer nur alle Dokumente die für den aktuellen Benutzer sichtbar sind zählen.
    - Wird ein Dokument angelegt aber nicht sofort gespeichert und währenddessen ein neues angelegt hast du wieder doppelte Nummern.


    Zu möglichen Lösungen schau dir wie gesagt die anderen Threads zu dem Thema an.
    Da gibt es eine Menge Vorschläge