डायनॅमिक्स एएक्स 2012 मध्ये मॅक्रो आणि एसटीआरएफएमटीसह स्ट्रिंग फॉरमॅटिंग
प्रकाशित: १६ फेब्रुवारी, २०२५ रोजी १२:४९:१५ AM UTC
हा लेख एसटीआरएफएमटीमध्ये मॅक्रो फॉर्मेट स्ट्रिंग म्हणून मॅक्रो वापरताना डायनॅमिक्स एएक्स 2012 मधील काही विचित्र वर्तनाचे वर्णन करतो, तसेच त्याभोवती कसे कार्य करावे यावरील उदाहरणांचे वर्णन करतो.
String Formatting with Macro and strFmt in Dynamics AX 2012
या पोस्टमधील माहिती डायनॅमिक्स एएक्स २०१२ आर ३ वर आधारित आहे. हे इतर आवृत्त्यांसाठी वैध असू शकते किंवा असू शकत नाही.
मला नुकतीच एसटीआरएफएमटी फंक्शनमध्ये एक समस्या आली ज्याने मला थोडा त्रास दिला. सर्वात धक्कादायक भाग म्हणजे काही विचित्र योगायोगाने मी एक्साप्टा / डायनॅमिक्स एएक्स डेव्हलपर म्हणून माझ्या बर्याच वर्षांत यापूर्वी कधीही याचा सामना केला नाही.
मुद्दा असा होता की मी एसटीआरएफएमटी फंक्शनसाठी फॉरमॅट स्ट्रिंग म्हणून मॅक्रो वापरण्याचा प्रयत्न केला आणि ते कार्य केले नाही. त्याने % मापदंडांकडे पूर्णपणे दुर्लक्ष केले आणि फक्त स्ट्रिंगचा उर्वरित भाग परत केला.
ते पाहिल्यानंतर मला असे आढळले की मॅक्रोजचा वापर स्ट्रिंग्स फॉरमॅट करण्यासाठी केला जाऊ शकतो, जे मला माहित नव्हते. अरे बरं, काहीतरी नवीन शिकणं नेहमीच चांगलं असतं, पण मला अजूनही खूप आश्चर्य वाटलं होतं की मला याआधी हे कळलं नव्हतं.
मुळात असं काहीसं
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
कार्य करणार नाही कारण मॅक्रोमधील % चिन्हे प्रत्यक्षात मॅक्रोच्या स्वत: च्या स्ट्रिंग फॉरमॅटिंग वैशिष्ट्यांसाठी वापरली जातात. या प्रकरणात, एसटीआरएफएमटी फंक्शन फॉरमॅटिंग स्ट्रिंगला "--" म्हणून पाहेल आणि म्हणूनच ते परत करेल.
असे काहीतरी:
info(#FormatMacro(salesId,itemId,lineNum));
कार्य करेल, परंतु कदाचित आपल्याला पाहिजे तसे नाही. तीन व्हेरिएबल्सची मूल्ये बाहेर टाकण्याऐवजी, ते त्याऐवजी व्हेरिएबल्सची नावे आउटपुट करेल, या प्रकरणात "सेल्सआयडी-आयटमआयडी-लाइनन्यूम". (लक्षात घ्या की मॅक्रोला पॅरामीटर्स पास करताना मी कोमानंतर जागा ठेवली नाही, जसे मी सहसा मेथड कॉलमध्ये करतो. कारण मॅक्रो प्रत्यक्षात अशा जागा देखील वापरेल, म्हणून मी तसे केले तर आउटपुट "सेल्सआयडी- आयटम-लाइननम" असेल).
प्रत्यक्षात एसटीआरएफएमटीसह फॉरमॅटिंग स्ट्रिंग म्हणून मॅक्रो वापरण्यासाठी, आपल्याला बॅकस्लॅशसह टक्केवारी चिन्हे टाळणे आवश्यक आहे, जसे की:
;
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));
}