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 eines Inventargutes 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.

Datahandler konfigurieren




Legen Sie zunächst im Intrexx Portal Manager eine neue Anwendung auf Basis der Applikationsvorlage Basisapplikation an. Legen Sie über das Kontextmenü der Datengruppe ein Datenfeld 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 die Datenfelder über das Kontextmenü 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 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 Tabelle 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: 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 "UP-" 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="UP-"/<
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"/>