Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Günter am 06.03.07 - 09:47:54

Titel: Fortlaufende Nummer
Beitrag von: Günter am 06.03.07 - 09:47:54
Hallo zusammen,

ich versuche gerade meine ersten Schritte in der Notes DB-Entwicklung und stoße schon auf mein erstes Problem. Ich habe eine Einfach DB angelegt, in der ersten Zeile soll für die Einträge eine fortlaufende Nummer erstellt werden.
Wie kann ich es einrichten das Notes automatisch zu jedem Eintrag eine Fortlaufende Nummer generiert?

Gruß Cisko
Titel: Re: Fortlaufende Nummer
Beitrag von: Glombi am 06.03.07 - 09:50:19
Oh je - schon wieder fortlaufende Nummern, das gibt wieder Diskussion  ;D

Hast Du schon mal hier im Forum gesucht. Du erhälst eine Menge Treffer  ;)
Das Thema ist ziemlich ausführlich diskutiert worden.

Soll es denn wirklich eine fortlaufende Nummer sein oder reicht ein eindeutiger String a la @Unique nicht aus?

Andreas
Titel: Re: Fortlaufende Nummer
Beitrag von: Axel am 06.03.07 - 09:54:10
Erstmal ein herzliches Willkommen hier im Forum.

Deine erste Frage ist gleich eine "never ending story". Ich möchte dir deine Illusionen ungern rauben, aber dieses Thema hatten wir hier schon x-mal. Der Tenor lautete immer: "vergiss es", besonders wenn du die Datenbanken auf mehreren Servern betreibst.

Nutze mal die Forensuche und du wirst jede Menge Infos zu dem Thema erhalten.

Axel
Titel: Re: Fortlaufende Nummer
Beitrag von: Glombi am 06.03.07 - 10:02:10
Es ist auf jeden Fall sehr aufwendig zu programmieren, insbesondere wenn man mehrere Server hat auf denen in einer Replik fortlaufende Nummern berechnet werden sollen.
Titel: Re: Fortlaufende Nummer
Beitrag von: Günter am 06.03.07 - 11:42:18
Vielen Dank erstmal für eure schnellen Antworten.
Die entsprechende DB muss nicht über verschiedene Server repliziert werden, von daher wir es hoffentlich nicht so extrem aufwendig.
Ich werde gleich mal über die "suche" schauen ob ich einen hilfreichen Eintrag finde.
Titel: Re: Fortlaufende Nummer
Beitrag von: Axel am 06.03.07 - 12:27:11
Auch wenn nicht repliziert werden muss, es reicht schon wenn mehrere User auf einer Datenbank arbeiten um die fortlaufende Nummerierung auszuhebeln.


Axel
Titel: Re: Fortlaufende Nummer
Beitrag von: Thomas Schulte am 06.03.07 - 12:35:32
Doch man kann mit fortlaufender Nummerierung arbeiten.

Man darf es nur nicht zulassen, das ein Anwender die Nummer Ad Hoc erzeugt, wenn er nicht auf dem Server der das Nummerngirl spielt arbeitet.
Titel: Re: Fortlaufende Nummer
Beitrag von: Günter am 06.03.07 - 12:51:02
Also in die DB werden nur sporadisch Einträge aufgenommen, nicht mal täglich. Es sollte sehr sehr unwahrscheinlich sein, dass zwei Personen gleichzeitig einen Eintrag vornehmen.
Titel: Re: Fortlaufende Nummer
Beitrag von: koehlerbv am 06.03.07 - 12:59:39
Es sollte sehr sehr unwahrscheinlich sein ...

Mit der Einstellung wirst Du irgendwann furchtbar auf die Nase fallen. Merke: Was schiefgehen kann, geht auch schief. Irgendwann ...

Bernhard
Titel: Re: Fortlaufende Nummer
Beitrag von: iukhdh am 07.03.07 - 12:20:13
Bernhard, heisst du Murphy mit Nachnamen?

  ;D
Titel: Re: Fortlaufende Nummer
Beitrag von: koehlerbv am 07.03.07 - 12:22:24
Nö, aber ich habe eben schon einiges erlebt.

Bernhard
Titel: Re: Fortlaufende Nummer
Beitrag von: iukhdh am 08.03.07 - 10:21:15
Also ich als Notesanfänger hätte jetzt mal einfach eine Maske mit einem Feld "Nummer" erstellt, und würde bei den anderen Dokumenten beim Speichern über eine "Nummern-Ansicht" immer diese Nummer abfragen, ins Dokument eintragen  und in einem Zug den Eintrag im Feld "Nummer" um eins erhöhen.

