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
In diesem Artikel wird das Aufzählen und Durchlaufen der Elemente einer Basisaufzählung in Dynamics AX 2012 erläutert (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. Sie sind möglicherweise auch für andere Versionen gültig, müssen es aber nicht.
Ich habe vor Kurzem ein Formular erstellt, das für jedes Element in einer Aufzählung einen Wert anzeigen musste. Anstatt die Felder manuell zu erstellen (und dann das Formular pflegen zu müssen, wenn die Aufzählung jemals geändert wird), habe ich mich für eine dynamische Implementierung entschieden, sodass die Felder zur Laufzeit automatisch zum Entwurf hinzugefügt werden.
Ich habe jedoch bald festgestellt, dass das tatsächliche Iterieren über die Werte in einer Aufzählung zwar recht einfach ist, wenn man einmal weiß, wie es geht, aber etwas verwirrend ist.
Sie müssen offensichtlich mit der Klasse DictEnum beginnen. Wie Sie sehen werden, verfügt diese Klasse über mehrere Methoden zum Abrufen von Informationen wie Name und Bezeichnung sowohl aus Index als auch aus Wert.
Der Unterschied zwischen Index und Wert besteht darin, dass der Index die Nummer eines Elements in der Aufzählung ist, wenn die Elemente der Aufzählung fortlaufend beginnend bei Null nummeriert wurden, während der Wert die eigentliche „Wert“-Eigenschaft des Elements ist. Da die meisten Aufzählungen Werte haben, die fortlaufend ab 0 nummeriert sind, sind Index und Wert eines Elements oft gleich, aber sicher nicht immer .
Aber woher wissen Sie, welche Werte ein Enum hat? Hier wird es verwirrend. Die Klasse DictEnum hat eine Methode namens values(). Sie erwarten vielleicht, dass diese Methode eine Liste der Werte des Enums zurückgibt, aber das wäre offensichtlich zu einfach, also gibt sie stattdessen die Anzahl der Werte zurück, die das Enum enthält. Die Anzahl der Werte hat jedoch nichts mit den tatsächlichen Werten zu tun, daher müssen Sie diese Zahl als Grundlage für den Aufruf der indexbasierten Methoden verwenden, nicht der wertbasierten.
Wenn sie diese Methode stattdessen nur indexes() genannt hätten, wäre es weniger verwirrend gewesen ;-)
Bedenken Sie auch, dass Enumerationswerte (und anscheinend diese „Indizes“) bei 0 beginnen, im Gegensatz zu Array- und Container-Indizes in X++, die bei 1 beginnen. Um also eine Schleife über die Elemente in einer Enumeration durchzuführen, könnten Sie etwa 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 in der Aufzählung an das Infolog ausgegeben.