ڈائنامکس AX 2012 میں X++ کوڈ سے اینوم کے عناصر پر کیسے اعادہ کیا جائے
شائع شدہ: 15 فروری، 2025 کو 11:11:08 PM UTC
یہ مضمون بتاتا ہے کہ ڈائنامکس AX 2012 میں بیس اینوم کے عناصر کو کیسے گننا اور ان کو لوپ کرنا ہے، بشمول X++ کوڈ کی مثال۔
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
اس پوسٹ میں معلومات Dynamics AX 2012 R3 پر مبنی ہے۔ یہ دوسرے ورژن کے لیے درست ہو سکتا ہے یا نہیں۔
میں حال ہی میں ایک فارم بنا رہا تھا جس میں ایک اینوم میں ہر عنصر کے لیے ایک قدر ظاہر کرنے کی ضرورت تھی۔ دستی طور پر فیلڈز بنانے کے بجائے (اور پھر اگر enum میں کبھی ترمیم کی جاتی ہے تو فارم کو برقرار رکھنے کی ضرورت ہے)، میں نے اسے متحرک طور پر نافذ کرنے کا فیصلہ کیا تاکہ یہ رن ٹائم کے وقت خود بخود فیلڈز کو ڈیزائن میں شامل کر دے۔
تاہم، میں نے جلد ہی دریافت کیا کہ اصل میں ایک اینوم میں قدروں پر اعادہ کرنا، جب کہ ایک بار جب آپ جان لیں کہ یہ کافی آسان ہے تو تھوڑا سا الجھا ہوا ہے۔
آپ کو واضح طور پر DictEnum کلاس سے شروع کرنے کی ضرورت ہے۔ جیسا کہ آپ دیکھیں گے، اس کلاس میں انڈیکس اور ویلیو دونوں سے نام اور لیبل جیسی معلومات حاصل کرنے کے کئی طریقے ہیں۔
اشاریہ اور قدر کے درمیان فرق یہ ہے کہ اشاریہ enum میں ایک عنصر کا نمبر ہے، اگر enum کے عناصر کو صفر سے شروع کرتے ہوئے ترتیب وار نمبر دیا گیا تھا، جبکہ قدر عنصر کی اصل "قدر" کی خاصیت ہے۔ چونکہ زیادہ تر enums کی قدریں 0 سے ترتیب وار ہوتی ہیں، کسی عنصر کا اشاریہ اور قدر اکثر یکساں ہوں گے، لیکن یقینی طور پر ہمیشہ نہیں۔
لیکن آپ کیسے جانتے ہیں کہ اینوم کی کون سی اقدار ہیں؟ یہ وہ جگہ ہے جہاں یہ الجھ جاتا ہے۔ DictEnum کلاس کا ایک طریقہ ہے جسے اقدار () کہتے ہیں۔ آپ توقع کر سکتے ہیں کہ یہ طریقہ enum کی اقدار کی فہرست واپس کرے گا، لیکن یہ ظاہر ہے کہ بہت آسان ہو گا، لہذا اس کے بجائے یہ enum میں موجود اقدار کی تعداد واپس کرتا ہے۔ تاہم، قدروں کی تعداد کا اصل قدروں سے کوئی تعلق نہیں ہے، لہذا آپ کو اس نمبر کو انڈیکس پر مبنی طریقوں کو کال کرنے کی بنیاد کے طور پر استعمال کرنے کی ضرورت ہے، نہ کہ قدر پر مبنی طریقوں کو۔
کاش انہوں نے اس طریقہ کو indexes() کا نام دیا ہوتا تو یہ کم مبہم ہوتا ؛-)
یہ بھی ذہن میں رکھیں کہ enum اقدار (اور بظاہر یہ "اشاریہ جات") 0 سے شروع ہوتی ہیں، X++ میں سرنی اور کنٹینر اشاریہ جات کے برعکس، جو 1 سے شروع ہوتی ہیں، لہذا enum میں عناصر کو لوپ کرنے کے لیے آپ کچھ ایسا کر سکتے ہیں:
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
یہ اینوم میں موجود ہر عنصر کی علامت اور لیبل کو انفولوگ میں آؤٹ پٹ کرے گا۔