Miklix

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

Објавено: 5 март 2025, во 19:54:48 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, индексот и вредноста на елементот честопати ќе бидат исти, но секако не секогаш .

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

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

Исто така, имајте на ум дека нумеричките вредности (и очигледно овие „индекси“) започнуваат на 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)));
}

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

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

Микел Банг Кристенсен

За авторот

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