Miklix

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

Објављено: 15. фебруар 2025. 23:18:06 UTC

Овај чланак објашњава како да набројите и пређете преко елемената основног енума у ​​Динамицс АКС 2012, укључујући пример Кс++ кода.


Ова страница је машински преведена са енглеског како би била доступна што већем броју људи. Нажалост, машинско превођење још увек није усавршена технологија, тако да може доћи до грешака. Ако желите, можете погледати оригиналну енглеску верзију овде:

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

Информације у овом посту су засноване на Динамицс АКС 2012 Р3. Може, али и не мора бити важеће за друге верзије.

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

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

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

Разлика између индекса и вредности је у томе што је индекс број елемента у енум-у, ако су елементи набрајања нумерисани узастопно почевши од нуле, док је вредност стварна особина "вредности" елемента. Како већина набрајања има вредности нумерисане узастопно од 0, индекс и вредност елемента ће често бити исти, али свакако не увек .

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

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

Такође имајте на уму да вредности набрајања (и очигледно ови „индекси“) почињу од 0, за разлику од индекса низа и контејнера у Кс++, који почињу од 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 година искуства као професионални компјутерски програмер/програмер софтвера и тренутно је запослен са пуним радним временом у великој европској ИТ корпорацији. Када не пише блог, своје слободно време проводи на широком спектру интересовања, хобија и активности, што се у извесној мери може одразити на разноврсност тема обрађених на овој веб страници.