Für verschiedene Projekte bin ich immer wieder auf der suche nach einer guten Lösung für die automatische und fortlaufende Nummerierung von Datensätzen. Ich habe hiervon in der Vergangenheit immer wieder verschiedene Tools getestet und auch selbst eines gebaut, jedoch hat sich herausgestellt das alle von Ihnen immer wieder die gleichen Probleme haben. Race Conditions! Wenn viele Datensätze gleichzeitig angelegt werden, dann verschluckt sich der zähler und Nummern werden mehrfach vergeben oder einzelne Nummern übersprungen. Dummerweise lassen sich die Systemeigenen default Autonumbering Felder nicht so anpassen, wie man es in den meisten fällen benötigt, bzw. es der Kunde anfordert. Nun gibt es endlich eine Lösung, die auf die meisten Anforderungen passt.
Die Systemeigenen Nummerngeneratoren
Es gibt für einige Datensätze in Dynamics 365 bereits vordefinierte Felder zur Autonummerierung. Hierzu zählen Verträge, Anfragen, Angebote, Aufträge, Rechnungen, Kampagnen, Artikel, Kategorien und Wissensartikel. Leider lassen sich diese Nummern nur sehr wenig anpassen indem man nur den Prefix ändern kann und die Länge vom Random String angibt (mindestens 4 und maximal 6 Zeichen). Die Länge der inkrementellen Nummer ist immer sechs. Das ist sehr eingeschränkt und trifft in den meisten Fällen nicht die Anforderungen des Kunden.
Third Party Plugins
Der erste und lange Zeit von mir genutzte Auto Number Generator war der ID Generator von Planet Technologies. Eine Beschreibung wie dieses Plugin funktioniert findet Ihr hier auf der Planet XRM Homepage. Dieses Plugin ist wirklich sehr gut. Es ist ziemlich einfach hier eine automatisch Nummerierung zu generieren und einzubauen. Es ist möglich ein Prefix zu definieren, die länger der Nummer und ob diese mit führenden Nullen aufgefüllt werden soll, sowie den nächsten Zählwert und die Schrittweite. Ziemlich simpel und gut. Es ist sogar möglich mit einem Platzhalter etwa das Datum oder auch nur die Jahreszahl zu verwenden. Die Jahreszahl findet zum Beispiel häufig Anwendung bei Angeboten oder Rechnungen.
Der zweite von mir genutzte Generator ist der Celedon AutoNumber von Celedon Partners. Dieses Plugin ist ähnlich Simpel und gut wie der ID Generator. Hier kann zusätzlich noch ein Suffix mit definiert werden. Was hier sehr gut funktioniert ist, dass man das Autonumbering von einer Condition abhängig machen kann. Zum Beispiel kann man bei Kontakten ein Feld ID definieren, welches entweder eine Partner ID bekommt, oder eine Kunden ID oder eine Interessenten ID, basierend darauf, ob in einem Dropdown, Partner, Kunde oder Interessent ausgewählt wurde. So spart man sich für jeden Kontakt Typ ein eigenes ID Feld zu bauen, welches über Geschäftsregeln ein, bzw. ausgeblendet wird.
Meine eigene Lösung ohne Code
Schließlich habe ich selbst ein Autonumbering System gebaut, welches ausschließlich mit Bordmitteln und ohne Codezeile auskommt. Hierzu habe ich eine neue Entität “Nummerngenerator” erstellt, welches die benötigten Felder enthält. Da es bei meinen Kunden oft darum geht, dass eine Jahreszahl enthalten sein muss, habe ich eine Jahreszahlenautomatik mit eingebaut. Es wird das aktuelle Jahr und eine Schrittweite für das Jahr definiert und angegeben, wann die Jahreszahl das nächste mal geändert werden soll. Alles weitere übernimmt ein Workflow, der solange wartet, bis das Datum erreicht wurde. Die Fertige Nummern wird über ein Berechnetes Feld zusammengebaut und angezeigt. Um diesen Generator zu verwenden baut Ihr einen Workflow, welcher beim Erstellen eines Datensatzes, zum Beispiel einer Rechnung, die aktuelle Nummer in das gewünschte Feld übernimmt und die das Feld “Next Number” um die Schrittweite erhöht.
Der Vorteil dieser selbstgebauten Lösung ist, dass Ihr sie genau so bauen könnt, wie Sie benötigt wird. Ihr braucht ein Prefix? Baut es ein. Soll es noch ein Suffix ein? Kein Problem. Die Schrittweite soll 10 sein und nicht 1? Machen wir.
Race Conditions
Alle drei oben genannten Lösungen habe alle das gleiche Problem. Wenn Ihr Datensätze einzeln anlegt, dann funktioniweren diese Generatoren alle sehr gut und vollkommen ohne probleme. Wenn aber viele Datensätze gleichzeitig, zum Beispiel über einen Workflow oder durch den Import von Datensätzen, erstellt werden, dann werden manchmal Nummern doppelt vergeben oder gar einzelne Nummern ausgelassen. Das hat mich in der Vergangenheit viele Stunden gekostet.
Die neue Lösung seit Dynamics 365 V9.0
Mit dem Upgrade auf Dynamics 365 V9.0 hat Microsoft anscheinend im Hintergrund die Hauseigenen Auto Numbering Felder erweitert. So ist es nun möglich Felder in jeder beliebigen Entität zu erstellen, welche die Autonummerierungsfunktion von Dynamics 365 haben. Weiterhin kann statt dem Prefix (String), einer Sequenziellen Nummer (Eine Nummer die einfach hochzählt) und einem Random String nun sogar auch ein Datum mit eingefügt werden. Hier ein Beitrag aus der Community dazu.
Leider hat Microsoft vergessen uns diese Funktion über die GUI zugänglich zu machen und so ist es schwierig Gebrauch hiervon zu machen. Zum Glück gibt es auch hierfür eine Lösung. Die XRM Toolbox. Es gibt ein neues Plugin für die XRM Toolbox mit welchem es möglich ist, neue Felder mit dieser Autonummerierung zu erstellen, bzw. bestehende Autonummerierungsfelder zu bearbeiten. Es ist sogar möglich die System default Felder zu bearbeiten und so über das oben beschriebene Maß hinaus zu beeinflussen.
Bildquelle: pixabay