Miklix

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

Opublikowano: 15 lutego 2025 23:10:52 UTC

W tym artykule wyjaśniono, jak wyliczać i pętliwać elementy 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ć ważne dla innych wersji.

Ostatnio tworzyłem formularz, który musiał wyświetlać wartość dla każdego elementu w wyliczeniu. Zamiast ręcznie tworzyć pola (i następnie utrzymywać formularz, jeśli wyliczenie zostanie kiedykolwiek zmodyfikowane), postanowiłem wdrożyć go dynamicznie, aby automatycznie dodawał pola do projektu w czasie wykonywania.

Jednak szybko odkryłem, że iterowanie po wartościach w wyliczeniach, choć dość proste, gdy już się wie, jak to zrobić, jest nieco mylące.

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

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

Ale skąd wiesz, jakie wartości ma wyliczenie? Tutaj zaczyna się robić niejasno. Klasa DictEnum ma metodę o nazwie values(). Można by się spodziewać, że ta metoda zwróci listę wartości wyliczenia, ale byłoby to oczywiście 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 indeksie, 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.

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

Mikkel Bang Christensen

O autorze

Mikkel Bang 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.