Autor Thema: laufende nummer für Dokumente vergeben  (Gelesen 17086 mal)

Offline Mario

  • Junior Mitglied
  • **
  • Beiträge: 59
  • Ich liebe dieses Forum!
laufende nummer für Dokumente vergeben
« am: 17.09.03 - 17:18:44 »
Hi Leute,

will beim Anlegen eines Dokuments eine laufende Nummer von 1 beginnend in einem (versteckten ) Feld anlegen.
Wie kann ich das realisieren?

Die  Artikel, dich über die Suchfunktion gefunden habe,
kann ich nicht aurfufen, sind anscheinend nicht mehr verfügbar.

Driri

  • Gast
Re:laufende nummer für Dokumente vergeben
« Antwort #1 am: 17.09.03 - 17:22:39 »
Hi,

so spontan fällt mir der Weg über ein Profildokument ein.

- Profil mit einem Feld für den Zähler
- beim Speichern eines Dokumentes wird das Profil ausgelesen
- der Wert wird in das Dokument geschrieben
- der Wert wird um 1 erhöht und ins Profil geschrieben

Offline Mario

  • Junior Mitglied
  • **
  • Beiträge: 59
  • Ich liebe dieses Forum!
Re:laufende nummer für Dokumente vergeben
« Antwort #2 am: 17.09.03 - 17:25:30 »
Gehts nicht auch etwas einfacher?

Driri

  • Gast
Re:laufende nummer für Dokumente vergeben
« Antwort #3 am: 17.09.03 - 17:32:12 »
Naja, irgendwo muß Notes ja den Zählerstand speichern.

Eine andere Alternative wäre, du suchst beim Speichern aus den vorhandenen Dokumenten den maximalen Zählerstand raus, erhöhst diesen um 1 und schreibst diesen dann in das Dokument.

Offline Mario

  • Junior Mitglied
  • **
  • Beiträge: 59
  • Ich liebe dieses Forum!
Re:laufende nummer für Dokumente vergeben
« Antwort #4 am: 17.09.03 - 17:46:54 »
Ich müsste nach dem "last modified" Dokument suchen und den Wert aus diesem um 1 erhöhen.
Kann man das mit Formeln machen oder muss ich in LotusScript coden?

Driri

  • Gast
Re:laufende nummer für Dokumente vergeben
« Antwort #5 am: 17.09.03 - 17:53:28 »
Last Modified ist gefährlich, denn der Wert wird ja nur beim Speichern gesetzt, oder ?

Du müßtest dir eine Ansicht bauen, in der der Zähler in der ersten Spalte sortiert wird. Dann holst du dir aus dieser Ansicht das erste bzw. letzte Dokument (je nach Sortierung).
Aus diesem liest du den Wert aus, erhöhst ihn und packst ihn in das neue Dokument.

Ich wüßte jetzt nicht, wie ich das in Formelsprache machen sollte, vielleicht gehts aber auch.
In Script gehts auf jeden Fall.

P.S. : Falls es an Scriptkenntnissen scheitert, gibts hier bestimmt Hilfe oder du mußt das doch über Profildokumente machen. Das geht auf jeden Fall per Formelsprache.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:laufende nummer für Dokumente vergeben
« Antwort #6 am: 17.09.03 - 17:55:44 »
Hallo, Mario,

diese Deine Frage taucht in allen Notes-Foren immer wieder auf.
Daher nochmal die prinzipielle Antwort:
"Das Prinzip von Notes verbietet die Vergabe von sequentiellen Nummern in Notes-Dokumenten." Verteilte Datenbanken und fortlaufende Nummern geht nicht - ist ja eigentlich auch logisch.

Nun gibt es bestimmte Anwendungsfälle, bei denen sich vielleicht fragen mag "Warum machen die das mit Notes?", wo man trotzdem eine Vergabe fortlaufender Nummern hinbekommen könnte.
Schreib' mal genau auf, was Du machen willst, was von den Seriennummern abhängt, wie diese aufgebaut sein müssen und vor allem - müssen sie sofort verfügbar sein ? Usw.

A priori gilt aber: Sequentielle Nummern und Notes sind ein absolutes "No-no".

Bernhard

PS: Und guckst Du noch diese Threads:

http://www.atnotes.de/index.php?board=7;action=display;threadid=10098;start=0

http://www.atnotes.de/index.php?board=9;action=display;threadid=7395

Offline CodeWarrior

  • Frischling
  • *
  • Beiträge: 4
  • Ich liebe dieses Forum!
Re:laufende nummer für Dokumente vergeben
« Antwort #7 am: 17.09.03 - 20:53:43 »
Wenn sich Deine Datenbank nur auf einem Server befindet, kannst Du auch http://www.xetrion.com probieren.

