كيفية تكرار عناصر Enum من كود X++ في Dynamics AX 2012
نُشرت: ١٥ فبراير ٢٠٢٥ م في ١١:٠٩:٥٥ م UTC
آخر تحديث: ١٢ يناير ٢٠٢٦ م في ٨:٤١:٥١ ص UTC
تشرح هذه المقالة كيفية تعداد عناصر التعداد الأساسي والتكرار عليها في Dynamics AX 2012، بما في ذلك مثال على كود X++.
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
تستند المعلومات الواردة في هذا المنشور إلى Dynamics AX 2012 R3. وقد تكون صالحة أو غير صالحة للإصدارات الأخرى.
كنتُ مؤخراً بصدد إنشاء نموذج يتطلب عرض قيمة لكل عنصر في تعداد. وبدلاً من إنشاء الحقول يدوياً (ثم الحاجة إلى صيانة النموذج في حال تعديل التعداد)، قررتُ تنفيذه ديناميكياً بحيث يُضاف الحقل تلقائياً إلى التصميم أثناء التشغيل.
ومع ذلك، سرعان ما اكتشفت أن التكرار الفعلي للقيم في تعداد، على الرغم من سهولته بمجرد معرفة كيفية القيام بذلك، إلا أنه أمر مربك بعض الشيء.
من الواضح أنك بحاجة للبدء بفئة DictEnum. كما سترى، تحتوي هذه الفئة على عدة طرق للحصول على معلومات مثل الاسم والتسمية من كل من الفهرس والقيمة.
الفرق بين الفهرس والقيمة هو أن الفهرس هو رقم العنصر في التعداد، إذا كانت عناصر التعداد مرقمة تسلسليًا بدءًا من الصفر، بينما القيمة هي خاصية "القيمة" الفعلية للعنصر. وبما أن معظم التعدادات لها قيم مرقمة تسلسليًا من الصفر، فغالبًا ما يكون الفهرس والقيمة متطابقين، ولكن ليس دائمًا.
لكن كيف تعرف القيم التي يحتويها تعداد؟ هنا يكمن الالتباس. تحتوي فئة DictEnum على دالة تُسمى values(). قد تتوقع أن تُعيد هذه الدالة قائمة بقيم التعداد، لكن هذا سيكون سهلاً للغاية، لذا فهي تُعيد عدد القيم التي يحتويها التعداد. مع ذلك، لا علاقة لعدد القيم بالقيم الفعلية، لذا عليك استخدام هذا العدد كأساس لاستدعاء الدوال التي تعتمد على الفهرس، وليس الدوال التي تعتمد على القيمة.
لو أنهم سمّوا هذه الطريقة indexes() بدلاً من ذلك، لكان الأمر أقل إرباكاً ;-)
ضع في اعتبارك أيضًا أن قيم التعداد (وهذه "الفهارس" على ما يبدو) تبدأ من 0، على عكس فهارس المصفوفات والحاويات في X++، والتي تبدأ من 1، لذا للتكرار على العناصر في التعداد، يمكنك القيام بشيء كهذا:
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
سيؤدي هذا إلى إخراج رمز وتسمية كل عنصر في التعداد إلى سجل المعلومات.
قراءات إضافية
إذا أعجبك هذا المنشور، فقد تعجبك أيضًا هذه الاقتراحات:
- استخدام استعلام في فئة عقد بيانات SysOperation في Dynamics AX 2012
- الفرق بين data() وbuf2Buf() في Dynamics AX 2012
- تنسيق السلسلة باستخدام الماكرو وstrFmt في Dynamics AX 2012
