ਡਾਇਨਾਮਿਕਸ AX 2012 ਵਿੱਚ ਮੈਕਰੋ ਅਤੇ strFmt ਨਾਲ ਸਟ੍ਰਿੰਗ ਫਾਰਮੈਟਿੰਗ
ਪ੍ਰਕਾਸ਼ਿਤ: 19 ਮਾਰਚ 2025 9:33:10 ਬਾ.ਦੁ. UTC
ਇਹ ਲੇਖ ਡਾਇਨਾਮਿਕਸ AX 2012 ਵਿੱਚ ਕੁਝ ਅਜੀਬ ਵਿਵਹਾਰ ਦਾ ਵਰਣਨ ਕਰਦਾ ਹੈ ਜਦੋਂ strFmt ਵਿੱਚ ਇੱਕ ਮੈਕਰੋ ਨੂੰ ਫਾਰਮੈਟ ਸਟ੍ਰਿੰਗ ਵਜੋਂ ਵਰਤਦੇ ਹੋ, ਅਤੇ ਨਾਲ ਹੀ ਇਸਦੇ ਆਲੇ-ਦੁਆਲੇ ਕਿਵੇਂ ਕੰਮ ਕਰਨਾ ਹੈ ਇਸ ਬਾਰੇ ਉਦਾਹਰਣਾਂ ਵੀ ਦਿੰਦਾ ਹੈ।
String Formatting with Macro and strFmt in Dynamics AX 2012
ਇਸ ਪੋਸਟ ਵਿਚ ਦਿੱਤੀ ਜਾਣਕਾਰੀ Dynamics AX 2012 R3 'ਤੇ ਆਧਾਰਿਤ ਹੈ। ਇਹ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਦੂਜੇ ਵਰਜਨਾਂ ਲਈ ਇਹ ਮਾਨਯਾ ਨਾ ਹੋਵੇ।
ਹਾਲ ਹੀ ਵਿੱਚ ਮੈਂ strFmt ਫੰਕਸ਼ਨ ਨਾਲ ਇੱਕ ਸਮੱਸਿਆ ਦਾ ਸਾਹਮਣਾ ਕੀਤਾ ਜਿਸਨੇ ਮੈਨੂੰ ਕੁਝ ਸਮੇਂ ਲਈ ਹੈਰਾਨ ਕਰ ਦਿੱਤਾ। ਸਭ ਤੋਂ ਹੈਰਾਨੀਜਨਕ ਗੱਲ ਇਹ ਸੀ ਕਿ ਮੈਂ ਇੱਕ ਅਜੀਬ ਹਾਦਸੇ ਕਾਰਨ ਆਪਣੇ ਕਈ ਸਾਲਾਂ ਦੇ Axapta/Dynamics AX ਡਿਵੈਲਪਰ ਦੇ ਤਜਰਬੇ ਵਿੱਚ ਕਦੇ ਵੀ ਇਸ ਨਾਲ ਸਾਮਣਾ ਨਹੀਂ ਕੀਤਾ ਸੀ।
ਸਮੱਸਿਆ ਇਹ ਸੀ ਕਿ ਮੈਂ strFmt ਫੰਕਸ਼ਨ ਲਈ ਫਾਰਮੈਟ ਸਟ੍ਰਿੰਗ ਵਜੋਂ ਇੱਕ ਮੈਕਰੋ ਨੂੰ ਵਰਤਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਅਤੇ ਇਹ ਕੰਮ ਨਹੀਂ ਕੀਤਾ। ਇਸਨੇ % ਪੈਰਾਮੀਟਰਾਂ ਨੂੰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰ ਦਿੱਤਾ ਅਤੇ ਸਿਰਫ ਸਟ੍ਰਿੰਗ ਦੇ ਬਾਕੀ ਹਿਸੇ ਨੂੰ ਵਾਪਸ ਕੀਤਾ।
ਇਸਦੀ ਜਾਂਚ ਕਰਨ ਦੇ ਬਾਅਦ, ਮੈਨੂੰ ਪਤਾ ਲੱਗਿਆ ਕਿ ਮੈਕਰੋਆਂ ਨੂੰ ਸਟ੍ਰਿੰਗਜ਼ ਫਾਰਮੈਟ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ, ਜੋ ਕਿ ਇਹ ਵੀ ਇੱਕ ਗੱਲ ਸੀ ਜਿਸਦਾ ਮੈਨੂੰ ਪਤਾ ਨਹੀਂ ਸੀ। ਓਹ well, ਨਵੀਂ ਗੱਲ ਸਿੱਖਣਾ ਹਮੇਸ਼ਾ ਚੰਗਾ ਹੁੰਦਾ ਹੈ, ਪਰ ਮੈਂ ਫਿਰ ਵੀ ਹੈਰਾਨ ਸੀ ਕਿ ਮੈਂ ਇਹ ਪਹਿਲਾਂ ਕਦੇ ਨਹੀਂ ਆਖਿਆ।
ਬੁਨਿਆਦੀ ਤੌਰ 'ਤੇ, ਕੁਝ ਇਸ ਤਰ੍ਹਾਂ
;
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));
}