Cara Mengulangi Elemen Enum dari Kode X++ di Dynamics AX 2012
Diterbitkan: 15 Februari 2025 pukul 23.10.37 UTC
Terakhir diperbarui: 12 Januari 2026 pukul 08.41.57 UTC
Artikel ini menjelaskan cara menghitung dan mengulang elemen-elemen dari enum dasar di Dynamics AX 2012, termasuk contoh kode X++.
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
Informasi dalam posting ini didasarkan pada Dynamics AX 2012 R3. Informasi ini mungkin berlaku atau mungkin tidak berlaku untuk versi lain.
Baru-baru ini saya membuat formulir yang perlu menampilkan nilai untuk setiap elemen dalam sebuah enum. Daripada membuat field secara manual (dan kemudian perlu memelihara formulir jika enum tersebut dimodifikasi), saya memutuskan untuk mengimplementasikannya secara dinamis sehingga field tersebut akan secara otomatis ditambahkan ke desain saat runtime.
Namun, saya segera menyadari bahwa melakukan iterasi atas nilai-nilai dalam enum, meskipun cukup mudah setelah Anda tahu caranya, agak membingungkan.
Anda jelas perlu memulai dengan kelas DictEnum. Seperti yang akan Anda lihat, kelas ini memiliki beberapa metode untuk mendapatkan informasi seperti nama dan label dari indeks dan nilai.
Perbedaan antara indeks dan nilai adalah bahwa indeks adalah nomor elemen dalam enum, jika elemen-elemen enum dinomori secara berurutan mulai dari nol, sedangkan nilai adalah properti "nilai" sebenarnya dari elemen tersebut. Karena sebagian besar enum memiliki nilai yang dinomori secara berurutan dari 0, indeks dan nilai suatu elemen seringkali sama, tetapi tentu saja tidak selalu.
Namun bagaimana Anda mengetahui nilai apa saja yang dimiliki sebuah enum? Di sinilah letak kebingungannya. Kelas DictEnum memiliki metode bernama values(). Anda mungkin mengharapkan metode ini mengembalikan daftar nilai enum, tetapi itu jelas terlalu mudah, jadi sebagai gantinya ia mengembalikan jumlah nilai yang dikandung enum. Namun, jumlah nilai tidak ada hubungannya dengan nilai sebenarnya, jadi Anda perlu menggunakan angka ini sebagai dasar untuk memanggil metode berbasis indeks, bukan metode berbasis nilai.
Seandainya mereka menamai metode ini indexes() saja, pasti akan lebih mudah dipahami ;-)
Perlu diingat juga bahwa nilai enum (dan tampaknya "indeks" ini) dimulai dari 0, tidak seperti indeks array dan kontainer di X++, yang dimulai dari 1, jadi untuk mengulang elemen dalam enum, Anda dapat melakukan sesuatu seperti ini:
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
Ini akan menampilkan simbol dan label dari setiap elemen dalam enum ke infolog.
Bacaan Lebih Lanjut
Jika Anda menikmati postingan ini, Anda mungkin juga menyukai saran berikut:
- Memanggil Layanan Dokumen AIF Langsung dari X++ di Dynamics AX 2012
- Mengidentifikasi Kelas Dokumen dan Kueri untuk Layanan AIF di Dynamics AX 2012
- Ringkasan Cepat Kerangka Kerja SysOperation Dynamics AX 2012