Wenn nicht zuviele Zugriffe sind, also die Wahrscheinlichkeit für gleichzeitige Zugriffe gering ist, müsste sowas doch funktionieren, oder?
Titel: Re: Fortlaufende Nummer
Beitrag von: Glombi am 08.03.07 - 10:23:23
Das ist schon mal ein gescheiter Ansatz unter den genannten Voraussetzungen.
Titel: Re: Fortlaufende Nummer
Beitrag von: m3 am 08.03.07 - 10:26:17
Wenn nicht zuviele Zugriffe sind, also die Wahrscheinlichkeit für gleichzeitige Zugriffe gering ist, müsste sowas doch funktionieren, oder?
Konjunktiv II, wenn mich meine Schulbildung nicht täuscht.

Verben, welche unmögliche bzw. sehr unwahrscheinliche Bedingungen, Sachverhalte, Wünsche oder Folgen beschreiben (Irrealis) ... werden in den Konjunktiv II gesetzt.

Das beschreibt Deine Situation sehr gut. ;)

Wie Glombi schon sagt, unter den Bedingungen OK, aber wehe, an den Voraussetzungen ändert sich was (offline-arbeit, mehr gleichzeitige Benutzer, ....).
Titel: Re: Fortlaufende Nummer
Beitrag von: iukhdh am 08.03.07 - 10:36:56
Oh verdammt, ich hab übersehen dass wir hier im  Notes und Grammatik Forum sind
 ;D ;D

Ich frage mich bei solchen "gleichzeitiger Zugriff" Problematiken immer mal wieder, von was für einem Zeitraum sprechen wir da eigentlich. Also: Speicherbutton drücken - Aktion Nummeraustausch wird gestartet, am besten über Script ... wie lange dauert sowas und nach was für einem Zeitraum ist die Gefahr eines gleichzeitigen Zugriffs vorbei?

Titel: Re: Fortlaufende Nummer
Beitrag von: Glombi am 08.03.07 - 10:44:37
So - ich oute mich jetzt (und begebe mich auf den Weg zur Steinigung hier): Ich habe schon viele Anwendungen selbst programmiert bzw. vorhandene weiter entwickelt, die fortlaufende Nummern erzeugt haben.
Einige Lösungen sind schlecht
1.- @DbColumn auf vorhandene Dokumente

einige besser
2. per Script mit extra Nummerndokument (wie eben im Thread vorgeschlagen) und optional verschiedenen konfigurierbaren Nummernkreisen (bspw. für Jahr, Niederlassung, Dokumentart,...)

einige noch besser (fast perferkt)
3. mit serverseitigem Agent (Run on Server), der auf einem dedizierten Nummernserver die Nummer sequentiell vergibt

Ich habe auch schon mal ein Mix aus 2 und 3 gemacht.

Es gibt gelegentlich, in seltenen Fällen einen Speicherkonflikt oder doppelte Nummern. Es ist aber noch keine Firma daran pleite gegangen  ;D

Andreas
Titel: Re: Fortlaufende Nummer
Beitrag von: m3 am 08.03.07 - 10:50:17
"nach was für einem Zeitraum"?
Das ist doch kein Deutsch nicht! ;)

Ich bin ja, was diese Nummerproblematik betrifft, ein gebranntes Kind. Ich durfte vor ~ 10 Jahren ein Anwendung bauen, die genau den von Dir angedachten Algorithmus verwendete, um eindeutige Nummern zu generieren.

"Das werden nie mehr als 10 User", "Jaja, die Anwendung läuft immer nur auf dem einen Server" und "Nein, offline arbeiten wir nicht damit" waren so die Aussagen der Manager.

Am Anfang lief auch alles gut. Nicht mal 1% aller Dokumente hatte eine doppelt vergebene Nummer -- ich musste, IIRC, ca. alle 2 Wochen mal einen Konflikt auflösen.

Naja, bis dann auf einmal mehr User die Anwendung benutzten, die App auf mehreren Server installiert wurde, die Manager die DB auch offline im Zug, ... benutzten wollten, etc.

Auf einmal hatten > 10% aller Dokumente doppelte ID -> hoher Wartungsaufwand.

Eindeutige,´fortlaufende Nummern im Notes sind einfach böse!  ;)


Einen netten Ansatz hab ich in einem Projekt gesehen (die Idee war leider nicht von mir):
Die Nummern werden für jeden User auf dem Server vorgeneriert und jeweils für den User in die (lokale) DB gespielt mir der er arbeitet. Nachteil: man muss sich darum kümmern, dass man immer genug vorgenerierte Nummern hat, wenn man länger offline geht. Und "fortlaufend" sind sie auch nur bedingt.

@Glombi: Lassen wir einen eigenen Bereich im Forum für "eindeutige Nummern in Notes" einrichten?
 Jeder stellt sich darin mit "Hallo ich bin XXX und ich habe schon einmal eine Anwendung geschrieben, die im Notes fortlaufende Nummern erzeugt" vor?  ;D
Titel: Re: Fortlaufende Nummer
Beitrag von: Glombi am 08.03.07 - 10:52:58
Das sollten wir auf jeden fall ausdiskutieren! Mir gehts auch nun viel besser, jetzt wo es raus ist  ;D

Ich habe schon mal fortlaufende Nummern programmiert, und das ist GUT SO!  8)
Titel: Re: Fortlaufende Nummer
Beitrag von: klaussal am 08.03.07 - 10:59:09
Ich auch..... ;D
Titel: Re: Fortlaufende Nummer
Beitrag von: iukhdh am 08.03.07 - 11:04:32
... und einen Bereich der anonymen Grammatikschwächler tät ich auch gerne haben wollen tun !
Titel: Re: Fortlaufende Nummer
Beitrag von: Christopher am 08.03.07 - 11:04:39
Ich konnte bis heute noch nicht verstehen wofür eine fortlaufende Nummer Sinn macht ist das nicht typisch deutsch  ;D
Titel: Re: Fortlaufende Nummer
Beitrag von: koehlerbv am 08.03.07 - 11:07:25
Ich habe es bisher immer allen Firmen ausreden können - bis auf einer: Die bekamen einen Agent auf einem dedizierten Nummernvergabe-Server. Sind aber trotzdem seit vier Jahren insolvent ... Meine Schlussfolgerung: Wer fortlaufende Nummern haben will, geht pleite.

Bernhard
Titel: Re: Fortlaufende Nummer
Beitrag von: Glombi am 08.03.07 - 11:11:35
Bernhard, war Dein Agent denn soooo teuer   :o   ;D
Titel: Re: Fortlaufende Nummer
Beitrag von: koehlerbv am 08.03.07 - 11:17:56
Nein, überhaupt nicht. Aber die haben auch noch anderen Blödsinn gemacht, und dann kam der Staatsanwalt, später der Herr Richter und dann kostenlose Unterbringung für vier bis sechseinhalb Jahre. Und 1.400 Mitarbeiter standen auf der Strasse.

Bernhard
Titel: Re: Fortlaufende Nummer
Beitrag von: iukhdh am 08.03.07 - 11:19:12
@Christopher

Also ich gebe dir Recht,  innerhalb einer DB wie Notes total unsinnig

ABER ...

wenn du mit Papier parallel arbeiten musst, geht nix schneller als die Suche nach einem durchnummerierten Dokument. Ich arbeite hier in einer großen öffentlichen Verwaltung und habe tätglich mit  zig Rechnungen, Lieferscheinen usw. zu tun. Und um die zu finden, ist eine Nummerierung oft die beste Variante. Noch besser als ABC ablegen zu tun !!  ;D
Titel: Re: Fortlaufende Nummer
Beitrag von: Thomas Schulte am 08.03.07 - 11:32:27
Ich oute mich jetzt auch ....
In der !!SYSTEM!! Datenbank ist tatsächlich eine Funktion drin mit der man eindeutige logisch zusammenhängende Nummern (inklusive Nummernkreisen abhängig von Bedingungen im Dokument) auf einem Nummernserver erzeugen kann.

Wo sind jetzt die Steine ....

Duck und wech.
Titel: Re: Fortlaufende Nummer
Beitrag von: flaite am 08.03.07 - 11:35:36
Mein erstes "professionelles" Notes-Projekt, hab ich von einem Vorgänger übernommen.
Da war vereinbart, dass die Nummern auch bei Löschungen fortlaufend bleiben.
Die waren total sauer, weil nach 3 Monaten Lösch-, Editier- und NeuErstellen-Operationen total langsam waren und das "System" massive Probleme mit Speicher & Replizierkonflikten hätte.

Gemäß den Angaben meines damaligen Projektmanagers war das natürlich eine maßlos übertriebene Darstellung und "die fallen sowieso stündlich über ihre nichtgebundenen Schnürsenkel, verschütten jeden Kaffee und haben dann noch ihre Sssserrrrrver nicht im Griff.

Beispiel:
In der Datenbank befanden sich 5000 Dokumente.
Wenn Dokument 13 gelöscht wurde, mußte "natürlich" für Dokumente 14 bis 5000 das Feld "heiligeNummer" um 1 herabgesetzt werden und latürnich jedes dieser Dokumente gespeichert werden.
Bei neuen Dokumenten konnte man natürlich auch eine neue Nummer wählen. Das Feld "heiligeNummer" der nachfolgenden Dokumente... abspeichern. Und man konnte die Nummer auch ändern. Und das Feld "heiligeNummer" der nachfolgenden Dokumente ... abspeichern.
Kunde war ein globaler Technologie- und Automobilkonzern.

Das ist mir damals voll auf den Sack gegangen. In der Rückschau war es aber ein guter Einstieg in die "professionelle" Informatik.
Die damals dafür verantwortliche Organisation hat in den 3 Jahren vorher 3 Beacon Awards gewonnen. Die Karriere vom idealistischen Entwicklungsökonom zum suleymanistischen eCyniker war da im Grunde schon klar vorgezeichnet. Fate.
Der anfangs dafür verantwortliche Entwickler ist bei da sich noch massiv ausdehnender IT-Bubble im Frühling 1999 gefeuert worden. Mein unmittelbarer Vorgänger in dem Projekt ist Jahre später Geschäftsführer der Marketinggesellschaft des deutschen Trabrennsports geworden. 
Titel: Re: Fortlaufende Nummer
Beitrag von: Axel am 08.03.07 - 11:41:21
Muss ich mich jetzt hier auch outen?!

Ich habe vor einiger Zeit für unsere Abteilung eine Art Bestellverwaltung erstellt, bei der die Bestellnummern fortlaufend generiert werden.


Und dass sogar nach dieser Methode:  >:D

Einige Lösungen sind schlecht
1.- @DbColumn auf vorhandene Dokumente

Da die DB gerade mal von zwei Leuten (auf einem Server) genutzt wird (und das nicht unbedingt gleichzeitig), gab's noch nie Probleme.


Und wo bleiben denn nun die Steine??
(Aber Vorsicht: Wer im Glashaus....)    ;D

Axel 
Titel: Re: Fortlaufende Nummer
Beitrag von: jo@chim am 08.03.07 - 11:56:58
Auch ich hatte schon (fortlaufende) Nummern  ;D

Hier ein Anwendungsprofil bei dem die Devise "wird schon nix passieren beim Überbrücken" garantiert zu einem Kurzschluss mit Funkenregen führen würde:

Mehrere sich replizierende DB's über Server in Europa, Mittelamerika und USA, eine zunehmende Anzahl an lokalen Notebook-Usern und die Anforderung, eindeutige ID's für die Dokumente (Auditnummern - Vorgabe nach TS16949) zu vergeben.

Ich habe das mit einem Kompromiss gelöst:

- neue Audit-Dokumente können nur angelegt werden, wenn eine Verbindung zum zentralen Nummernserver besteht
- Jedes Mal, wenn ein neues Audit angelegt wird, wird dort per LS ein Dokument mit der eindeutigen Nummer (Anlegejahr & 1 höher als das letzte ...) und einem Link zum "Basisdokument" erzeugt (wäre aber mit dieser Lösung auch per simplem Hochzählen im Profile des Nummernservers denkbar, oder?)
- Ist die Verbindung nicht vorhanden, wird die Umgebungsvariable "smode" auf "Offline" gesetzt und die "Neu Anlegen" Funktion darüber per HideWhen ausgeblendet.

Die Verbindung zum zentralen Server überprüfe ich mit folgendem Code im PostOpen der Datenbank:

Code
Sub Postopen(Source As Notesuidatabase)
	Dim session As New NotesSession
	Dim db As NotesDatabase	
	Dim doc As NotesDocument
	
	Set db = session.CurrentDatabase
	'Konfigurationsprofildokument - Name: "setup"
	Set doc = db.GetProfileDocument("setup")

	'Textfeld Multivalue "nServer" - Wert1: "Name des Servers"
	'Textfeld Multivalue "nServer" - Wert2: "Pfad/Dateiname der Nummernserver.nsf"
	nServerName=doc.nServer(0)
	nServerPath=doc.nServer(1)
	
	text1$="Hinweis"
	text2$="Kann keine Verbindung zum zentralen Nummernserver " & Chr$(10) & Chr$(10) & _
		"\\" & nServername &"\" & nServerPath & Chr$(10) & Chr$(10) &_
		"herstellen." & Chr$(10) & "Einige Funktionen stehen nicht zur Verfügung"	
	
	Dim ndb As New NotesDatabase( nServerName, nServerPath )
	' Über die Umgebungsvariable "smode" kann abgefragt werden, ob eine Verbindung besteht
	If Not ndb.IsOpen Then
		Msgbox text2$,48,text1$
		Call session.SetEnvironmentVar("smode","Offline")
	Else
		Call session.SetEnvironmentVar("smode","Online")
	End If	
End Sub

Funktioniert jetzt seit einem guten Jahr in der Form ohne jegliche Probleme ... aber bei der IMHO völlig blödsinnigen Anforderung, bei gelöschten Doks die Nummer wieder runter zu zählen (das gäb doch keine eindeutige Identifizierbarkeit mehr? oder hab ich da was falsch verstanden?) wäre natürlich auch diese Lösung nicht praktikabel ...