Paano Ulitin ang Mga Elemento ng isang Enum mula sa X++ Code sa Dynamics AX 2012
Nai-publish: Marso 19, 2025 nang 9:32:59 PM UTC
Ipinapaliwanag ng artikulong ito kung paano magbilang at mag-loop sa mga elemento ng isang base enum sa Dynamics AX 2012, kabilang ang isang halimbawa ng X++ code.
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
Ang impormasyong nasa post na ito ay batay sa Dynamics AX 2012 R3. Maaaring hindi ito angkop sa iba pang mga bersyon.
Kamakailan lang ay gumagawa ako ng isang form na kailangang magpakita ng halaga para sa bawat elemento sa isang enum. Imbes na mano-manong gumawa ng mga field (at pagkatapos ay kailangang i-maintain ang form kung sakaling mabago ang enum), napagpasyahan kong ipatupad ito nang dinamiko upang awtomatikong idagdag ang mga field sa disenyo sa oras ng pagpapatakbo.
Gayunpaman, agad kong natuklasan na ang aktwal na pag-ikot sa mga halaga ng isang enum, kahit madali lang kung alam mo kung paano, ay medyo nakakalito.
Obviously, kailangan mong magsimula sa klase ng DictEnum. Gaya ng makikita mo, ang klase na ito ay may ilang mga pamamaraan para makuha ang impormasyon tulad ng pangalan at label mula sa parehong index at value.
Ang pagkakaiba ng index at value ay ang index ay ang bilang ng isang elemento sa enum, kung ang mga elemento ng enum ay pinagmulan ng sunod-sunod na bilang mula sa zero, habang ang value ay ang aktwal na "value" na katangian ng elemento. Dahil ang karamihan sa mga enum ay may mga halaga na pinagmulan ng sunod-sunod mula 0, ang index at value ng isang elemento ay karaniwan na pareho, ngunit tiyak na hindi palaging.
Paano mo naman malalaman kung anu-anong mga halaga ang mayroon ang enum? Dito nagiging nakakalito. Ang klase ng DictEnum ay may pamamaraan na tinatawag na values(). Maaaring inaasahan mong magbalik ang pamamaraang ito ng isang listahan ng mga halaga ng enum, ngunit tiyak na magiging masyadong madali iyon, kaya sa halip ay ibabalik nito ang bilang ng mga halaga na mayroon ang enum. Gayunpaman, ang bilang ng mga halaga ay wala namang kinalaman sa aktwal na mga halaga, kaya kailangan mong gamitin ang bilang na ito bilang basehan sa pagtawag ng mga pamamaraan na nakabase sa index, hindi sa mga nakabase sa value.
Kung sana, tinawag nilang indexes() na lang ang pamamaraang ito, magiging mas kaunti ang kalituhan ;-)
Isipin din na ang mga halaga ng enum (at tila ang mga "index" na ito) ay nagsisimula sa 0, hindi katulad ng mga index ng array at container sa X++, na nagsisimula sa 1, kaya upang mag-loop sa mga elemento ng isang enum, maaari mong gawin ang ganitong bagay:
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
Ito ay maglalabas ng simbolo at label ng bawat elemento sa enum sa infolog.