Cara Mengulangi Elemen Enum dari Kode X++ di Dynamics AX 2012
Diterbitkan: 15 Februari 2025 pukul 23.10.37 UTC
Artikel ini menjelaskan cara menghitung dan melakukan pengulangan elemen 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 berdasarkan Dynamics AX 2012 R3. Informasi ini mungkin berlaku atau tidak berlaku untuk versi lain.
Saya baru-baru ini membuat formulir yang perlu menampilkan nilai untuk setiap elemen dalam enum. Daripada membuat kolom secara manual (dan kemudian perlu mempertahankan formulir jika enum dimodifikasi), saya memutuskan untuk mengimplementasikannya secara dinamis sehingga secara otomatis akan menambahkan kolom ke desain saat dijalankan.
Namun, saya segera menyadari bahwa sebenarnya mengulangi nilai-nilai dalam enum, meskipun cukup mudah jika Anda tahu caranya, agak membingungkan.
Anda tentu perlu memulai dengan kelas DictEnum. Seperti yang akan Anda lihat, kelas ini memiliki beberapa metode untuk memperoleh informasi seperti nama dan label dari indeks dan nilai.
Perbedaan antara index dan value adalah bahwa index adalah nomor elemen dalam enum, jika elemen-elemen enum diberi nomor berurutan mulai dari nol, sedangkan value adalah properti "nilai" elemen yang sebenarnya. Karena sebagian besar enum memiliki nilai yang diberi nomor berurutan dari 0, index dan value elemen akan sering sama, tetapi tentu saja tidak selalu .
Namun, bagaimana Anda mengetahui nilai apa saja yang dimiliki enum? Di sinilah letak kebingungannya. Kelas DictEnum memiliki metode yang disebut values(). Anda mungkin berharap metode ini akan mengembalikan daftar nilai enum, tetapi itu jelas terlalu mudah, jadi metode ini malah mengembalikan jumlah nilai yang dimiliki 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.
Kalau saja mereka memberi nama metode ini indexes(), 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 setiap elemen dalam enum ke infolog.