Ist auf einem Server absolut sicher (vergibt keine doppelten Nummern). Bei mehreren Repliken kann pro Replik automatisch ein eigener Zähler verwaltet werden.
« Letzte Änderung: 17.09.03 - 20:58:54 von CodeWarrior »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:laufende nummer für Dokumente vergeben
« Antwort #8 am: 17.09.03 - 21:09:36 »
@CodeWarrior:
Ich mag hier zwar die vollommen unnütze, weil das Thema Notes absolut verfehlende Diskussion "Laufende Nummern in Notes" nicht wieder aufleben lassen, aber auch Dein Vorschlag geht völlig am Thema vorbei.
- Was passiert, wenn sich jemand eine lokale Replik zieht ?
- Was passiert, wenn neben Server 1 plötzlich doch ein Server 2 da ist ?

"Notes und fortlaufende Nummern" ist so ungefähr das gleiche wie "Weichensteller bei der Lufthansa" - es gibt keine Zusammenhänge.

Bernhard

Offline Micha

  • Aktives Mitglied
  • ***
  • Beiträge: 106
  • Geschlecht: Männlich
  • Not(es) macht erfinderisch
Re:laufende nummer für Dokumente vergeben
« Antwort #9 am: 18.09.03 - 09:36:30 »
Diese Formel habe ich in das Nummern Feld direkt geschrieben.
var := @If(@IsNewDoc;@GetProfileField("DBProfile"; "Nr");@Return(Nr));
Nr :=@TextToNumber(var);
@SetProfileField("DBProfile"; "Nr"; @Text (nr+1) ) ;
var
Ausserdem habe ich einen Agenten der jede Nacht läuft und doppelte Nr beseitigt, dies hat zur folge das ab und zu bei replizierungen die nummern verschoben werden, das habe ich dann in einem Protokoll mitgeschrieben, so dass sich keiner wundert.

Agent:
Sub Initialize
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim view As NotesView
   Dim doc As NotesDocument
   Dim vordoc As NotesDocument
   Dim profdoc As NotesDocument
   Dim Number As Variant
   Dim NrVor As Variant
   Dim NewNumber As Integer
   Dim NewNumberText As String
   Dim LastNrText As String
   Dim LastNr As Integer
   Dim Item As NotesItem
   
   Set db = s.CurrentDatabase
   crlf$ = Chr(13) & Chr(10)
   Set view=db.GetView("ATNumberLookup")
   'doc mit der höchsten ATNummer suchen
   Set doc = view.GetLastDocument
   Set profdoc = db.GetProfileDocument("DBProfile")
   ' und diese dann in das profildoc schreiben
   LastNr = Cint(doc.Nr(0) )
   LastNr = LastNr +1
   LastNrText = Cstr(LastNr)
   Set Item = profdoc.ReplaceItemValue( "Nr" , LastNrText)
   ' Start der doppelten ATNummern suche
   Set doc= View.GetFirstDocument
   NrVor = doc.getitemvalue("Nr")
   Set doc=View.GetNextdocument(doc)
   
   While Not doc Is Nothing
      
      Number = doc.getitemvalue("Nr")
      If Number(0) = NrVor(0) Then
         numberold$ = Number(0)
         NumberProf =profdoc.getitemvalue("Nr")
         numbernew$ = NumberProf(0)
         doc.Nr = NumberProf(0)
         'Ab hier die benachrichtigungen in der Historie
         Set Item= doc.GetFirstItem("EditDates")
         Call item.AppendToTextList(" Am " + Date$ + ", um " + Time$  + " Uhr")
         Call doc.ReplaceItemValue("EditDates", item)
         
         Set Item= doc.GetFirstItem("EditDescriptions")
         Call item.AppendToTextList("  Nummer von " + numberold$ + " auf " + numbernew$ + " geändert")
         Call doc.ReplaceItemValue("EditDescriptions", item)
         
         Set Item= doc.GetFirstItem("Bearbeiter")
         Call item.AppendToTextList(" Agent" )
         Call doc.ReplaceItemValue("Bearbeiter", item)
         
         NewNumber = Cint(NumberProf(0))
         NewNumber = NewNumber +1
         NewNumberText = Cstr(NewNumber)
         Set Item = profdoc.ReplaceItemValue( "Nr" , NewNumberText)
         Call doc.Save( True, False,True )
         Call profdoc.Save( True, False,True )
         Call view.refresh
         Set doc=View.GetNextdocument(vorDoc)
      Else      
         Set vordoc = doc
         NrVor = doc.getitemvalue("Nr")
         Set doc=View.GetNextdocument(Doc)
      End If      
   Wend
End Sub

