Domino 9 und frühere Versionen > Entwicklung

laufende nummer für Dokumente vergeben

<< < (2/4) > >>

Driri:
Last Modified ist gefährlich, denn der Wert wird ja nur beim Speichern gesetzt, oder ?

Du müßtest dir eine Ansicht bauen, in der der Zähler in der ersten Spalte sortiert wird. Dann holst du dir aus dieser Ansicht das erste bzw. letzte Dokument (je nach Sortierung).
Aus diesem liest du den Wert aus, erhöhst ihn und packst ihn in das neue Dokument.

Ich wüßte jetzt nicht, wie ich das in Formelsprache machen sollte, vielleicht gehts aber auch.
In Script gehts auf jeden Fall.

P.S. : Falls es an Scriptkenntnissen scheitert, gibts hier bestimmt Hilfe oder du mußt das doch über Profildokumente machen. Das geht auf jeden Fall per Formelsprache.

koehlerbv:
Hallo, Mario,

diese Deine Frage taucht in allen Notes-Foren immer wieder auf.
Daher nochmal die prinzipielle Antwort:
"Das Prinzip von Notes verbietet die Vergabe von sequentiellen Nummern in Notes-Dokumenten." Verteilte Datenbanken und fortlaufende Nummern geht nicht - ist ja eigentlich auch logisch.

Nun gibt es bestimmte Anwendungsfälle, bei denen sich vielleicht fragen mag "Warum machen die das mit Notes?", wo man trotzdem eine Vergabe fortlaufender Nummern hinbekommen könnte.
Schreib' mal genau auf, was Du machen willst, was von den Seriennummern abhängt, wie diese aufgebaut sein müssen und vor allem - müssen sie sofort verfügbar sein ? Usw.

A priori gilt aber: Sequentielle Nummern und Notes sind ein absolutes "No-no".

Bernhard

PS: Und guckst Du noch diese Threads:

http://www.atnotes.de/index.php?board=7;action=display;threadid=10098;start=0

http://www.atnotes.de/index.php?board=9;action=display;threadid=7395

CodeWarrior:
Wenn sich Deine Datenbank nur auf einem Server befindet, kannst Du auch http://www.xetrion.com probieren.

Ist auf einem Server absolut sicher (vergibt keine doppelten Nummern). Bei mehreren Repliken kann pro Replik automatisch ein eigener Zähler verwaltet werden.

koehlerbv:
@CodeWarrior:
Ich mag hier zwar die vollommen unnütze, weil das Thema Notes absolut verfehlende Diskussion "Laufende Nummern in Notes" nicht wieder aufleben lassen, aber auch Dein Vorschlag geht völlig am Thema vorbei.
- Was passiert, wenn sich jemand eine lokale Replik zieht ?
- Was passiert, wenn neben Server 1 plötzlich doch ein Server 2 da ist ?

"Notes und fortlaufende Nummern" ist so ungefähr das gleiche wie "Weichensteller bei der Lufthansa" - es gibt keine Zusammenhänge.

Bernhard

Micha:
Diese Formel habe ich in das Nummern Feld direkt geschrieben.
var := @If(@IsNewDoc;@GetProfileField("DBProfile"; "Nr");@Return(Nr));
Nr :=@TextToNumber(var);
@SetProfileField("DBProfile"; "Nr"; @Text (nr+1) ) ;
var
Ausserdem habe ich einen Agenten der jede Nacht läuft und doppelte Nr beseitigt, dies hat zur folge das ab und zu bei replizierungen die nummern verschoben werden, das habe ich dann in einem Protokoll mitgeschrieben, so dass sich keiner wundert.

Agent:
Sub Initialize
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim view As NotesView
   Dim doc As NotesDocument
   Dim vordoc As NotesDocument
   Dim profdoc As NotesDocument
   Dim Number As Variant
   Dim NrVor As Variant
   Dim NewNumber As Integer
   Dim NewNumberText As String
   Dim LastNrText As String
   Dim LastNr As Integer
   Dim Item As NotesItem
   
   Set db = s.CurrentDatabase
   crlf$ = Chr(13) & Chr(10)
   Set view=db.GetView("ATNumberLookup")
   'doc mit der höchsten ATNummer suchen
   Set doc = view.GetLastDocument
   Set profdoc = db.GetProfileDocument("DBProfile")
   ' und diese dann in das profildoc schreiben
   LastNr = Cint(doc.Nr(0) )
   LastNr = LastNr +1
   LastNrText = Cstr(LastNr)
   Set Item = profdoc.ReplaceItemValue( "Nr" , LastNrText)
   ' Start der doppelten ATNummern suche
   Set doc= View.GetFirstDocument
   NrVor = doc.getitemvalue("Nr")
   Set doc=View.GetNextdocument(doc)
   
   While Not doc Is Nothing
      
      Number = doc.getitemvalue("Nr")
      If Number(0) = NrVor(0) Then
         numberold$ = Number(0)
         NumberProf =profdoc.getitemvalue("Nr")
         numbernew$ = NumberProf(0)
         doc.Nr = NumberProf(0)
         'Ab hier die benachrichtigungen in der Historie
         Set Item= doc.GetFirstItem("EditDates")
         Call item.AppendToTextList(" Am " + Date$ + ", um " + Time$  + " Uhr")
         Call doc.ReplaceItemValue("EditDates", item)
         
         Set Item= doc.GetFirstItem("EditDescriptions")
         Call item.AppendToTextList("  Nummer von " + numberold$ + " auf " + numbernew$ + " geändert")
         Call doc.ReplaceItemValue("EditDescriptions", item)
         
         Set Item= doc.GetFirstItem("Bearbeiter")
         Call item.AppendToTextList(" Agent" )
         Call doc.ReplaceItemValue("Bearbeiter", item)
         
         NewNumber = Cint(NumberProf(0))
         NewNumber = NewNumber +1
         NewNumberText = Cstr(NewNumber)
         Set Item = profdoc.ReplaceItemValue( "Nr" , NewNumberText)
         Call doc.Save( True, False,True )
         Call profdoc.Save( True, False,True )
         Call view.refresh
         Set doc=View.GetNextdocument(vorDoc)
      Else      
         Set vordoc = doc
         NrVor = doc.getitemvalue("Nr")
         Set doc=View.GetNextdocument(Doc)
      End If      
   Wend
End Sub

Der Code ist einer der ersten die ich geschrieben habe, also nicht über den merkwürdigen Stil wundern.  :)

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln