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