Der Code ist einer der ersten die ich geschrieben habe, also nicht über den merkwürdigen Stil wundern.  :)
« Letzte Änderung: 18.09.03 - 09:38:40 von Micha »
5.0.5 Designer und Client
Win NT 4.0

Driri

  • Gast
Re:laufende nummer für Dokumente vergeben
« Antwort #10 am: 18.09.03 - 09:39:57 »
Hi Bernhard,

ich gebe dir ja in der Sache Recht, aber manchmal kommt man nun mal als Entwickler nicht an Kundenanforderungen vorbei. Natürlich kann man versuchen, den Kunden zu überzeugen, daß bestimmte Dinge in Notes nicht oder nicht sauber funktionieren, aber was soll man machen, wenn der Kunde auf stur stellt oder wenn bestimmte Dinge ein Mußkriterium für die Anwendung sind ?

Offline MrMagoo

  • Senior Mitglied
  • ****
  • Beiträge: 359
  • Geschlecht: Männlich
  • AAAhhh
Re:laufende nummer für Dokumente vergeben
« Antwort #11 am: 18.09.03 - 09:42:24 »
Hallo

ich habe ein ganz ähnliche Anforderung gehabt. Ich habe daraufhin Nummernblöcke vergeben.
1-1000 User1
1001-2000 User 2 usw.  ist zwar nicht fortlaufend vom erstellungsdatum her gesehen, aber zumindest lassen sich Berichte nach Nummern ordnen.

Driri

  • Gast
Re:laufende nummer für Dokumente vergeben
« Antwort #12 am: 18.09.03 - 09:51:37 »
Sonst noch ne Idee für laufende Nummern, wenns um Sortierung oder so geht :

Beim Erstellen des Dokumentes eine Nummer aus Jahr, Monat, Tag, Stunde, Minute, Sekunde zusammenbauen.

also z.B. 20030918094934

Das ist sicherlich keine Ideallösung, da es theoretisch vorkommen kann, daß zwei Personen zur gleichen Zeit ein Dokument erzeugen, aber es wäre eine einfache Lösung und wenn nicht allzu viele User damit arbeiten bzw. nicht allzu viele Dokumente erzeugt werden.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:laufende nummer für Dokumente vergeben
« Antwort #13 am: 18.09.03 - 10:12:47 »
Der Idealfall ist es, wenn man die Nummern nicht on the fly braucht. Dann kann man zu Zeiten, in der die Erzeugung von Replizierkonflikten unwahrscheinlich ist, einem Agenten die Aufgabe der Nummernvergabe erledigen lassen.

@Micha: Die Nummernvergabe sollte beim Speichern erfolgen. Ansonsten wird auch inkrementiert, wenn das Dok nach Erstellung vielleicht doch verworfen wird.

Ciao,
Bernhard

Offline Micha

  • Aktives Mitglied
  • ***
  • Beiträge: 106
  • Geschlecht: Männlich
  • Not(es) macht erfinderisch
Re:laufende nummer für Dokumente vergeben
« Antwort #14 am: 18.09.03 - 11:46:25 »
@koehlerbv:
Hatt ich auch schon dran gedacht, aber es erhöht auch drastisch die Wahrscheinlichkeit dass die Nummern doppelt vergeben werden, auch wenn der Agent das wieder ändert, sollte es doch vermieden werden.
Den Nachteil dass einige Nummern dann sozusagen nicht vergeben werden müsste man dann in Kauf nehmen, je nachdem was einem wichtiger ist.

5.0.5 Designer und Client
Win NT 4.0

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:laufende nummer für Dokumente vergeben
« Antwort #15 am: 18.09.03 - 11:52:53 »
Meinst Du, wenn Du beim Speichern erst die Nummer vergeben wird ? Wieso? Du mußt nur den gleichen Algorithmus verwenden, wie Du es jetzt beim Erstellen des Docs machst.

Läuft Deine App. nur auf einem einzigen Server ? Der könnte ja auch - mehr oder weniger - on the fly Nummern vergeben mit einem Agent, der auf neue Dokumente reagiert ...

Bernhard

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:laufende nummer für Dokumente vergeben
« Antwort #16 am: 18.09.03 - 19:46:34 »
... der Weg über das Profildokument schlägt auf jeden Fall fehl, wenn mehr als eine Person gleichzeitig in der Datenbank arbeiten. Das Profildokument wird temporär geladen und liegt während der Session ständig vor...

... man kann den Weg über ein Konfig-Doc ( auch Setup-Doc genannt ) wählen. Dort wird für diesen Server die zuletzt vergebene Nummer gespeichert. Im Save eines Dokumentes wird dort die Nummer ausgelesen und um einen Wert erhöht. Wenn man das einigermaßen sicher haben möchte, dann unterlegt man diesem Konfig-Doc noch ein Locking ( absperren des Dokumentes, solange ein User darauf zugreift )

