Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: buzzy666 am 13.12.05 - 15:28:19
-
Hi,
in einer unserer Anwendungen werden Bugs eingestellt. Jeder Bug soll eine Nummer bekommen. Dazu hab ich ein Profil-Dok erstellt, in dem ein bearbeitbares Nummern-Feld drin steht.
Wenn der User ein *neues* Dok speichert, wird der aktuelle Wert ausgelesen, um eins erhöht und wieder zurückgeschrieben:
Dim profil As NotesDocument
Set profil = db.GetProfileDocument("Profil")
'übergreifende Bugnummer (BugID) ermitteln
Dim lfdNrGesamt As String
lfdNrGesamt = Cstr(profil.lfdNrGesamt(0))
profil.lfdNrGesamt = profil.lfdNrGesamt(0) + 1
Call profil.save(True, False)
Der ausgelesene Wert wird in das neue Dok geschrieben. So weit, wo gut!
Nun kommt es allerdings vor, dass zwei oder drei Doks die gleiche Nummer haben...und nix hier mit: "naja, vielleicht gleiczeitig erstellt"!!! Da liegen teilweise 10 Minuten dazwischen >:(
Hat jemand nen Plan, woran das liegen könnte, bzw. die man eine alternative Nummernvergabe realisieren könnte? Ich habs halt deshalb mit dem Profil-Dok gemacht, weil da halt bis zu 50 Leuten gleichzeitig Bugs erfassen können...
Danke & Gruß,
Buzzy
-
Eine Thema, das schon hundert Mal hier diskutiert wurde. "Eigentlich" schliessen sich das Prinzip Notes und sequentielle Nummern aus.
Dein Problem liegt in dem ProfilDoc - das steht im Cache des Users ...
Bitte benutze die Suche: "fortlaufend", "sequentiell" - Dir werden die Augen übergehen ;)
Bernhard
-
Ach, der Herr Sebastian Grund von der KarstadtQuelle Lebensversicherung Aktiengesellschaft ist doch schon weitergezogen, nachdem er seine Frage auch im Notes/Domino 6 & 7 (http://www-10.lotus.com/ldd/nd6forum.nsf/DateAllThreadedweb/c6106a333166232f852570d6004db75c?OpenDocument) Forum gestellt hat.
-
Ach, der Herr Sebastian Grund von der KarstadtQuelle Lebensversicherung Aktiengesellschaft ist doch schon weitergezogen, nachdem er seine Frage auch im Notes/Domino 6 & 7 (http://www-10.lotus.com/ldd/nd6forum.nsf/DateAllThreadedweb/c6106a333166232f852570d6004db75c?OpenDocument) Forum gestellt hat.
Auf einem Bein ist schlecht stehen...
-
Eine Thema, das schon hundert Mal hier diskutiert wurde. "Eigentlich" schliessen sich das Prinzip Notes und sequentielle Nummern aus.
Dein Problem liegt in dem ProfilDoc - das steht im Cache des Users ...
Bitte benutze die Suche: "fortlaufend", "sequentiell" - Dir werden die Augen übergehen ;)
Bernhard
Oha - allerdings.
Aber vorerst weigere ich mich, 34$ für so 'ne Pipifax-Aufgabe zu investieren =>
http://www.xetrion.com/ ;)
-
Auf einem Bein ist schlecht stehen...
Und auf Doppelpostings ist ungern zu antworten, da man sich keine Mühe geben mag, wenn man ahnt, dass die Antwort längst woanders gegeben wurde. Exakt deshalb wurden Crosspostings auch in die Regeln dieses Forums aufgenommen.
Die bisher gegebenen Antworten im Developerworks-Forum sind übrigens immer noch nicht zielführend und stellen eine Verharmlosung der Situation dar.
Bernhard
-
Aber vorerst weigere ich mich, 34$ für so 'ne Pipifax-Aufgabe zu investieren =>
http://www.xetrion.com/ ;)
Zu irgendwelchen Investitionen hat keiner geraten. Die genannte Software löst Probleme auch nur unter ganz speziellen Umständen.
Im a priori verteilten Notes-Umfeld ist die Aufgabenstellung übrigens in keinster Weise "Pipifax".
Bernhard
-
Zu lernen er hat noch viel, der junge Padawan. O0
(Nicht Du, Bernhard)
-
Aber vorerst weigere ich mich, 34$ für so 'ne Pipifax-Aufgabe zu investieren =>
http://www.xetrion.com/ ;)
Zu irgendwelchen Investitionen hat keiner geraten. Die genannte Software löst Probleme auch nur unter ganz speziellen Umständen.
Im a priori verteilten Notes-Umfeld ist die Aufgabenstellung übrigens in keinster Weise "Pipifax".
Bernhard
Eben *diese* speziellen Umstände treffen bei uns zu :)
Und in einer nicht verteilten Umgebung ein laufende Nummer zu vergeben würde ich so spontan schon als Pipifax bezeichnen - ja ich weiss: dann ist Notes vielleicht nicht das richtige Tool (da gibt's ja auch nen Thread hier), aber entschuldige...
-
Mach dich locker,
schon mal darüber nachgedacht, dass es evtl. Repliken auf anderen Servern oder auch beim Benutzer lokal exsistieren können?
-
Mach dich locker,
schon mal darüber nachgedacht, dass es evtl. Repliken auf anderen Servern oder auch beim Benutzer lokal exsistieren können?
Ich bin mir sogar sicher, dass es *KEINE* Repliken auf anderen Servern gibt! Und wenn ein User meint, sich eine lok. Replik ziehen zu müssen, braucht er sich nicht zu beschweren, wenn die Numerierung durcheinander kommt...
Lockere Grüße,
Buzzy
-
Letztendlich muss der Programmierer aber dafür Sorge targen. :-\
Kombiniere die fortlaufende Nummer doch einfach mit den Initialien des Erstellers:
...
Set doc = db.GetProfileDocument("profil")
...
x_init = Left(session.CommonUserName,1) & Mid(session.CommonUserName, Instr(session.CommonUserName," ")+1,1)
x_number = doc.Nummer(0)
...
doc2.fortlaufendeNummer = x_number + x_init
...
-
Ich sehe zwei Möglichkeiten, wie man eine eindeutige Nummer berechnen kann.
1. Der einfache Fall:
@Unique
erzeugt eine eindeutige griffige Buchstaben/Zahlenkombination a la AGLA-6FRCQB
Syntax:
<1. Buchstabe Vorname + 1.-2. Buchstabe Nachname + letzter Buchstabe Nachme>-<Zufallsstring (gebildet aus Datum/Zeit)>
2. Laufende Nummer:
Diese wird durch einen servergestützten Agenten erzeugt. Die letzte vergebene Nummer wird in ein normales Dokument geschrieben.
Wenn eine neue Nummer vergeben werden soll, wird ein Request-Dokument erstellt. Ein Serveragent arbeitet dann sequentiell diese Requests ab.
1. Nachteil: Der User sieht die Nummer erst nach einer Weile.
2. Nachteil: Es muss ein Lock-Mechanismus implementiert werden. Denn es darf die berechnete Nummer erst dann in das Dokument geschrieben werden, wenn dieses nicht von anderen Anwender geöffnet wurde.
Auch hier gibt es die Möglichkeit des Replizierkonflikts.
=> Variante 1 sollte man nehmen.
Andreas
-
Ich bin mir sogar sicher, dass es *KEINE* Repliken auf anderen Servern gibt!
Schön für dich. Du hast aber dadurch nur eine von vielen Fallen umgangen.
Was meinst du passiert, wenn zwei oder mehr Benutzer relativ zeitgleich Dokumente erstellen? Das Nummernchaos ist vorprogrammiert.
Und wenn ein User meint, sich eine lok. Replik ziehen zu müssen, braucht er sich nicht zu beschweren, wenn die Numerierung durcheinander kommt...
Na toll. Und wer darf das wieder gerade ziehen? Und wer kriegt was auf die Mütze? Du als Entwickler.
Na denn viel Spass dabei.
Axel
-
Ich bin gerührt, wie besorgt hier alle um mich sind :'(
-
Ich bin gerührt, wie besorgt hier alle um mich sind :'(
Wir mögen halt keine halbgaren Lösungen ;)
Bernhard
-
Verständlich - ich an sich ebenso wenig, aber nachdem diese Nummerngeschichte ein Bug in einer kürzlich in Praxis gegangenen Anwendung ist (ist im Systemtest natürlich keinem Menschen aufgefallen >:(), war mir ehrlich gesagt jedes Mittel recht einen Workaround zu finden ::)
Und bis jetzt scheint's problemlos zu klappen...wen's interessiert: https://www-10.lotus.com/ldd/nd6forum.nsf/DateAllThreadedweb/ffb098ce175b31d3852570d700281731?OpenDocument
Greets,
Buzzy
-
Das funktioniert nur solange nicht zwei User mit der selben ID arbeiten (irgendwelche Pool-Ids).
Da funktioniert das Document locking leider nicht.
-
die bei mir in einer DB mit 25 Serverrepliken seit 5 Jahren läuft:
Dokumente werden ohne Nummer vom Anwender gespeichert und auf einem Server werden zentral die Nummern per Agent vergeben.
Hat in den 5 Jahren -trotz zeitweise über 700 Anwendern- keine Probleme gegeben.
-
Das ist die einzige Variante die wirklich funktioniert.
;D