Dynamics AX 2012 में मैक्रो और strFmt के साथ स्ट्रिंग फ़ॉर्मेटिंग
प्रकाशित: 16 फ़रवरी 2025 को 12:49:06 am UTC बजे
आखरी अपडेट: 12 जनवरी 2026 को 8:44:36 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));
}
अग्रिम पठन
यदि आपको यह पोस्ट पसंद आई हो, तो आपको ये सुझाव भी पसंद आ सकते हैं:
- Dynamics AX 2012 में AIF सेवा के लिए दस्तावेज़ वर्ग और क्वेरी की पहचान करना
- Dynamics AX 2012 में त्रुटि "डेटा अनुबंध ऑब्जेक्ट के लिए कोई मेटाडेटा वर्ग परिभाषित नहीं है"
- Dynamics AX 2012 में सभी दशमलवों के साथ रियल को स्ट्रिंग में बदलें
