Miklix

كيفية تكرار عناصر 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، لذا للتكرار على العناصر في التعداد، يمكنك القيام بشيء كهذا:

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

سيؤدي هذا إلى إخراج رمز وتسمية كل عنصر في التعداد إلى سجل المعلومات.

قراءات إضافية

إذا أعجبك هذا المنشور، فقد تعجبك أيضًا هذه الاقتراحات:


شارك على بلوسكايشارك على الفيسبوكشارك على لينكدإنشارك على تمبلرشارك على إكسشارك على لينكدإنثبت على بينتريست

ميكيل كريستنسن

عن المؤلف

ميكيل كريستنسن
ميكيل هو مؤسس ومالك موقع miklix.com. يتمتع بخبرة تزيد عن 20 عامًا كمبرمج كمبيوتر/مطور برامج محترف ويعمل حاليًا بدوام كامل في إحدى شركات تكنولوجيا المعلومات الأوروبية الكبرى. عندما لا يقوم بالتدوين، يقضي وقت فراغه في مجموعة واسعة من الاهتمامات والهوايات والأنشطة، والتي قد تنعكس إلى حد ما في تنوع الموضوعات التي يغطيها هذا الموقع.