Miklix

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

منتشر شده: ۱۶ فوریهٔ ۲۰۲۵ ساعت ۰:۴۹:۱۰ (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، باید از علامت‌های درصدی با اسلش برگشتی فرار کنید، مانند این:

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