Како прећи преко елемената енума из Кс++ кода у Динамицс АКС 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, тако да бисте прешли преко елемената у енум-у могли да урадите нешто овако:
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
Ово ће приказати симбол и ознаку сваког елемента у енум-у у инфолог.