Dynamics AX 2012 में मैक्रो और strFmt के साथ स्ट्रिंग फ़ॉर्मेटिंग
प्रकाशित: 16 फ़रवरी 2025 को 12:49:06 am 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));
}