... es gibt noch den Weg über Konfig-Doc und eine Ansicht zu gehen. Im Konfig-Doc wird eine Serverkennzeichen geladen. Die Nummer ergibt sich aus der in der Ansicht ermittelten höchsten Nummer. Wird das Dokument verworfen, und ist noch kein weiteres Dokument angelegt worden, dann ist die letzte Nummer weiterhin verfügbar...

... man kann eine Nummer auch aus einem Textfile ziehen. Hier besteht die Systemsicherheit, daß nicht 2 User gleichzeitig das Dokument speichern...

... die Hinweise von Bernhard sind ernst zu nehmen. Eine fortlaufende Nummernvergabe ist unter replizierenden Systemen nicht einwandfrei und vollkommen sicher lösbar...

ata
Grüßle Toni :)

Offline CodeWarrior

  • Frischling
  • *
  • Beiträge: 4
  • Ich liebe dieses Forum!
Re:laufende nummer für Dokumente vergeben
« Antwort #17 am: 18.09.03 - 20:29:00 »
@CodeWarrior:
Ich mag hier zwar die vollommen unnütze, weil das Thema Notes absolut verfehlende Diskussion "Laufende Nummern in Notes" nicht wieder aufleben lassen, aber auch Dein Vorschlag geht völlig am Thema vorbei.
- Was passiert, wenn sich jemand eine lokale Replik zieht ?
- Was passiert, wenn neben Server 1 plötzlich doch ein Server 2 da ist ?

"Notes und fortlaufende Nummern" ist so ungefähr das gleiche wie "Weichensteller bei der Lufthansa" - es gibt keine Zusammenhänge.

Bernhard

Hi Bernhard,
im Prinzip ist Deine Aussage schon richtig, wenn da nicht die Kunden wären ... ;)

Das Problem ist auch nicht Notes an sich, sondern verteilte Anwendungen. Eine übergreifende Nummerierung ist nur dann möglich, wenn alle Repliken jederzeit Verbindung zu einem "Master-Server" hätten, der dann die eigentliche Nummerierung vornimmt. Ist natürlich mit lokalen Repliken kaum machbar.

Viele Kunden benutzen aber ihre Datenbanken nur serverbasierend (z.B. Web-Anwendung mit Domino). Da ist eine saubere Nummerierung on-the-fly beim ersten Speichern schon machbar. Bei mehreren Repliken auf verschiedenen Servern natürlich auch nur mit getrennter Nummerierung (jeder Server zählt für sich).

Tom

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:laufende nummer für Dokumente vergeben
« Antwort #18 am: 18.09.03 - 20:39:59 »
Hi, Tom,

da stimme ich Dir vollkommen zu ;-)
Besser kann man es nicht sagen !

Ich werde mir Dein Posting speichern, denn die nächste Frage in diese Richtung kommt bestimmt.

Herzlichst,
Bernhard

Offline cgorni

  • Junior Mitglied
  • **
  • Beiträge: 54
  • Geschlecht: Männlich
Re: laufende nummer für Dokumente vergeben
« Antwort #19 am: 24.01.06 - 09:37:13 »
Hallo,

hier mein Senf dazu. Prinzipiell gibt es meiner Meinung nach zwei "gute" Möglichkeiten laufende Nummern zu erzeugen:

1. Über Datum/Username
--------------------------------
Hier erzeugt man wie oben schon angedeutet einen Schlüssel über das aktuelle Datum. Damit sich zwei Personen nicht gegenseitig in die Quere kommen, kann man den Username noch integrieren.

In Lotus Workflow zum Beispiel sieht eine eindeutige Nummer so aus:

Admin/Gorni-23.01.2006-ADMN-6LBE8K

Wobei ich jetzt allerdings nicht weiss wie der hintere Teil erzeugt wird  ;D Wenn man anstelle dessen noch Minuten und Sekunden integriert hat man seine Nummer.

Nachteil: eventuelle Nummernvorgaben für die Struktur durch den Kunden kann man nicht berücksichtigen.


2. Agent
-----------
Die meiner Meinung nach einzige Möglichkeit strukturierte Nummern eindeutig zu machen ist ein Background-Agent, der auf einem(!) Server läuft und allen Dokumenten, die noch keine Nummer haben eine geben.

Das heisst wir haben eine zentrale Stelle, die die Nummer verteilt.

Nachteil: man hat die Nummer erst am nächsten Tag oder (wenn man den Agenten tagsüber laufen lässt) eventuell Replikationskonflikte.


   Admin/Gorni-23.01.2006-ADMN-6LBE8K

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz