Miklix

نحوه تکرار بر روی عناصر Enum از کد X++ در Dynamics AX 2012

منتشر شده: ۱۵ فوریهٔ ۲۰۲۵ ساعت ۲۳:۱۱:۱۱ (UTC)
آخرین به روز رسانی: ۱۲ ژانویهٔ ۲۰۲۶ ساعت ۸:۴۲:۱۲ (UTC)

این مقاله نحوه شمارش و پیمایش عناصر یک enum پایه در 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 شروع کنید. همانطور که خواهید دید، این کلاس چندین متد برای دریافت اطلاعاتی مانند نام و برچسب از هر دو اندیس و مقدار دارد.

تفاوت بین اندیس و مقدار این است که اندیس شماره یک عنصر در 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 سال تجربه به عنوان یک برنامه نویس حرفه ای کامپیوتر / توسعه دهنده نرم افزار دارد و در حال حاضر به طور تمام وقت برای یک شرکت بزرگ فناوری اطلاعات اروپایی مشغول به کار است. هنگامی که وبلاگ نویسی نمی کند، اوقات فراغت خود را صرف مجموعه وسیعی از علایق، سرگرمی ها و فعالیت ها می کند، که ممکن است تا حدی در موضوعات مختلف پوشش داده شده در این وب سایت منعکس شود.