08.08.2008, 19:06 | #1 |
Участник
|
jinx: Numerische Nummernkreise im Eigenbau
Microsoft Dynamics AX verwendet f?r eindeutige Kennungswerte (Id’s) die eingebautenNummernkreise, f?r welche ein Feld vom Typ „String“ ben?tigt wird. Dies macht auchSinn, da Nummernkreise in Dynamics AX oft ein oder mehrere alphanumerische Zeichenenthalten. Nat?rlich k?nnen auch rein nummerische Nummernkreise mit diesem „Framework“erstellt werden.
Allerdings sind die Nummernkreise im Dynamics AX Standard nicht ganz optimal bei derVerwendung von einem rein nummerischen Nummernkreisen. Dies f?ngt z.B. schon beimDatentyp an, der f?r das ID-Feld der Tabelle verwendet werden muss. Bedingt dadurch,dass ein Feld vom Typ „String“ verwendet werden muss, belegt dieses Feld unn?tig vielSpeicher in der Datenbank. Weiterhin gestalten sich Sortierungen, Rechenoperationen,etc. erheblich schwieriger. Diese Probleme k?nnen umgangen werden, wenn f?r das ID-Feld der Datentyp „Integer“oder „Int64“ verwendet wird. Leider kann nun nicht mehr das Nummernkreis-Frameworkdes Dynamics AX Standards verwendet werden, da dies den Datentyp „String“ f?r einID-Feld vorschreibt. Es muss also ein eigenes, kleines Nummernkreis-Framework oder ein eigener Nummernkreisgeschrieben werden, der die Verwendung des Datentyps „Integer“ f?r ID-Felder erm?glicht.Dies h?rt sich zuerst schwierig an, da Dinge wie fortlaufende Nummernvergabe oderdie Wiederverwendung von freien Nummern (L?chern im Nummernkreis) ber?cksichtigt werdensollten. Es ist aber ganz und gar nicht schwierig, eine eigene Nummernkreisfunktionalit?t zuerstellen. Das einzige was hierf?r ben?tigt wird ist eine entsprechen aufgebaute Select-Abfrage. Die n?chste Nummer eines Nummernkreises ist immer die zuletzt vergebenen Nummer (h?chste)+ 1. Aku_TestTablet1; ; select maxof(ID) from t1; return t1.ID + 1; Etwas schwieriger wird es, wenn auch die frei gewordenen Nummern des Nummernkreiseswieder vergeben/verwendet werden sollen. Dann muss immer die kleinste Id aus der Tabellegesucht werden, f?r die es keinen Datensatz in der Tabelle gibt. Gibt es kein "Nummernloch",muss die n?chst h?chste Nummer vergeben werden. Aku_TestTablet1; Aku_TestTable t2; ; select minof(ID) from t1 notexists join t2 where t2.ID == (t1.ID + 1); return t1.ID + 1; Um diese ein wenig zu verdeutlichen, kann eine beispielhafte Implementierung eineseigenen Nummernkreises in diesem Demoprojekt"SharedProject_AKU_OwnIntNumberSeq" angesehen und runter geladen werden. Es wird keine Haftung oder Gew?hrleistung auf die Richtigkeit der gemachten Angaben gegeben. Die Verwendung erfolgt auf eigene Gefahr. Copyright © Axel K?hn (Aku's AX Blog, http://blog.ak-home.net) and Mathias F??ler (jinx's AX Blog, http://starside.eu) More... |
|
|
|