String Ֆորմատավորում Macro-ով եւ strFmt-ով Դինամիկայում AX 2012
Հրապարակվել է՝ 16 փետրվարի, 2025 թ., 00:49:45 UTC
Վերջին թարմացումը՝ 16 փետրվարի, 2025 թ., 00:51:04 UTC
Այս հոդվածում նկարագրվում է որոշակի յուրահատուկ վարքագիծ Dynamics AX 2012-ում, երբ strFmt-ում օգտագործում են մակրո որպես ձեւաչափի լար, ինչպես նաեւ օրինակներ, թե ինչպես աշխատել դրա շուրջ:
String Formatting with Macro and strFmt in Dynamics AX 2012
Այս պոստում տեղադրված տեղեկատվությունը հիմնված է Dynamics AX 2012 R3-ի վրա: Այն կարող է կամ չի կարող վավերական լինել այլ տարբերակների համար։
Վերջերս ես մի խնդրի հանդիպեցի strFmt ֆունկցիայի հետ, որը մի փոքր շփոթեցրեց ինձ։ Ամենատպավորիչ մասն այն էր, որ ես ինչ-որ տարօրինակ զուգադիպությամբ երբեք չեմ հանդիպել դրան իմ երկար տարիների ընթացքում որպես Axapta/Dynamics AX մշակող:
Խնդիրն այն էր, որ ես փորձեցի օգտագործել մակրո որպես strFmt ֆունկցիայի ձեւաչափի լար եւ այն պարզապես չաշխատեց: Այն ամբողջովին անտեսեց % պարամետրերը եւ վերադարձավ միայն լարի մնացորդը:
Այն նայելուց հետո ես հայտնաբերեցի, որ հենց մակրոսները կարող են օգտագործվել լարերը ֆորմատավորելու համար, ինչը նույնպես մի բան էր, որը ես չգիտեի: Լավ, միշտ լավ է ինչ-որ նոր բան սովորել, բայց ես դեռ շատ զարմացած էի, որ նախկինում նման բան չէի պատահել:
Ըստ էության, նման մի բան
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
չի աշխատի, քանի որ մակրոի % նշանները իրականում օգտագործվում են մակրոի սեփական լարային ֆորմատավորման առանձնահատկությունների համար: Այս դեպքում strFmt ֆունկցիան կդիտարկի ֆորմատավորման լարը որպես "-- եւ հետեւաբար միայն կվերադարձնի դա:
Այսպիսի մի բան.
info(#FormatMacro(salesId,itemId,lineNum));
կաշխատի, բայց, հավանաբար, ոչ այնպես, ինչպես դուք եք ցանկանում: Երեք փոփոխականների արժեքները դուրս գրելու փոխարեն, դրա փոխարեն դուրս կգա փոփոխականների անունները , այս դեպքում ՝ "salesId-itemId-lineNum": (Նկատենք, որ պարամետրերը մակրոին փոխանցելիս կոմմաներից հետո տեղեր չէի դնում, ինչպես սովորաբար անում եմ մեթոդական զանգերի ժամանակ: Դա այն պատճառով է, որ մակրո-ն իրականում կօգտագործի նաեւ այդպիսի տարածություններ, ուստի ելքը կլինի "salesId- itemId- lineNum", եթե ես լինեի):
Որպեսզի իրականում օգտագործել մակրո որպես ֆորմատավորման լար strFmt հետ, դուք պետք է խուսափել տոկոսային նշանները backslashes, նման.
;
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));
}