Dynamics AX 2012-də X++ Kodundan enumun elementləri üzərində iterasiya necə etmək olar?
Nəşr olundu: 15 fevral 2025 at 23:18:07 UTC
Son yeniləmə: 12 yanvar 2026 at 08:42:29 UTC
Bu məqalədə, X++ kod nümunəsi də daxil olmaqla, Dynamics AX 2012-də baza enumunun elementlərini necə saymaq və dövrələmək izah olunur.
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
Bu yazıdakı məlumat Dynamics AX 2012 R3-ə əsaslanır. Digər versiyalar üçün keçərli ola bilər və ya olmaya da bilər.
Bu yaxınlarda enumdakı hər bir element üçün bir dəyər göstərməli olan bir forma yaradırdım. Sahələri əl ilə yaratmaq (və enum dəyişdirilərsə, formanı saxlamaq lazım gəlməsi) əvəzinə, onu dinamik şəkildə tətbiq etməyə qərar verdim ki, iş zamanı sahələri dizayna avtomatik olaraq əlavə etsin.
Lakin, tezliklə kəşf etdim ki, enumdakı dəyərləri təkrarlamaq, necə edəcəyinizi bildikdən sonra kifayət qədər asan olsa da, bir az çaşdırıcıdır.
Əlbəttə ki, DictEnum sinfi ilə başlamalısınız. Gördüyünüz kimi, bu sinfin həm indeksdən, həm də dəyərdən ad və etiket kimi məlumatları əldə etmək üçün bir neçə üsulu var.
İndeks və dəyər arasındakı fərq ondadır ki, indeks elementlərin sayı sıfırdan başlayaraq ardıcıl olaraq nömrələndiyi təqdirdə sayımdakı elementin nömrəsidir, dəyər isə elementin faktiki "dəyər" xüsusiyyətidir. Əksər sayımlarda 0-dan başlayaraq ardıcıl olaraq nömrələnən dəyərlər olduğundan, elementin indeksi və dəyəri çox vaxt eyni olacaq, lakin əlbəttə ki, həmişə olmur.
Bəs enumun hansı dəyərlərə malik olduğunu necə bilirsiniz? Məhz burada qarışıqlıq yaranır. DictEnum sinfində values() adlı bir metod var. Bu metodun enumun dəyərlərinin siyahısını qaytarmasını gözləyə bilərsiniz, amma bu, açıq-aydın çox asan olardı, ona görə də enumun ehtiva etdiyi dəyərlərin sayını qaytarır. Lakin, dəyərlərin sayının faktiki dəyərlərlə heç bir əlaqəsi yoxdur, ona görə də bu rəqəmi dəyər əsaslı metodları deyil, indeks əsaslı metodları çağırmaq üçün əsas kimi istifadə etməlisiniz.
Kaş ki, bu metodu indexes() adlandırsaydılar, daha az qarışıq olardı ;-)
Həmçinin nəzərə alın ki, enum dəyərləri (və görünür, bu "indekslər") 0-dan başlayır, X++-dakı massiv və konteyner indeksləri isə 1-dən başlayır, ona görə də enumdakı elementlər üzərində dövrə vurmaq üçün belə bir şey edə bilərsiniz:
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
Bu, enumdakı hər bir elementin simvolunu və etiketini infloqa çıxaracaq.
Əlavə Oxu
Bu yazı xoşunuza gəldisə, bu təklifləri də bəyənə bilərsiniz:
- Dynamics AX 2012 SysOperation Framework Sürətli Baxış
- Dynamics AX 2012-də Macro və strFmt ilə String Formatting
- Dynamics AX 2012-də Hüquqi Şəxsi (Şirkət Hesabları) silin
