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