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