تنسيق السلسلة باستخدام الماكرو و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، يجب عليك وضع علامات الهروب (الشرطات المائلة العكسية) قبل علامات النسبة المئوية، كما يلي:
;
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));
}
قراءات إضافية
إذا أعجبك هذا المنشور، فقد تعجبك أيضًا هذه الاقتراحات:
- حذف كيان قانوني (حسابات الشركة) في Dynamics AX 2012
- نظرة عامة سريعة على إطار عمل Dynamics AX 2012 SysOperation
- تحويل رقم حقيقي إلى سلسلة نصية مع جميع الأرقام العشرية في Dynamics AX 2012
