Autor Thema: Counter  (Gelesen 7406 mal)

Offline Jörg

  • Aktives Mitglied
  • ***
  • Beiträge: 175
Counter
« 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
 

Offline rar

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 856
  • Geschlecht: Männlich
  • Des passt scho
    • click
Re: Counter
« Antwort #1 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
4.) Siehe 3.)

lG
-d
†090620141300

Offline Jörg

  • Aktives Mitglied
  • ***
  • Beiträge: 175
Re: Counter
« Antwort #2 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

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Counter
« Antwort #3 am: 14.02.08 - 09:55:26 »
Das wäre dann so ziemlich die schlechteste aller möglichen Lösungen.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Counter
« Antwort #4 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

Offline ata

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Counter
« Antwort #5 am: 14.02.08 - 13:13:33 »
... außer man schafft einsam & allein in der Datenbank  ;D  ;)

Toni
Grüßle Toni :)

Offline thomson666

  • Senior Mitglied
  • ****
  • Beiträge: 285
  • Geschlecht: Männlich
  • niemand hats leicht, aber leicht hats oan...
Re: Counter
« Antwort #6 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.

Offline WernerMo

  • @Notes Preisträger
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.050
  • Geschlecht: Männlich
Re: Counter
« Antwort #7 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
Gruß Werner
  o                                                  o   
 /@\  Nächster @Notes-Stammtisch  /@\  online Sept. 2020?
_/_\__________________________/_\_ Details folgen.

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Counter
« Antwort #8 am: 14.02.08 - 15:38:02 »
@Thomson: UNd Repliken gibts auch keine, gellß Wenn das Leben nur immer so einfach wäre ...
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline thomson666

  • Senior Mitglied
  • ****
  • Beiträge: 285
  • Geschlecht: Männlich
  • niemand hats leicht, aber leicht hats oan...
Re: Counter
« Antwort #9 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....

Offline ata

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Counter
« Antwort #10 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
Grüßle Toni :)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Counter
« Antwort #11 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

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Counter
« Antwort #12 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.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Glombi

  • Gast
Re: Counter
« Antwort #13 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

Offline Jörg

  • Aktives Mitglied
  • ***
  • Beiträge: 175
Re: Counter
« Antwort #14 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

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: Counter
« Antwort #15 am: 28.02.08 - 08:13:09 »
Warum nimmst Du ein Profiledoc???
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Counter
« Antwort #16 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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz