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 است. ممکن است برای نسخه های دیگر معتبر باشد یا نباشد.

من اخیراً در حال ایجاد فرمی بودم که باید مقداری برای هر عنصر در یک enum نمایش دهد. به جای ایجاد دستی فیلدها (و سپس نیاز به حفظ فرم در صورتی که enum همیشه اصلاح شود)، تصمیم گرفتم آن را به صورت پویا پیاده سازی کنم تا در زمان اجرا به طور خودکار فیلدها را به طرح اضافه کند.

با این حال، من به زودی متوجه شدم که در واقع تکرار بیش از مقادیر در enum، در حالی که به اندازه کافی آسان است، هنگامی که شما چگونه می دانید، کمی گیج کننده است.

بدیهی است که باید با کلاس DictEnum شروع کنید. همانطور که خواهید دید، این کلاس چندین روش برای به دست آوردن اطلاعاتی مانند نام و برچسب از هر دو شاخص و مقدار دارد.

تفاوت بین index و مقدار در این است که index، عدد یک عنصر در enum است، اگر عناصر enum به ترتیب از صفر شماره گذاری شده باشند، در حالی که مقدار، ویژگی "ارزش" واقعی عنصر است. از آنجایی که اکثر enum ها دارای مقادیری هستند که به ترتیب از 0 شماره گذاری می شوند، شاخص و مقدار یک عنصر اغلب یکسان است، اما مطمئناً همیشه نیست.

اما چگونه می توان فهمید که یک enum دارای چه مقادیری است؟ اینجاست که گیج کننده می شود. کلاس DictEnum متدی به نام values() دارد. ممکن است انتظار داشته باشید که این روش لیستی از مقادیر enum را برگرداند، اما واضح است که بسیار آسان است، بنابراین در عوض تعداد مقادیر enum را برمی‌گرداند. با این حال، تعداد مقادیر هیچ ارتباطی با مقادیر واقعی ندارد، بنابراین باید از این عدد به عنوان مبنایی برای فراخوانی روش‌های مبتنی بر شاخص استفاده کنید، نه روش‌های مبتنی بر ارزش.

اگر فقط به جای آن نام این روش را indexes() گذاشته بودند، کمتر گیج کننده بود ;-)

همچنین به خاطر داشته باشید که مقادیر enum (و ظاهراً این «شاخص‌ها») از 0 شروع می‌شوند، برخلاف آرایه‌ها و فهرست‌های کانتینر در X++، که از 1 شروع می‌شوند، بنابراین برای حلقه زدن عناصر در enum می‌توانید کاری شبیه به این انجام دهید:

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

با این کار نماد و برچسب هر عنصر در enum به infolog ارسال می شود.

در Bluesky به اشتراک بگذاریددر فیسبوک به اشتراک بگذاریددر لینکدین به اشتراک بگذاریددر Tumblr به اشتراک بگذاریددر X به اشتراک بگذاریددر لینکدین به اشتراک بگذاریدپین در پینترست

میکل بنگ کریستنسن

درباره نویسنده

میکل بنگ کریستنسن
مایکل خالق و صاحب miklix.com است. او بیش از 20 سال تجربه به عنوان یک برنامه نویس حرفه ای کامپیوتر / توسعه دهنده نرم افزار دارد و در حال حاضر به طور تمام وقت برای یک شرکت بزرگ فناوری اطلاعات اروپایی مشغول به کار است. هنگامی که وبلاگ نویسی نمی کند، اوقات فراغت خود را صرف مجموعه وسیعی از علایق، سرگرمی ها و فعالیت ها می کند، که ممکن است تا حدی در موضوعات مختلف پوشش داده شده در این وب سایت منعکس شود.