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));
}
شارك على بلوسكايشارك على الفيسبوكشارك على لينكدإنشارك على تمبلرشارك على إكسشارك على لينكدإنثبت على بينتريست

ميكيل بانج كريستنسن

عن المؤلف

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