Tipps & Tricks - Unique Number Generator
Der Unique Number Generator ermöglicht es, sich automatisch erhöhende Nummern nach vordefinierten Kriterien zu generieren. Die Nummer kann hierbei aus frei kombinierbaren Teilen (Zahl, Datum, Zeit, Wort) bestehen. Bekanntestes Beispiel für eine Unique Number sind wohl die Inventarnummern. Bei Anlage von Inventar in einer entsprechenden Intrexx Applikation kann mit dem Unique Number Generator eine fortlaufende und nach einer definierten Syntax aufgebaute Nummer generiert werden (z.B. Inv-2007-06-0001, Inv-2007-06-0002, usw.).
Auch bei Anträgen, Stücklisten oder Kundennummern kann die Verwendung des Unique Number Generators sinnvoll sein. Unique Numbers können über den Datahandler eines Datenfeldes erzeugt werden. Dabei wird vor dem Speichern ermittelt, welche Unique Number zu diesem Zeitpunkt in einem der bereits erfassten Datensätze die höchste vergebene Nummer ist. Beim Speichern des Datensatzes wird eine neue um 1 erhöhte Nummer in das Datenfeld geschrieben. Eine fortlaufende Nummernvergabe ist mit dieser Methode gewährleistet. Auch bei einem Neustart des Portaldienstes wird die höchste vergebene Unique Number ermittelt und als Startnummer für folgende Nummern verwendet.
Eine fortlaufende lückenlose Nummerierung kann auch mit Groovy erzeugt werden. Nicht geeignet ist JavaScript oder Velocity, da beim Laden der Seite nicht feststeht ob auch gespeichert wird.
Der Unique Number Generator kann an unterschiedlichen Stellen eingesetzt werden, wie z.B. auch beim Öffnen einer Seite zur Anlage eines neuen Datensatzes. Bitte beachten Sie in diesem Fall, dass beim Öffnen der Seite immer eine neue Nummer erzeugt wird. Wird der Vorgang abgebrochen, also die Seite ohne das Speichern des neuen Datensatzes geschlossen, dann wird die beim Öffnen erzeugte Nummer trotzdem verbraucht. Dies kann zu Lücken in der fortlaufenden Nummerierung führen.
Um dies zu umgehen, kann der UniqueNumberGenerator beim Speichern im Prozess verwendet werden. Die neue Nummer wird dann allerdings auch erst nach dem Speichern angezeigt.
Datahandler konfigurieren
Legen Sie zunächst im Portal Manager eine neue Anwendung auf Basis der Applikationsvorlage "Basisapplikation" an. Legen Sie dann ein neues Datenfeld in der enthaltenen Datengruppe an. Da in einer Unique Number Date-, Integer- und String-Werte enthalten sein können, verwenden Sie bitte ausschließlich Datenfelder mit dem Datentyp "Kurzer Text". Setzen Sie die Unique Number nicht in Systemfeldern ein. Verwenden Sie nur selbst erstellte Datenfelder. Tragen Sie den Titel "Unique Number" ein.
Blenden Sie über das Hauptmenü "Bearbeiten / Datenfelder anzeigen" die Datenfelder der Datengruppe ein. Falls noch nicht geschehen, aktivieren Sie die Optionen für Experten.
Öffnen Sie den Eigenschaftendialog des Unique Number-Datenfeldes mit einem Doppelklick auf das Datenfeld in der Applikationsstruktur und wechseln Sie dort auf den Reiter "Expert". Tragen Sie beim Attribut "datahandler" den Wert
de.uplanet.lucy.server.util.numbergenerator.SystemFieldNumberGenerator
ein und klicken Sie auf "OK".
Nun können Sie das Feld "Unique Number" noch in der Ansichtstabelle auf der Seite "Alle Einträge" aufnehmen. Speichern Sie die Applikation.
Erstellen der Datei UniqueNumber.xml
Die UniqueNumber.xml enthält die Definition aller Unique Numbers im aktuellen Portal.
<?xml version="1.0" encoding="UTF-8"?>
<uniquenumbers>
<uniquenumber name="myUniqueNumber1" guid="guid" link-datafield="guid">
<part type="constant" value="UP-"/>
<part type="year" condition="true" format="yyyy"/>
<part type="month" condition="true" format="mm"/>
<part type="day" condition="true" format="dd"/>
<part type="constant" value="-"/>
<part type="number" format="###"/>
</uniquenumber>
</uniquenumbers>
Erstellen Sie eine neue Datei mit einem handelsüblichen Texteditor und kopieren Sie den obigen Code in die Datei. Ändern Sie die folgenden Werte wie folgt ab:
-
name
Name der jeweiligen Unique Number (frei wählbar, muss eindeutig sein)
-
guid
GUID der jeweiligen Unique Number (frei wählbar, muss eindeutig sein)
-
link-datafield
GUID des string-Datenfeldes, in dem die Unique Number generiert wird
-
<part .../>
Definition eines Teils der Unique Number
Tragen Sie in "name" einen Namen für Ihre Unique Number ein.
Eine GUID für die Unique Number können Sie ganz einfach über das Hauptmenü "Extras / GUID erstellen" erzeugen.
Die GUID des Datenfeldes, in dem die Unique Number erzeugt werden soll, können Sie mit der Taste F4 ermitteln, wenn Sie es in der Applikationsstruktur markiert haben.
In der UniqueNumber.xml können beliebig viele Unique Numbers definiert werden. Kopieren Sie für weitere Definitionen von Unique Numbers den Abschnitt
<uniquenumber name=" myUniqueNumber1" guid="guid" link-datafield="guid">...
</uniquenumber>
und ändern Sie die Angaben name, guid, link-datafield und die Part-Typen entsprechend ab.
In den dann folgenden Part-Type-Tags können Sie je einen Teil der Unique Number festlegen. In unserem Beispiel hier würde die neue Nummer z.B. mit "INTREXX-" beginnen, gefolgt von der vierstelligen Jahreszahl, dem Monat, dem Tag, einem Bindestrich und einer dreistelligen Zahl, die automatisch erhöht wird. Mehr zu diesem Thema erfahren Sie im folgenden Kapitel. Speichern Sie die Datei unter dem Namen UniqueNumber.xml im Portalverzeichnis "internal/cfg" ab.
Nun muss der Portaldienst neu gestartet werden. Hier sehen Sie das Ergebnis im Browser.
Part-Typen
Die einzelnen Teile einer Unique Number und deren Reihenfolge werden über die unterschiedlichen Part-Typen definiert.
part type: constant
<part type="constant" value="INTREXX-"/<
Mit diesem Part Type kann ein beliebiger, fester Stringwert erzeugt werden.
part type: number
<part type="number" format="###"/<
Mit diesem Part Type kann eine sich um 1 erhöhende Zahl erzeugt werden. Über die Anzahl der Rauten (#) wird die Länge des Nummernteils gesteuert. format="###" erzeugt also einen dreistelligen Nummernteil für die Unique Number in der Syntax 001, 002, 003, etc. Ist die höchst mögliche Zahl erreicht (hier im Beispiel 999), wird wieder bei 001 begonnen.
part type: Zeit/Datum
Bei Part-Typen vom Typ Zeit/Datum muss jeder Teil eines Datums einzeln erzeugt werden. Hierfür stehen alle benötigen Part Typen von Jahr über Monat, Tag, Stunde, Minute bis hin zu Sekunde zur Verfügung.
<part type="year"/>
<part type="month"/>
<part type="day"/>
<part type="hour"/>
<part type="minute"/>
<part type="second"/>
Wird bei den Part-Typen vom Typ Datum/Zeit (year, month, day, hour, minute und second) darüber hinaus eine condition verwendet, fängt der Number-Teil der Unique Number bei einem Wechsel des entsprechenden Datum/Zeit Teiles wieder bei 1 an zu zählen. Bei der Verwendung der condition ist darauf zu achten, dass die Datum/Zeit Part-Typen vom stärksten (Jahr) zum schwächsten (Sekunde) Wert hin nacheinander angeordnet werden.
<part type="year" condition="true"/>
<part type="month" condition="true"/>
<part type="day" condition="true"/>
Über format="Formatangabe" ist eine Formatierung der Datum/Zeitausgabe möglich.
<part type="year" format="yyyy"/>
<part type="month" format="mm"/>
<part type="day" format="dd"/>