Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Jörg am 11.02.08 - 10:55:44

Titel: Counter
Beitrag von: Jörg am 11.02.08 - 10:55:44
Hallo,

ich möchte gerne aus einen Dokument "Archive" ein Feld "ID_DOC"
beim erstellen eines neuen Dokument hochzählen und dann das Ergebnis speichern sowie im
neuen Dokument im Feld "ID_MainDOC" hinterlegen.


Hierzu habe ich versucht folgenden Code zu schreiben komme aber nicht so richtig weiter, da ich
immer einen Fehler Missmatch erhalte.

Code
Sub Initialize
	
	Dim workspace As New NotesUIWorkspace
	Dim session As New NotesSession
	
	Dim db As NotesDatabase
	Dim doc_ID As NotesDocument
	Dim doc As NotesDocument
	
	Dim IDcounter As Integer
	Dim ID_Doc As Integer
	
	Set db = session.CurrentDatabase
	Set db_doc = db.AllDocuments
	Set doc_ID = db_doc.GetDocument (archive)
	Set IDcounter =doc_ID.Items(ID_Doc) 
	
		IDcounter = IDcounter +1
		doc_ID.ID_DOC = IDcounter
		Call doc_ID.Save(True,False)
	
	
	
End Sub

Wo muss ich den Code am besten hinterlegen (z.B. Postopen  oder unter Vorgabewert des Feldes) , damit
es im neuen Dokument im Feld ID_MainDOC abgelegt wird?

Gruß Jörg
 
Titel: Re: Counter
Beitrag von: rar am 11.02.08 - 11:26:05
Servus,

1.) die die Variable "archive" in der Zeile
Set doc_ID = db_doc.GetDocument (archive)
wird nicht befüllt.
2.) um den Inhalt deines Count-Item auszulesen, musst du
IDcounter = doc_ID.DeinCountItem(0)
verwenden.
3.) Fortlaufende Nummern sind in Notes eher suboptimal. Hier ist eine Kleine Auflistung mit Threads, die dieses Thema behandeln: C L I C K (http://atnotes.de/index.php?topic=35947.msg226236#msg226236)
4.) Siehe 3.)

lG
-d
Titel: Re: Counter
Beitrag von: Jörg am 14.02.08 - 09:40:38
Hi,

danke dir.
ich habe mich nun für ein PofileDokument entschieden was ich dann
entsprechend verarbeite.

Gruß Jörg
Titel: Re: Counter
Beitrag von: Thomas Schulte am 14.02.08 - 09:55:26
Das wäre dann so ziemlich die schlechteste aller möglichen Lösungen.
Titel: Re: Counter
Beitrag von: koehlerbv am 14.02.08 - 09:55:41
Wenn schon fortlaufende Nummern, dann ist eine "Lösung" mit einem ProfileDocument die denkbar dümmste - das ProfilDocument wird im Client gecached. Ändern andere Personen den Counter, bekommt man davon nichts mit und erzeugt fröhlich doppelte Nummern.

Bernhard
Titel: Re: Counter
Beitrag von: ata am 14.02.08 - 13:13:33
... außer man schafft einsam & allein in der Datenbank  ;D  ;)

Toni
Titel: Re: Counter
Beitrag von: thomson666 am 14.02.08 - 15:09:35
wir haben die fortlaufende Nummerierung in einer DB realisiert.
Am besten funktioniert das noch in einem Setup Dokument auf das jeder Zugriff hat.
Beim Postsave holst du dir dann diese mit +1, schaust in der DB nach ob es die Nummer nicht schon gibt und schreibst sie ins Dokument. Wenn dies Nummer bereits vorhanden ist, suchst du solange weiter bis du eine freie Nummer bekommst.
In der DB von uns arbeiten 100 Personen, sie ist seit 3 Jahren im Einsatz. Doppelte Nummern - Fehlanzeige. Allerdings muß man fairerweise sagen das in der DB nur 10-15 Dokumente am Tag erstellt werden.
Titel: Re: Counter
Beitrag von: WernerMo am 14.02.08 - 15:37:06
Hallo,
Doppelte Nummern - Fehlanzeige.

Klingt so, als ob es von dieser DB keine Replik gäbe? Wie sieht das aus, wenn es davon x oder gar zig Replikationen in den verschiedenen Standorten gibt?

Gruß Werner
Titel: Re: Counter
Beitrag von: m3 am 14.02.08 - 15:38:02
@Thomson: UNd Repliken gibts auch keine, gellß Wenn das Leben nur immer so einfach wäre ...
Titel: Re: Counter
Beitrag von: thomson666 am 14.02.08 - 15:58:26
stimmt nicht
1ne Replik gibts aber dazu könnte man ja auch einen Serverbasierten Agent anlaufen lassen der dann nur auf 1ner Replik läuft. somit könnte man dann auch den inkonsistenzen aus dem Weg gehen? oder täusch ich mich....

wir hatten früher bei den Banken überall einen NotesServer stehen und von vielen Datenbanken an die 80 Repliken. Nur heute hat man sich wieder besonnen (nachdem die Leitungen mitlerweile einen vernünftigen durchsatz haben) alles zu zentralisieren....
Titel: Re: Counter
Beitrag von: ata am 14.02.08 - 17:11:59
... wenn du pro Server ein Setup-Dokument hast und für jeden Server einen Kennbuchstaben, dann gibt es auch keine Probleme. Meine DB' laufen an 20 verschiedenen Standorten - weltweit verteilt und teilweise auf Clustern...

