Search the FirstSpirit Knowledge Base
Hallo Zusammen,
ich möchte gerne eine Nummer dynamisch von System hochzählen lassen, wenn ich eine neue Seite bzw. Content anlege.
Normale Vorgehensweise:
Der Content wird zusammen mit der Nummer in der Datenbank gespeichert und bei jedem anlegen eines neuen Contents muss in der Datenbank geschaut werden, welche Nummer aktuell vorhanden ist. Diese muss dann um 1 hochgezählt werden.
Bietet FS hierfür eine Lösung an, oder muss ich selber eine bauen?
der FirstSPirit-Server hat eigenen MXBean's. Diese sind bspw. via jconsole oder jvisualvm zuerreiche. und dort unter de.espirit.firstspirit... und dann project bezogen unter dem ProjectManager-MX-Bean gibt es stats wie bsow, PageStoreFolder oder PageStorePages, PageStoreSections etc..
wenn man solche Statistiken selber machen moechte, kann man vermutl. mit einem StoreListener arbeiten.
Vielleicht können Sie die fachliche Anforderung mal kurz beschreiben, vielleicht gibt es noch einen anderen Weg.
FirstSpirit hat schon einen Zähler für Datensätze. Reicht der nicht aus? Allerdings ist dieser Zähler für alle Tabellen einer Datenquelle, bezogen auf eine Tabelle könne also Lücken vorkommen.
Wenn das nicht ausreicht, muss man für den Anwendungsfall eine Eingabekomponente programmieren. Diese ist dann unsichtbar zu setzen und holt sich den initialen Wert aus einer externen Quelle - siehe ValueEngineer.html#getEmpty()
Was habe ich vor:
Der Kunde benötigt eine automatisch vergebene Nummer vom System. Diese Nummer soll bei jedem Anlegen eines neuen Content bzw. Inhalt in der Datenbank automatisch um 1 nach obengezählt werden. Das Format wäre z.B. <Lfd. Nr.> / <Jahr> , wodurch sich das Beispiel 011/2013 ergibt. Wenn jetzt ein neuer Content angelegt wird, dann soll die Nummer wie folgt aussehen: 012/2013. Nach einem Jahreswechsel muss die Lfd. Nr. wieder bei 1 anfangen und das Jahr muss dann das aktuelle sein. Bei einem Jahreswechsel auf 2014 würde die erste Nummer im Jahr 2014 wie folgt aussehen: 001/2014.
So gesehen nichts anderes als eine automatische ID-Vergabe, wenn auf der Datenbank ein neuer Eintrag gemacht wird. Nur das bei einem Jahreswechsel die Nummer bei 1 anfängt.
Lösungsvorschlag:
Mein Gedanke war, dass man eine Hilfstabelle dafür anlegen und dort die laufende Nummer einträgt. Bei jedem Anlegen des Contents wird die Nummer dann um eins nach obengezählt. Dazu trägt man das Jahr in eine andere Spalte mit ein. Jetzt wird bei jedem Speichern geprüft, ob das Jahr von der letzten Nummer mit dem aktuellen Jahr übereinstimmt. Wenn ja, dann wird die Nummer hochgezählt. Wenn nein, dann wird wieder bei Null angefangen.
Hat jemand weitere Ideen? Oder ist der Lösungsansatz in Ordnung?
Ich würde auch hier eine eigene Eingabekomponente bauen, die in alle notwendingen Vorlagen eingebaut wird. Beim Speichern wird geprüft, ob schon mal eine ID erzeugt wurde, falls nicht, wird das getan und der globale Counter hochgezählt. Ist für das Objekt schon ein Wert gespeichert, so wird dieser einfach beibehalten. Den globalen Counter kann man z.B. als FirstSpirit-Service implementieren.
Es gibt schon einige Partner die sowas ähnliches implementiert haben, um zum Beispiel eine UUID zu erzeugen.
Danke für die Antwort. Die Anforderung hat sich noch mal leicht geändert:
Die Nummer soll jetzt nicht beim Speichern in der Datenbank angelegt werden, sondern erst beim generieren des Projekts z.B. mit generateFull.
Kommt man irgendwie an die Beispiele von den Partnern dran?
Wir sind ja selber Partner von FS.
Das erst bei der Generierung zu machen halte ich für deutlich schwieriger, da die Generierung in einem "read-only" Modus läuft. Man könnte es also erst nach der Generierung machen.
Die Implementierungen von Partner sind Teil von Modulen für FirstSpirit. Vielleicht liest hier jemand mit und möchte eine Implementierung teilen.
Dass muss (und kann) ein Schritt vor der Generierung sein. Das ist dann auch eigentlich ziemlich einfach zu implementieren: Einfach über alle Datensätze ohne Nummer iterieren und die Nummber vergeben.
[EDIT]
Die Freigabe natürlich nicht vergessen