Miklix

Jak iterować po elementach wyliczenia z kodu X++ w systemie Dynamics AX 2012

Opublikowano: 15 lutego 2025 23:10:52 UTC
Ostatnia aktualizacja: 12 stycznia 2026 08:42:03 UTC

W tym artykule wyjaśniono, jak wyliczać i wykonywać pętle na elementach wyliczenia bazowego w systemie Dynamics AX 2012, w tym przykład kodu X++.


Ta strona została przetłumaczona maszynowo z języka angielskiego, aby była dostępna dla jak największej liczby osób. Niestety, tłumaczenie maszynowe nie jest jeszcze dopracowaną technologią, więc mogą wystąpić błędy. Jeśli wolisz, możesz wyświetlić oryginalną angielską wersję tutaj:

How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012

Informacje zawarte w tym poście dotyczą systemu Dynamics AX 2012 R3. Mogą być lub nie być aktualne dla innych wersji.

Niedawno tworzyłem formularz, który musiał wyświetlać wartość dla każdego elementu wyliczenia. Zamiast ręcznie tworzyć pola (i następnie utrzymywać formularz w przypadku modyfikacji wyliczenia), zdecydowałem się na implementację dynamiczną, aby automatycznie dodawać pola do projektu w czasie wykonywania.

Jednak wkrótce odkryłem, że iterowanie po wartościach w wyliczeniu, choć dość proste, gdy już wiesz, jak to zrobić, jest nieco mylące.

Oczywiście musisz zacząć od klasy DictEnum. Jak zobaczysz, klasa ta oferuje kilka metod pobierania informacji, takich jak nazwa i etykieta, zarówno z indeksu, jak i wartości.

Różnica między indeksem a wartością polega na tym, że indeks to numer elementu w wyliczeniu, jeśli elementy wyliczenia były numerowane sekwencyjnie, zaczynając od zera, natomiast wartość to faktyczna właściwość „wartości” elementu. Ponieważ większość wyliczeń ma wartości numerowane sekwencyjnie od 0, indeks i wartość elementu często będą takie same, ale z pewnością nie zawsze.

Ale skąd wiadomo, jakie wartości ma wyliczenie? Tu właśnie pojawia się zamieszanie. Klasa DictEnum ma metodę o nazwie values(). Można by oczekiwać, że metoda ta zwróci listę wartości wyliczenia, ale to oczywiście byłoby zbyt proste, więc zamiast tego zwraca liczbę wartości zawartych w wyliczeniu. Jednak liczba wartości nie ma nic wspólnego z rzeczywistymi wartościami, więc należy użyć tej liczby jako podstawy do wywołania metod opartych na indeksach, a nie wartościach.

Gdyby tylko nazwali tę metodę indexes(), byłoby to mniej mylące ;-)

Należy również pamiętać, że wartości wyliczeniowe (i najwyraźniej te „indeksy”) zaczynają się od 0, w przeciwieństwie do indeksów tablic i kontenerów w X++, które zaczynają się od 1. Dlatego, aby przejść przez elementy wyliczenia, można napisać coś takiego:

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)));
}

Spowoduje to wyświetlenie symbolu i etykiety każdego elementu wyliczenia w infologu.

Dalsza lektura

Jeśli podobał Ci się ten wpis, mogą Cię zainteresować również poniższe sugestie:


Udostępnij na BlueskyUdostępnij na FacebookuUdostępnij na LinkedInUdostępnij na TumblrUdostępnij na XUdostępnij na LinkedInPrzypnij na Pintereście

Mikkel Christensen

O autorze

Mikkel Christensen
Mikkel jest twórcą i właścicielem miklix.com. Ma ponad 20-letnie doświadczenie jako profesjonalny programista komputerowy / programista oprogramowania i jest obecnie zatrudniony na pełny etat w dużej europejskiej korporacji IT. Kiedy nie bloguje, poświęca swój wolny czas na szeroki wachlarz zainteresowań, hobby i aktywności, co może w pewnym stopniu znaleźć odzwierciedlenie w różnorodności tematów poruszanych na tej stronie.