Miklix

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 ֆունկցիայի ձեւաչափի լար եւ այն պարզապես չաշխատեց: Այն ամբողջովին անտեսեց % պարամետրերը եւ վերադարձավ միայն լարի մնացորդը:

Այն նայելուց հետո ես հայտնաբերեցի, որ հենց մակրոսները կարող են օգտագործվել լարերը ֆորմատավորելու համար, ինչը նույնպես մի բան էր, որը ես չգիտեի: Լավ, միշտ լավ է ինչ-որ նոր բան սովորել, բայց ես դեռ շատ զարմացած էի, որ նախկինում նման բան չէի պատահել:

Ըստ էության, նման մի բան

#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 հետ, դուք պետք է խուսափել տոկոսային նշանները backslashes, նման.

#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));
}
Կիսվեք Bluesky-ումԿիսվել Facebook-ումԿիսվեք LinkedIn-ումԿիսվեք Tumblr-ումԿիսվեք X-ումԿիսվեք LinkedIn-ումԿպցնել Պինթրեսթում

Միկել Բանգ Քրիստենսեն

Հեղինակի մասին

Միկել Բանգ Քրիստենսեն
Mikkel-ը miklix.com-ի ստեղծողն ու սեփականատերն է: Նա ունի ավելի քան 20 տարվա աշխատանքային փորձ՝ որպես պրոֆեսիոնալ համակարգչային ծրագրավորող/ծրագրային ապահովման մշակող և ներկայումս լրիվ դրույքով աշխատում է եվրոպական խոշոր ՏՏ կորպորացիայի մեջ: Երբ նա բլոգ չի գրում, նա իր ազատ ժամանակն անցկացնում է հետաքրքրությունների, հոբբիների և գործունեության լայն շրջանակի վրա, որոնք որոշ չափով կարող են արտացոլվել այս կայքում ընդգրկված թեմաների բազմազանության մեջ: