Domino 9 und frühere Versionen > ND6: Entwicklung

Fortlaufende Nummer

<< < (6/6)

Thomas Schulte:
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.

flaite:
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. 

Axel:
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


--- Zitat von: Glombi am 08.03.07 - 10:44:37 ---Einige Lösungen sind schlecht
1.- @DbColumn auf vorhandene Dokumente

--- Ende Zitat ---

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 

jo@chim:
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
--- Ende Code ---

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 ...

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln