Miklix

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

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

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

#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 से अधिक वर्षों का अनुभव है और वर्तमान में वे एक बड़े यूरोपीय आईटी निगम के लिए पूर्णकालिक रूप से कार्यरत हैं। जब वे ब्लॉगिंग नहीं करते हैं, तो वे अपना खाली समय विभिन्न प्रकार की रुचियों, शौक और गतिविधियों में बिताते हैं, जो कुछ हद तक इस वेबसाइट पर शामिल किए गए विषयों की विविधता में परिलक्षित हो सकते हैं।