Miklix

Како да се повторуваат над елементите на Enum од кодот X++ во Dynamics AX 2012

Објавено: 5 март 2025, во 19:54:48 UTC
Последно ажурирано: 12 јануари 2026, во 08:42:32 UTC

Оваа статија објаснува како да се набројат и да се повторуваат елементите на основното набројување во Dynamics AX 2012, вклучувајќи пример за X++ код.


Оваа страница беше машински преведена од англиски за да биде достапна за што повеќе луѓе. За жал, машинското преведување сè уште не е усовршена технологија, така што може да се појават грешки. Ако сакате, можете да ја видите оригиналната англиска верзија овде:

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

Информациите во овој пост се базираат на Dynamics AX 2012 R3. Можеби ќе важат, но и нема да важат за други верзии.

Неодамна креирав формулар кој требаше да прикаже вредност за секој елемент во енум. Наместо рачно да ги креирам полињата (а потоа да треба да ја одржувам формата доколку енумот некогаш се измени), решив да го имплементирам динамички, така што автоматски ќе ги додава полињата во дизајнот при извршување.

Сепак, наскоро открив дека итерирањето на вредностите во enum, иако доволно лесно откако ќе знаете како, е малку збунувачко.

Очигледно треба да започнете со класата DictEnum. Како што ќе видите, оваа класа има неколку методи за добивање информации како што се име и етикета и од индекс и од вредност.

Разликата помеѓу индекс и вредност е во тоа што индекс е бројот на елементот во енумот, ако елементите на енумот се нумерирани секвенцијално почнувајќи од нула, додека вредност е вистинското својство „вредност“ на елементот. Бидејќи повеќето енуми имаат вредности нумерирани секвенцијално од 0, индексот и вредноста на елементот честопати ќе бидат исти, но сигурно не секогаш.

Но, како да знаете кои вредности ги има еден enum? Тука станува збунувачко. Класата DictEnum има метод наречен values(). Можеби очекувате овој метод да врати листа на вредностите на enum-от, но тоа очигледно би било премногу лесно, па затоа наместо тоа го враќа бројот на вредности што ги содржи enum-от. Сепак, бројот на вредности нема никаква врска со вистинските вредности, па затоа треба да го користите овој број како основа за повикување на методите базирани на индекс, а не на оние базирани на вредности.

Само да го именуваа овој метод indexes(), ќе беше помалку збунувачки ;-)

Исто така, имајте предвид дека вредностите на enum (и очигледно овие „индекси“) почнуваат од 0, за разлика од индексите на низи и контејнери во X++, кои почнуваат од 1, па за да ги поминете елементите во enum, можете да направите нешто вака:

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

Ова ќе го прикаже симболот и ознаката на секој елемент во енумирањето во инфологот.

Дополнително читање

Ако ви се допадна овој пост, можеби ќе ви се допаднат и овие предлози:


Споделете на BlueskyСподелете на ФејсбукСподелете на LinkedInСподелете на TumblrСподелете на XСподелете на LinkedInЗакачи на Pinterest

Микел Кристенсен

За авторот

Микел Кристенсен
Микел е креатор и сопственик на miklix.com. Тој има над 20 години искуство како професионален компјутерски програмер/развивач на софтвер и моментално е вработен со полно работно време во голема европска ИТ корпорација. Кога не пишува блог, тој го поминува своето слободно време на широк спектар на интереси, хоби и активности, кои до одреден степен може да се рефлектираат во разновидните теми опфатени на оваа веб-локација.