Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: buzzy666 am 13.12.05 - 15:28:19

Titel: laufende Nummer mit Profildok?
Beitrag 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
Titel: Re: laufende Nummer mit Profildok?
Beitrag von: koehlerbv am 13.12.05 - 15:31:01
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
Titel: Re: laufende Nummer mit Profildok?
Beitrag von: m3 am 13.12.05 - 17:03:41
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.
Titel: Re: laufende Nummer mit Profildok?
Beitrag von: buzzy666 am 13.12.05 - 17:20:41
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...
Titel: Re: laufende Nummer mit Profildok?
Beitrag von: buzzy666 am 13.12.05 - 17:25:46
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/  ;)
Titel: Re: laufende Nummer mit Profildok?
Beitrag von: koehlerbv am 13.12.05 - 17:29:54
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
Titel: Re: laufende Nummer mit Profildok?
Beitrag von: koehlerbv am 13.12.05 - 17:32:26
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
Titel: Re: laufende Nummer mit Profildok?
Beitrag von: m3 am 13.12.05 - 17:35:29
Zu lernen er hat noch viel, der junge Padawan.  O0
(Nicht Du, Bernhard)
Titel: Re: laufende Nummer mit Profildok?
Beitrag von: buzzy666 am 13.12.05 - 17:39:24
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...
Titel: Re: laufende Nummer mit Profildok?
Beitrag von: daija am 14.12.05 - 14:04:17
Mach dich locker,
schon mal darüber nachgedacht, dass es evtl. Repliken auf anderen Servern oder auch beim Benutzer lokal exsistieren können?
Titel: Re: laufende Nummer mit Profildok?
Beitrag von: buzzy666 am 15.12.05 - 08:47:21
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
Titel: Re: laufende Nummer mit Profildok?
Beitrag von: daija am 15.12.05 - 09:01:53
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
...
Titel: Re: laufende Nummer mit Profildok?
Beitrag von: Glombi am 15.12.05 - 09:03:34
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
Titel: Re: laufende Nummer mit Profildok?
Beitrag von: Axel am 15.12.05 - 09:06:45
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
Titel: Re: laufende Nummer mit Profildok?
Beitrag von: buzzy666 am 15.12.05 - 16:10:42
Ich bin gerührt, wie besorgt hier alle um mich sind  :'(
Titel: Re: laufende Nummer mit Profildok?
Beitrag von: koehlerbv am 15.12.05 - 17:44:46
Ich bin gerührt, wie besorgt hier alle um mich sind  :'(

Wir mögen halt keine halbgaren Lösungen  ;)

Bernhard
Titel: Re: laufende Nummer mit Profildok?
Beitrag von: buzzy666 am 16.12.05 - 07:54:51
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
Titel: Re: laufende Nummer mit Profildok?
Beitrag von: Pyewacket am 03.03.06 - 18:49:47
Das funktioniert nur solange nicht zwei User mit der selben ID arbeiten (irgendwelche Pool-Ids).
Da funktioniert das Document locking leider nicht.
Titel: Andere Variante
Beitrag von: WildVirus am 04.03.06 - 10:22:02
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.

Titel: Re: laufende Nummer mit Profildok?
Beitrag von: Thomas Schulte am 04.03.06 - 11:24:43
Das ist die einzige Variante die wirklich funktioniert.
 ;D