Miklix

قالب بندی رشته با ماکرو و strFmt در Dynamics AX 2012

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

این مقاله برخی از رفتارهای عجیب و غریب در Dynamics AX 2012 هنگام استفاده از یک ماکرو به عنوان رشته فرمت در strFmt و همچنین مثال‌هایی در مورد چگونگی حل آن را شرح می‌دهد.


این صفحه ماشینی از انگلیسی ترجمه شد تا در دسترس هر چه بیشتر مردم باشد. متأسفانه، ترجمه ماشینی هنوز یک فناوری کامل نشده است، بنابراین ممکن است خطاهایی رخ دهد. در صورت تمایل می توانید نسخه اصلی انگلیسی را در اینجا مشاهده کنید:

String Formatting with Macro and strFmt in Dynamics AX 2012

اطلاعات موجود در این پست بر اساس Dynamics AX 2012 R3 است. ممکن است برای نسخه‌های دیگر معتبر باشد یا نباشد.

من اخیراً با مشکلی در تابع strFmt مواجه شدم که کمی مرا گیج کرد. گیج‌کننده‌ترین بخش ماجرا این بود که به طور اتفاقی و عجیب، در طول سال‌های زیادی که به عنوان توسعه‌دهنده Axapta/Dynamics AX فعالیت داشته‌ام، هرگز با آن مواجه نشده بودم.

مشکل این بود که من سعی کردم از یک ماکرو به عنوان رشته قالب برای تابع strFmt استفاده کنم و کار نکرد. این تابع کاملاً پارامترهای % را نادیده می‌گرفت و فقط باقیمانده رشته را برمی‌گرداند.

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

در اصل، چیزی شبیه به این

#define.FormatMacro('%1-%2-%3')
;

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

کار نخواهد کرد زیرا علامت‌های % در ماکرو در واقع برای ویژگی‌های قالب‌بندی رشته خود ماکرو استفاده می‌شوند. در این حالت، تابع strFmt رشته قالب‌بندی را به صورت "--" می‌بیند و بنابراین فقط آن را برمی‌گرداند.

چیزی شبیه به این:

#define.FormatMacro('%1-%2-%3');
info(#FormatMacro(salesId,itemId,lineNum));

کار خواهد کرد، اما احتمالاً نه آنطور که شما می‌خواهید. به جای نمایش مقادیر سه متغیر، نام متغیرها را نمایش می‌دهد، در این مورد "salesId-itemId-lineNum". (توجه داشته باشید که هنگام ارسال پارامترها به ماکرو، همانطور که معمولاً در فراخوانی متدها انجام می‌دهم، بعد از کاماها فاصله نگذاشتم. دلیلش این است که ماکرو در واقع از چنین فاصله‌هایی نیز استفاده خواهد کرد، بنابراین اگر این کار را می‌کردم، خروجی "salesId-itemId-lineNum" می‌شد.)

برای استفاده از یک ماکرو به عنوان قالب‌بندی رشته با strFmt، باید علامت‌های درصد را با بک‌اسلش escape کنید، مانند این:

#define.FormatMacro('\\%1-\\%2-\\%3')
;

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

این در واقع طوری عمل خواهد کرد که انگار رشته فرمت را مستقیماً وارد کرده‌اید.

این کار کوچک مثال‌ها را نشان می‌دهد:

static void StrFmtMacroTest(Args _args)
{
    #define.FormatMacro('%1-%2-%3')
    #define.FormatMacroEscaped('\\%1-\\%2-\\%3')
    SalesId salesId = '1';
    ItemId  itemId  = '2';
    LineNum lineNum = 3.00;
    ;

    info(#FormatMacro(salesId,itemId,lineNum));
    info(strFmt(#FormatMacro, salesId, itemId, lineNum));
    info(strFmt(#FormatMacroEscaped, salesId, itemId, lineNum));
}

مطالعه بیشتر

اگر از این پست لذت بردید، ممکن است این پیشنهادات را نیز بپسندید:


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

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

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

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