Miklix

Како прећи преко елемената енума из Кс++ кода у Динамицс АКС 2012

Објављено: 15. фебруар 2025. 23:18:06 UTC
Последње ажурирано: 12. јануар 2026. 08:42:29 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. Могу, али и не морају бити важеће за друге верзије.

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

Међутим, убрзо сам открио да је заправо итерирање кроз вредности у набрајању, иако довољно лако када знате како, помало збуњујуће.

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

Разлика између индекса и вредности је у томе што је индекс број елемента у набрајању, ако су елементи набрајања нумерисани секвенцијално почевши од нуле, док је вредност стварно својство елемента „вредност“. Пошто већина набрајања има вредности нумерисане секвенцијално од 0, индекс и вредност елемента ће често бити исти, али свакако не увек.

Али како знате које вредности има енум? Ту постаје збуњујуће. Класа DictEnum има методу под називом values(). Можда бисте очекивали да ова метода врати листу вредности енума, али то би очигледно било превише лако, па уместо тога враћа број вредности које енум садржи. Међутим, број вредности нема никакве везе са стварним вредностима, тако да морате да користите овај број као основу за позивање метода заснованих на индексима, а не оних заснованих на вредностима.

Да су само ову методу уместо тога назвали indexes(), било би мање збуњујуће ;-)

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

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

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

Даље читање

Ако сте уживали у овом посту, можда ће вам се свидети и ови предлози:


Поделите на БлуескиПоделите на ФејсбукуДелите на ЛинкедИнуПодели на Тумблр-уПодели на КсДелите на ЛинкедИнуПин на Пинтерест-у

Миккел Цхристенсен

О аутору

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