Dynamics AX 2012'de X++ Kodundan Bir Enumun Elemanları Üzerinde Yineleme Nasıl Yapılır
Yayınlandı: 15 Şubat 2025 23:11:00 UTC
Son güncelleme: 12 Ocak 2026 08:42:07 UTC
Bu makale, Dynamics AX 2012'de temel bir enum'un öğelerini nasıl numaralandıracağınızı ve bunlar üzerinde nasıl döngü kuracağınızı, bir X++ kod örneğiyle birlikte açıklamaktadır.
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
Bu yazıda yer alan bilgiler Dynamics AX 2012 R3'e dayanmaktadır. Diğer sürümler için geçerli olabilir veya olmayabilir.
Yakın zamanda, bir enum'daki her öğe için bir değer görüntülemesi gereken bir form oluşturuyordum. Alanları manuel olarak oluşturmak (ve daha sonra enum değiştirildiğinde formu yeniden düzenlemek) yerine, alanları çalışma zamanında otomatik olarak tasarıma ekleyecek şekilde dinamik olarak uygulamaya karar verdim.
Ancak, bir enum'daki değerler üzerinde yineleme yapmanın, nasıl yapılacağını bildikten sonra oldukça kolay olsa da, biraz kafa karıştırıcı olduğunu kısa sürede keşfettim.
Öncelikle DictEnum sınıfıyla başlamanız gerekiyor. Göreceğiniz gibi, bu sınıf, hem indeksten hem de değerden ad ve etiket gibi bilgileri elde etmek için çeşitli yöntemlere sahip.
İndeks ve değer arasındaki fark şudur: İndeks, bir enum'un elemanları sıfırdan başlayarak ardışık olarak numaralandırılmış olsaydı, elemanın numarasıdır; değer ise elemanın gerçek "değer" özelliğidir. Çoğu enum'un değerleri 0'dan başlayarak ardışık olarak numaralandırıldığından, bir elemanın indeksi ve değeri genellikle aynı olacaktır, ancak kesinlikle her zaman değil.
Peki bir enum'un hangi değerlere sahip olduğunu nasıl anlarsınız? İşte burada işler karışıyor. DictEnum sınıfının values() adında bir metodu var. Bu metodun enum'un değerlerinin bir listesini döndürmesini bekleyebilirsiniz, ancak bu açıkçası çok kolay olurdu, bu yüzden bunun yerine enum'un içerdiği değer sayısını döndürür. Ancak, değer sayısı gerçek değerlerle hiçbir ilgisi yoktur, bu nedenle bu sayıyı değer tabanlı metotları değil, indeks tabanlı metotları çağırmak için temel olarak kullanmanız gerekir.
Keşke bu metoda indexes() adını verselerdi, daha az kafa karıştırıcı olurdu ;-)
Ayrıca, X++'daki dizi ve kapsayıcı indekslerinin 1'den başlamasının aksine, enum değerlerinin (ve görünüşe göre bu "indekslerin") 0'dan başladığını da unutmayın; bu nedenle bir enum'daki öğeler üzerinde döngü yapmak için şöyle bir şey yapabilirsiniz:
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
Bu işlem, enum'daki her bir öğenin sembolünü ve etiketini bilgi günlüğüne yazdıracaktır.
Daha Fazla Okuma
Bu yazıyı beğendiyseniz, şu öneriler de ilginizi çekebilir:
- Dynamics AX 2012'de Bir Tüzel Kişiyi (Şirket Hesapları) Silme
- Dynamics AX 2012'de data() ve buf2Buf() Arasındaki Fark
- Dynamics AX 2012'de Tüm Ondalıklı Gerçek Sayıyı Dizeye Dönüştürme
