قالب بندی رشته با ماکرو و 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 استفاده کنم و کار نکرد. به طور کامل پارامترهای % را نادیده گرفت و فقط بقیه رشته را برگرداند.
پس از بررسی آن، متوجه شدم که خود ماکروها می توانند برای قالب بندی رشته ها استفاده شوند، که همچنین چیزی بود که من نمی دانستم. اوه، خوب، همیشه خوب است که چیز جدیدی یاد بگیرم، اما من هنوز خیلی تعجب کردم که قبلاً به این موضوع برخورد نکرده بودم.
در اصل، چیزی شبیه به این
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
کار نخواهد کرد زیرا علائم % در ماکرو در واقع برای ویژگی های قالب بندی رشته خود ماکرو استفاده می شود. در این حالت، تابع strFmt رشته قالب بندی را به صورت "--" می بیند و بنابراین فقط آن را برمی گرداند.
چیزی شبیه این:
info(#FormatMacro(salesId,itemId,lineNum));
کار خواهد کرد، اما احتمالا آنطور که شما می خواهید نیست. به جای خروجی مقادیر سه متغیر، نام متغیرها را به جای آن خروجی می دهد، در این مورد "salesId-itemId-lineNum". (توجه داشته باشید که من هنگام ارسال پارامترها به ماکرو، همانطور که معمولاً در فراخوانی متدها انجام میدهم، بعد از کاما فاصله قرار ندادم. دلیلش این است که ماکرو در واقع از چنین فاصلههایی نیز استفاده میکند، بنابراین اگر این کار را انجام دهم، خروجی "salesId- itemId-lineNum" خواهد بود).
برای استفاده از یک ماکرو به عنوان رشته قالببندی با strFmt، باید از علامتهای درصدی با اسلش برگشتی فرار کنید، مانند این:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
این در واقع به گونه ای کار می کند که گویی رشته قالب را مستقیماً عرضه کرده اید.
این کار کوچک مثالهای زیر را نشان میدهد:
{
#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));
}