Miklix

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 फ़ंक्शन के लिए फ़ॉर्मैट स्ट्रिंग के तौर पर मैक्रो इस्तेमाल करने की कोशिश की और यह काम नहीं किया। इसने % पैरामीटर को पूरी तरह से नज़रअंदाज़ कर दिया और सिर्फ़ स्ट्रिंग का बचा हुआ हिस्सा ही दिखाया।

इस पर गौर करने के बाद, मुझे पता चला कि मैक्रोज़ का इस्तेमाल स्ट्रिंग्स को फ़ॉर्मेट करने के लिए किया जा सकता है, जो मुझे नहीं पता था। खैर, कुछ नया सीखना हमेशा अच्छा होता है, लेकिन मैं फिर भी बहुत हैरान था कि मुझे यह पहले क्यों नहीं मिला।

मूलतः, कुछ इस तरह

#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));
}

अग्रिम पठन

यदि आपको यह पोस्ट पसंद आई हो, तो आपको ये सुझाव भी पसंद आ सकते हैं:


ब्लूस्काई पर साझा करेंफेसबुक पर सांझा करेंलिंक्डइन पर साझा करेंटम्बलर पर साझा करेंX पर साझा करेंलिंक्डइन पर साझा करेंPinterest पर पिन करें

मिकेल क्रिस्टेंसन

लेखक के बारे में

मिकेल क्रिस्टेंसन
मिकेल miklix.com के निर्माता और मालिक हैं। उन्हें पेशेवर कंप्यूटर प्रोग्रामर/सॉफ्टवेयर डेवलपर के रूप में 20 से अधिक वर्षों का अनुभव है और वर्तमान में वे एक बड़े यूरोपीय आईटी निगम के लिए पूर्णकालिक रूप से कार्यरत हैं। जब वे ब्लॉगिंग नहीं करते हैं, तो वे अपना खाली समय विभिन्न प्रकार की रुचियों, शौक और गतिविधियों में बिताते हैं, जो कुछ हद तक इस वेबसाइट पर शामिल किए गए विषयों की विविधता में परिलक्षित हो सकते हैं।