AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
22.09.20 - 18:19:52
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Domino 8 und frühere Versionen
| |-+  Entwicklung (Moderatoren: Axel, eknori, Hoshee, ata, Thomas Schulte, koehlerbv)
| | |-+  laufende nummer für Dokumente vergeben
« vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: laufende nummer für Dokumente vergeben  (Gelesen 13442 mal)
Mario
Junior Mitglied
**
Offline Offline

Beiträge: 59


Ich liebe dieses Forum!


« 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.
Gespeichert
Driri
Gast
« Antworten #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
Gespeichert
Mario
Junior Mitglied
**
Offline Offline

Beiträge: 59


Ich liebe dieses Forum!


« Antworten #2 am: 17.09.03 - 17:25:30 »

Gehts nicht auch etwas einfacher?
Gespeichert
Driri
Gast
« Antworten #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.
Gespeichert
Mario
Junior Mitglied
**
Offline Offline

Beiträge: 59


Ich liebe dieses Forum!


« Antworten #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?
Gespeichert
Driri
Gast
« Antworten #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.
Gespeichert
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« Antworten #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
Gespeichert
CodeWarrior
Frischling
*
Offline Offline

Beiträge: 4


Ich liebe dieses Forum!


« Antworten #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 » Gespeichert
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« Antworten #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
Gespeichert
Micha
Aktives Mitglied
***
Offline Offline

Geschlecht: Männlich
Beiträge: 106


Not(es) macht erfinderisch


« Antworten #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.  Smiley
« Letzte Änderung: 18.09.03 - 09:38:40 von Micha » Gespeichert

5.0.5 Designer und Client
Win NT 4.0
Driri
Gast
« Antworten #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 ?
Gespeichert
MrMagoo
Senior Mitglied
****
Offline Offline

Geschlecht: Männlich
Beiträge: 359


AAAhhh


« Antworten #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.
Gespeichert
Driri
Gast
« Antworten #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.
Gespeichert
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« Antworten #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
Gespeichert
Micha
Aktives Mitglied
***
Offline Offline

Geschlecht: Männlich
Beiträge: 106


Not(es) macht erfinderisch


« Antworten #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.

Gespeichert

5.0.5 Designer und Client
Win NT 4.0
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« Antworten #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
Gespeichert
ata
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 5092


drenaiondrufflos


WWW
« Antworten #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
Gespeichert

Grüßle Toni Smiley
CodeWarrior
Frischling
*
Offline Offline

Beiträge: 4


Ich liebe dieses Forum!


« Antworten #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 ... Wink

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
Gespeichert
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« Antworten #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
Gespeichert
cgorni
Junior Mitglied
**
Offline Offline

Geschlecht: Männlich
Beiträge: 54



« Antworten #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  Grin 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
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: