Miklix

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

Ky artikull shpjegon se si të numërohen dhe të lakohen mbi elementet e një enum bazë në Dynamics AX 2012, duke përfshirë një shembull kodi X++.


Kjo faqe u përkthye me makinë nga anglishtja për ta bërë të aksesueshme për sa më shumë njerëz. Fatkeqësisht, përkthimi me makinë nuk është ende një teknologji e përsosur, kështu që mund të ndodhin gabime. Nëse preferoni, mund ta shikoni versionin origjinal në anglisht këtu:

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 e vlefshme për versione të tjera.

Kohët e fundit po krijoja një formë që duhej të shfaqte një vlerë për çdo element në një numër. Në vend që të krijoja manualisht fushat (dhe pastaj të kisha nevojë të mbaja formën nëse enum është modifikuar ndonjëherë), vendosa ta zbatoj atë në mënyrë dinamike në mënyrë që ai të shtonte automatikisht fushat në dizajn në kohën e vrapimit.

Megjithatë, shpejt zbulova se në të vërtetë itterating mbi vlerat në një enum, ndërsa mjaft e lehtë sapo ju e dini se si, është pak konfuze.

Duket qartë se duhet të fillosh me klasën DictEnum. Siç do ta shihni, kjo klasë ka disa metoda për marrjen e informacionit si emri dhe etiketa si nga indeksi ashtu edhe nga vlera.

Dallimi midis indeksit dhe vlerës është se indeksi është një numër elementi në enum, nëse elementet e enumit janë numëruar në mënyrë sekuenciale duke filluar nga zero, ndërsa vlera është vetia aktuale e elementit "vlera". Pasi 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ë enum? Këtu bëhet konfuze. Klasa DictEnum ka një metodë të quajtur vlera(). Ju mund të prisni që kjo metodë të kthejë një listë të vlerave të enumit, 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 enum. Megjithatë, numri i vlerave nuk ka të bëjë fare me vlerat aktuale, prandaj ju duhet ta përdorni këtë numër si bazë për thirrjen e metodave të bazuara në indeks, jo ato të bazuara në vlerë.

Sikur vetëm ata ta kishin emëruar këtë metodë indekse() në vend të kësaj, do të kishte qenë më pak konfuze ;-)

Gjithashtu kini parasysh se vlerat enum (dhe me sa duket këto "indekse") fillojnë në 0, ndryshe nga indekset e array dhe container në X++, të cilat fillojnë nga 1, kështu që për të loop mbi elementet në një enum ju mund të bëni diçka të tillë:

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)));
}

Kjo do të nxjerrë simbolin dhe etiketën e çdo elementi në enum në infolog.

Shpërndaje në BlueskyShpërndaje në FacebookNdani në LinkedInShpërndaje në TumblrShpërndaje në XNdani në LinkedInPin në Pinterest

Mikkel Bang Christensen

Rreth Autorit

Mikkel Bang Christensen
Mikkel është krijuesi dhe pronari i miklix.com. Ai ka mbi 20 vjet përvojë si programues profesional kompjuteri/zhvillues softuerësh dhe aktualisht është i punësuar me kohë të plotë për një korporatë të madhe evropiane IT. Kur nuk bën blog, ai e kalon kohën e lirë në një gamë të gjerë interesash, hobish dhe aktivitetesh, të cilat mund të reflektohen në një farë mase në shumëllojshmërinë e temave të mbuluara në këtë faqe interneti.