డైనమిక్స్ AX 2012లో మాక్రో మరియు strFmtతో స్ట్రింగ్ ఫార్మాటింగ్
ప్రచురణ: 16 ఫిబ్రవరి, 2025 12:49:16 AM UTCకి
ఈ వ్యాసం డైనమిక్స్ AX 2012 లో strFmt లో మాక్రోను ఫార్మాట్ స్ట్రింగ్గా ఉపయోగిస్తున్నప్పుడు కొన్ని విచిత్రమైన ప్రవర్తనను వివరిస్తుంది, అలాగే దాని చుట్టూ ఎలా పని చేయాలో ఉదాహరణలను వివరిస్తుంది.
String Formatting with Macro and strFmt in Dynamics AX 2012
ఈ పోస్ట్లోని సమాచారం డైనమిక్స్ AX 2012 R3 ఆధారంగా రూపొందించబడింది. ఇది ఇతర వెర్షన్లకు చెల్లుబాటు కావచ్చు లేదా చెల్లకపోవచ్చు.
ఇటీవల నాకు strFmt ఫంక్షన్లో ఒక సమస్య ఎదురైంది, అది నన్ను కొంచెం కలవరపెట్టింది. అత్యంత ఆశ్చర్యకరమైన విషయం ఏమిటంటే, నేను ఆక్సాప్టా/డైనమిక్స్ 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));
}