Miklix

Cara Mengulangkan Elemen Enum daripada Kod X++ dalam Dynamics AX 2012

Diterbitkan: 19 Mac 2025 pada 9:32:54 PTG UTC

Artikel ini menerangkan cara menghitung dan menggelungkan elemen enum asas dalam Dynamics AX 2012, termasuk contoh kod X++.


Halaman ini telah diterjemahkan mesin daripada bahasa Inggeris untuk menjadikannya boleh diakses oleh seramai mungkin orang. Malangnya, terjemahan mesin belum lagi merupakan teknologi yang sempurna, jadi ralat boleh berlaku. Jika anda mahu, anda boleh melihat versi bahasa Inggeris asal di sini:

How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012

Maklumat dalam catatan ini adalah berdasarkan Dynamics AX 2012 R3. Ia mungkin sah atau tidak sah untuk versi lain.

Saya baru-baru ini mencipta satu borang yang perlu memaparkan nilai untuk setiap elemen dalam enum. Daripada mencipta medan secara manual (dan kemudian perlu menyelenggara borang tersebut jika enum pernah diubah), saya memutuskan untuk melaksanakannya secara dinamik supaya ia akan menambah medan ke reka bentuk secara automatik semasa waktu operasi.

Namun, saya segera mendapati bahawa sebenarnya mengulangi nilai-nilai dalam enum, walaupun cukup mudah apabila anda tahu caranya, agak mengelirukan.

Anda jelas perlu bermula dengan kelas DictEnum. Seperti yang anda akan lihat, kelas ini mempunyai beberapa kaedah untuk mendapatkan maklumat seperti nama dan label daripada indeks dan nilai.

Perbezaan antara indeks dan nilai adalah bahawa indeks adalah nombor elemen dalam enum, jika elemen enum dinamakan secara berurutan bermula dari sifar, manakala nilai adalah sifat "nilai" sebenar elemen tersebut. Oleh kerana kebanyakan enum mempunyai nilai yang dinomborkan secara berurutan dari 0, indeks dan nilai bagi elemen akan selalunya sama, tetapi sudah pasti tidak sentiasa sama.

Tetapi bagaimana anda tahu nilai-nilai yang ada dalam enum? Di sinilah ia menjadi mengelirukan. Kelas DictEnum mempunyai kaedah yang dipanggil values(). Anda mungkin mengharapkan kaedah ini mengembalikan senarai nilai enum, tetapi itu sudah tentu terlalu mudah, jadi sebaliknya ia mengembalikan bilangan nilai yang terdapat dalam enum tersebut. Namun, bilangan nilai tidak ada kaitan dengan nilai sebenar, jadi anda perlu menggunakan nombor ini sebagai asas untuk memanggil kaedah berasaskan indeks, bukan yang berasaskan nilai.

Jika sahaja mereka menamakan kaedah ini indexes() sebaliknya, ia pasti akan kurang mengelirukan ;-)

Juga perlu diingat bahawa nilai enum (dan nampaknya "indeks" ini) bermula dari 0, berbeza dengan indeks array dan kontena dalam X++, yang bermula dari 1, jadi untuk mengulangi elemen dalam enum anda boleh lakukan sesuatu seperti ini:

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

Ini akan mengeluarkan simbol dan label bagi setiap elemen dalam enum ke infolog.

Kongsi di BlueskyKongsi di FacebookKongsi di LinkedInKongsi di TumblrKongsi di XKongsi di LinkedInSematkan pada Pinterest

Mikkel Christensen

Mengenai Pengarang

Mikkel Christensen
Mikkel ialah pencipta dan pemilik miklix.com. Beliau mempunyai lebih 20 tahun pengalaman sebagai pengaturcara komputer/pembangun perisian profesional dan kini bekerja sepenuh masa untuk sebuah syarikat IT Eropah yang besar. Apabila tidak menulis blog, dia menghabiskan masa lapangnya dengan pelbagai minat, hobi dan aktiviti, yang mungkin sedikit sebanyak dapat dilihat dalam pelbagai topik yang diliputi di laman web ini.