So iterieren Sie über die Elemente einer Enumeration aus X++-Code in Dynamics AX 2012
Veröffentlicht: 15. Februar 2025 um 23:10:04 UTC
Zuletzt aktualisiert: 12. Januar 2026 um 08:41:54 UTC
Dieser Artikel erklärt, wie man die Elemente einer Basis-Enumeration in Dynamics AX 2012 aufzählt und durchläuft, einschließlich eines X++-Codebeispiels.
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
Die Informationen in diesem Beitrag basieren auf Dynamics AX 2012 R3. Ob sie auch für andere Versionen gelten, ist ungewiss.
Ich habe kürzlich ein Formular erstellt, das für jedes Element einer Aufzählung einen Wert anzeigen sollte. Anstatt die Felder manuell zu erstellen (und das Formular anschließend bei Änderungen der Aufzählung aktualisieren zu müssen), habe ich mich für eine dynamische Implementierung entschieden, sodass die Felder zur Laufzeit automatisch zum Design hinzugefügt werden.
Ich stellte jedoch bald fest, dass das tatsächliche Durchlaufen der Werte in einem Enum zwar recht einfach ist, sobald man weiß, wie es geht, aber doch etwas verwirrend sein kann.
Sie müssen offensichtlich mit der Klasse DictEnum beginnen. Wie Sie sehen werden, verfügt diese Klasse über mehrere Methoden, um Informationen wie Name und Bezeichnung sowohl über Index als auch über Wert zu erhalten.
Der Unterschied zwischen Index und Wert besteht darin, dass der Index die Nummer eines Elements innerhalb des Enums angibt, sofern die Elemente fortlaufend ab null nummeriert sind, während der Wert die eigentliche „Wert“-Eigenschaft des Elements darstellt. Da die meisten Enums fortlaufend ab 0 nummerierte Werte verwenden, sind Index und Wert eines Elements oft identisch, aber nicht immer.
Aber woher weiß man, welche Werte ein Enum hat? Hier wird es kompliziert. Die Klasse `DictEnum` besitzt eine Methode namens `values()`. Man könnte erwarten, dass diese Methode eine Liste der Enum-Werte zurückgibt, aber das wäre natürlich zu einfach. Stattdessen gibt sie die Anzahl der enthaltenen Werte zurück. Diese Anzahl hat jedoch nichts mit den tatsächlichen Werten zu tun. Daher muss man diese Zahl als Grundlage für den Aufruf indexbasierter Methoden verwenden, nicht für wertbasierte.
Wenn sie diese Methode doch nur indexes() genannt hätten, wäre es weniger verwirrend gewesen ;-)
Beachten Sie außerdem, dass Enum-Werte (und anscheinend auch diese „Indizes“) im Gegensatz zu Array- und Container-Indizes in X++ bei 0 beginnen, die bei 1 beginnen. Um die Elemente eines Enums zu durchlaufen, könnten Sie beispielsweise Folgendes tun:
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
Dadurch werden das Symbol und die Bezeichnung jedes Elements im Enum im Infolog ausgegeben.
Weitere Informationen
Wenn Ihnen dieser Beitrag gefallen hat, könnten Ihnen auch diese Vorschläge gefallen:
- Löschen einer juristischen Person (Unternehmenskonten) in Dynamics AX 2012
- Dynamics AX 2012 SysOperation Framework - Kurzübersicht
- Stringformatierung mit Makro und strFmt in Dynamics AX 2012
