Si të iterate mbi elementet e një Enum nga X++ Code në Dynamics AX 2012
Publikuar: 15 shkurt 2025 në 11:11:22 e pasdites, UTC
Përditësimi i fundit: 12 janar 2026 në 8:42:22 e paradites, UTC
Ky artikull shpjegon se si të numërohen dhe të përsëriten elementët e një numërimi bazë në Dynamics AX 2012, duke përfshirë një shembull kodi X++.
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
Informacioni në këtë postim bazohet në Dynamics AX 2012 R3. Mund të jetë ose jo i vlefshëm për versione të tjera.
Kohët e fundit po krijoja një formular që duhej të shfaqte një vlerë për secilin element në një numërim. Në vend që të krijoja fushat manualisht (dhe pastaj të kisha nevojë ta mirëmbaja formularin nëse numërimi modifikohej ndonjëherë), vendosa ta zbatoja atë në mënyrë dinamike në mënyrë që të shtonte automatikisht fushat në dizajn në kohën e ekzekutimit.
Megjithatë, shpejt zbulova se përsëritja e vlerave në një numërim, ndonëse mjaft e lehtë pasi të dish si, është paksa konfuze.
Sigurisht që duhet të filloni me klasën DictEnum. Siç do ta shihni, kjo klasë ka disa metoda për të marrë informacione të tilla si emri dhe etiketa nga indeksi dhe vlera.
Dallimi midis indeksit dhe vlerës është se indeksi është numri i një elementi në enum, nëse elementët e enumit numëroheshin në mënyrë sekuenciale duke filluar nga zero, ndërsa vlera është vetia aktuale "vlerë" e elementit. Meqenëse shumica e enumeve kanë vlera të numëruara në mënyrë sekuenciale nga 0, indeksi dhe vlera e një elementi shpesh do të jenë të njëjta, por sigurisht jo gjithmonë.
Por si e dini se cilat vlera ka një numërim? Këtu bëhet konfuze. Klasa DictEnum ka një metodë të quajtur values(). Mund të prisni që kjo metodë të kthejë një listë të vlerave të numërimit, por kjo padyshim do të ishte shumë e lehtë, kështu që në vend të kësaj ajo kthen numrin e vlerave që përmban numërimi. Megjithatë, numri i vlerave nuk ka asnjë lidhje me vlerat aktuale, kështu që duhet ta përdorni këtë numër si bazë për të thirrur metodat e bazuara në indeks, jo ato të bazuara në vlera.
Sikur ta kishin emëruar këtë metodë indexes(), do të kishte qenë më pak konfuze ;-)
Gjithashtu mbani mend se vlerat e enum-it (dhe me sa duket këto "indekse") fillojnë nga 0, ndryshe nga indekset e vargjeve dhe kontejnerëve në X++, të cilët fillojnë nga 1, kështu që për të kaluar nëpër elementët në një enum mund të bëni diçka të tillë:
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
Kjo do të nxjerrë simbolin dhe etiketën e secilit element në enum në infolog.
Lexime të mëtejshme
Nëse ju pëlqeu ky postim, mund t'ju pëlqejnë edhe këto sugjerime:
- Duke përdorur kornizën SysExtension për të gjetur se cila nënklasë do të instantiate në Dynamics AX 2012
- Identifikimi i klasës së dokumentit dhe pyetjes për shërbimin AIF në Dynamics AX 2012
- Thirrja e Shërbimeve të Dokumenteve AIF direkt nga X++ në Dynamics AX 2012
