ડાયનેમિક્સ AX 2012 માં મેક્રો અને strFmt સાથે શબ્દમાળા બંધારણ
પ્રકાશિત: 16 ફેબ્રુઆરી, 2025 એ 12:51:19 AM UTC વાગ્યે
આ લેખ ડાયનેમિક્સ એએક્સ 2012માં કેટલીક વિચિત્ર વર્તણૂકનું વર્ણન કરે છે જ્યારે સ્ટ્રેટફોર્મેટ સ્ટ્રિંગ તરીકે મેક્રોનો ઉપયોગ કરવામાં આવે છે, તેમજ તેની આસપાસ કેવી રીતે કામ કરવું તેના ઉદાહરણો પણ આપવામાં આવ્યા છે.
String Formatting with Macro and strFmt in Dynamics AX 2012
આ પોસ્ટમાંની માહિતી ડાયનેમિક્સ એએક્સ ૨૦૧૨ આર ૩ પર આધારિત છે. તે અન્ય સંસ્કરણો માટે માન્ય હોઈ શકે છે અથવા ન પણ હોઈ શકે.
મને તાજેતરમાં જ એસ.ટી.આર.એફ.એમ.ટી. ફંક્શન સાથે એક સમસ્યાનો સામનો કરવો પડ્યો જેણે મને થોડા સમય માટે મૂંઝવણમાં મૂક્યો. સૌથી વધુ આશ્ચર્યજનક વાત એ હતી કે કેટલાક વિચિત્ર સંયોગો દ્વારા મને એક્સાપ્ટા / ડાયનેમિક્સ એએક્સ ડેવલપર તરીકેના મારા ઘણા વર્ષોમાં આ પહેલાં ક્યારેય તેનો સામનો કરવો પડ્યો નથી.
મુદ્દો એ હતો કે મેં એસ.ટી.આર.એફ.એમ.ટી. ફંક્શન માટે ફોર્મેટ સ્ટ્રિંગ તરીકે મેક્રોનો ઉપયોગ કરવાનો પ્રયાસ કર્યો અને તે કામ કરતું નથી. તેણે % માપદંડોને સંપૂર્ણપણે અવગણ્યા હતા અને માત્ર શબ્દમાળાના બાકીના ભાગને જ પરત કર્યા હતા.
તેની તપાસ કર્યા પછી, મેં શોધી કાઢ્યું કે મેક્રોઝનો ઉપયોગ તારને ફોર્મેટ કરવા માટે થઈ શકે છે, જે પણ કંઈક એવું હતું જે હું જાણતો ન હતો. ઓહ વેલ, કશુંક નવું શીખવું એ હંમેશાં સારું હોય છે, પરંતુ મને હજી પણ ખૂબ આશ્ચર્ય થયું હતું કે આ પહેલાં મને આ વાતની જાણ થઈ ન હતી.
મૂળભૂત રીતે, આવું કંઈક
;
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));
}