Domino 9 und frühere Versionen > Entwicklung
laufende nummer für Dokumente vergeben
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