Miklix

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.


Bu sayfa, mümkün olduğunca çok kişi tarafından erişilebilir olması amacıyla İngilizce'den makine çevirisiyle çevrilmiştir. Ne yazık ki, makine çevirisi henüz mükemmelleştirilmiş bir teknoloji değildir, bu nedenle hatalar meydana gelebilir. Tercih ederseniz, orijinal İngilizce versiyonu buradan görüntüleyebilirsiniz:

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:

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

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:


Bluesky'de paylaşFacebook'ta paylaşLinkedIn'de paylaşTumblr'da paylaşX'te paylaşLinkedIn'de paylaşPinterest'e Pinleyin

Mikkel Christensen

Yazar Hakkında

Mikkel Christensen
Mikkel miklix.com'un yaratıcısı ve sahibidir. Profesyonel bilgisayar programcısı/yazılım geliştiricisi olarak 20 yılı aşkın deneyime sahiptir ve şu anda büyük bir Avrupa BT şirketinde tam zamanlı olarak çalışmaktadır. Blog yazmadığı zamanlarda, boş zamanlarını çok çeşitli ilgi alanları, hobiler ve aktivitelerle geçirmektedir ve bu da bir dereceye kadar bu web sitesinde kapsanan konuların çeşitliliğine yansıyabilir.