Miklix

كيفية تكرار عناصر Enum من كود X++ في Dynamics AX 2012

نُشرت: ١٥ فبراير ٢٠٢٥ م في ١١:٠٩:٥٥ م 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. وكما سترى، تحتوي هذه الفئة على عدة طرق للحصول على معلومات مثل الاسم والتسمية من كل من الفهرس والقيمة.

الفرق بين الفهرس والقيمة هو أن الفهرس هو رقم العنصر في التعداد، إذا تم ترقيم عناصر التعداد بشكل متسلسل بدءًا من الصفر، بينما القيمة هي خاصية "القيمة" الفعلية للعنصر. نظرًا لأن معظم التعدادات لها قيم مرقمة بشكل متسلسل من 0، فإن الفهرس وقيمة العنصر سيكونان متماثلين غالبًا ، ولكن بالتأكيد ليس دائمًا .

ولكن كيف تعرف القيم التي يحتوي عليها التعداد؟ هنا يصبح الأمر مربكًا. تحتوي فئة 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 عامًا كمبرمج كمبيوتر/مطور برامج محترف ويعمل حاليًا بدوام كامل في إحدى شركات تكنولوجيا المعلومات الأوروبية الكبرى. عندما لا يقوم بالتدوين، يقضي وقت فراغه في مجموعة واسعة من الاهتمامات والهوايات والأنشطة، والتي قد تنعكس إلى حد ما في تنوع الموضوعات التي يغطيها هذا الموقع.