Miklix

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).


Diese Seite wurde maschinell aus dem Englischen übersetzt, um sie so vielen Menschen wie möglich zugänglich zu machen. Leider ist die maschinelle Übersetzung noch keine ausgereifte Technologie, so dass Fehler auftreten können. Wenn Sie es vorziehen, können Sie sich die englische Originalversion hier ansehen:

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:

DictEnum dictEnum = new DictEnum(enumNum(SalesStatus));
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.

Teilen auf BlueskyAuf Facebook teilenAuf LinkedIn teilenAuf Tumblr teilenTeilen auf XAuf LinkedIn teilenPin auf Pinterest

Mikkel Bang Christensen

Über den Autor

Mikkel Bang Christensen
Mikkel ist der Schöpfer und Eigentümer von miklix.com. Er verfügt über mehr als 20 Jahre Erfahrung als professioneller Computerprogrammierer/Softwareentwickler und ist derzeit in Vollzeit für ein großes europäisches IT-Unternehmen tätig. Wenn er nicht gerade bloggt, verbringt er seine Freizeit mit einer Vielzahl von Interessen, Hobbys und Aktivitäten, was sich bis zu einem gewissen Grad in der Vielfalt der auf dieser Website behandelten Themen widerspiegelt.