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، يجب عليك وضع علامات الهروب (الشرطات المائلة العكسية) قبل علامات النسبة المئوية، كما يلي:

#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));
}

قراءات إضافية

إذا أعجبك هذا المنشور، فقد تعجبك أيضًا هذه الاقتراحات:


شارك على بلوسكايشارك على الفيسبوكشارك على لينكدإنشارك على تمبلرشارك على إكسشارك على لينكدإنثبت على بينتريست

ميكيل كريستنسن

عن المؤلف

ميكيل كريستنسن
ميكيل هو مؤسس ومالك موقع miklix.com. يتمتع بخبرة تزيد عن 20 عامًا كمبرمج كمبيوتر/مطور برامج محترف ويعمل حاليًا بدوام كامل في إحدى شركات تكنولوجيا المعلومات الأوروبية الكبرى. عندما لا يقوم بالتدوين، يقضي وقت فراغه في مجموعة واسعة من الاهتمامات والهوايات والأنشطة، والتي قد تنعكس إلى حد ما في تنوع الموضوعات التي يغطيها هذا الموقع.