... ich habe keine doppelten Nummern - es sein denn man erzwingt sie  ;D

Toni
Titel: Re: Counter
Beitrag von: koehlerbv am 14.02.08 - 18:29:20
Geht diese unsägliche Diskussion denn schon wieder los? In Daniels Antwort #1 verweist ein Link auf ein Posting mit einer AUSWAHL zur bisher geführten Diskussion allein hier bei AtNotes. Dort ist zu finden, warum das mit dem ProfileDocument mentale Diarrhoe ist und warum thomson bisher einfach Glück hatte.

Lesen bildet.

Bernhard
Titel: Re: Counter
Beitrag von: flaite am 15.02.08 - 13:29:40
Allererstmal sollte man sich mal die Frage stellen:
Brauchst du überhaupt eine fortlaufende Nummerierung?
Das gibts übrigens auch in relationalen Datenbanken eigentlich nicht. Da gibts zwar in jedem mir bekannten Datenbanksystem einen Autoincrement INT oder BIGINT (oder etwas, was dies erzeugt). Aber in der realen Welt da draussen sind die in den Tabellen praktisch nie fortlaufend.
Zum einen wird bei bulk-inserts da oft ein ganzer Satz angefordert, von denen manche nicht gebraucht werden, und zum einen zählen die unteren nicht hoch, wenn man einen in der Mitte löscht.
Mag sein, dass man im Volkshochschulkurs Access for Dummies in der zweiten Stunde kurzfristig den Eindruck bekommen könnte, es gäbe fortlaufende Nummern, aber schon in der dritten Stunde wird der Dozent sicher erklären, dass das eine Illusion ist.

Meinst du nicht eher einen eindeutigen Identifier?
Ein eindeutiger Identifier ist nicht unbedingt fortlaufend und sieht öfters kryptisch aus.
Notes Dokumente besitzen einen eindeutigen Identifier: Die DocumentUniqueID.

Sehr selten gibt es Gründe, dass man in einer Notesanwendung einen eindeutigen Identifier benötigt, der nicht die DocumentUniqueID ist. Dann kann man so in die Richtung vorgehen, die Anton Tauscher aufgezeigt hat.

In meinem Java Mock Framework für Notes hab ich das Notes-Feature DocumentUnique ID nachprogrammiert und habs so gemacht: Milisekunden seit irgendwann 1970 (System.getCurrentMilis (oder so ähnlich)) ein _ und dahinter noch eine Zufallszahl.
Titel: Re: Counter
Beitrag von: Glombi am 15.02.08 - 15:42:27
Ich verwende als eindeutigen Identifier in der Regel die Funktion @Unique.
Das ist im Gegensatz zu @Text(@DocumentUniqueID) einigermassen überschaubar und lesefreundlich.
Dubletten sind mir bei @Unique auch noch nie untergekommen. Die Wahrscheinlichkeit dafür ist auch verschwindend gering.

Andreas
Titel: Re: Counter
Beitrag von: Jörg am 28.02.08 - 07:49:39
Die DocumenteUniqueID verwende ich nachher zum auslesen aller Antwortdokumente,
aber der Counter verwende dazu erstmal alle Dokumente zu Kategoriesieren.

Hier nun der Code , mit dem ich auf einen Server und bei einen neuen Hauptdokument
einen Counter hochzähle:

Code
Sub Postopen(Source As Notesuidocument)
	
	Set uidoc = source
	Set thisuidoc=source
	Set thisdoc=thisuidoc.Document
	Set doc = uidoc.document

	Dim doc_ID As NotesDocument
	Dim IDcounter As Variant
	Dim ID_Doc As Variant
	
	
	Set db = session.currentdatabase
	
	If thisdoc.IsNewDoc And db.Server <> "" Then
	
	'Abfrage profile Dokument auf dem Server
		
		Set doc_ID=db.getprofileDocument("dokumentcounter","DocCounter")
		
	'Wenn Feld schon vorhanden	
		If doc_id.hasitem("DOC_ID") Then
		'Counterwert holen			
			IDcounter = doc_id.DOC_ID(0)
		Else
		'Wenn Feld nicht vorhanden dann anlegen
			IDcounter =0
			doc_id.DOC_ID="0"
		End If	
	'Wenn Documenten Status ist Neu
		IDcounter = IDcounter +1
		doc_ID.DOC_ID = IDcounter
		Call doc_ID.Save(True,False)
		doc.ID_MainDOC = IDcounter
	Else	
		Exit Sub	
	End If
	
End Sub

Sicherlich gibt es andere Lösungen , aber die ist für meine Anwendung völlig ausreichend.
Auch wenn ich dann Dokumente lösche ist es mir dann egal , ob der Counter fortlaufend
ist oder nicht.

Gruß Jörg
Titel: Re: Counter
Beitrag von: DerAndre am 28.02.08 - 08:13:09
Warum nimmst Du ein Profiledoc???
Titel: Re: Counter
Beitrag von: koehlerbv am 29.02.08 - 22:24:37
Da vom Eröffner des Threads die bisherigen (via Links: Hunderte Hinweise) nicht verstanden wurden, setzte ich hier jetzt den Schlusspunkt: Die zuletzt genannte "Lösung" ist die Variant, die an Ignoranz des Systems einfach nicht mehr zu unterbieten ist. Es ist einfach nur ein Antibeispiel ...

Bernhard