Miklix

Dynamics AX 2012-də Macro və strFmt ilə String Formatting

Nəşr olundu: 16 fevral 2025 at 00:52:33 UTC

Bu məqalədə strFmt-də makrodan format string kimi istifadə edərkən Dynamics AX 2012-də bəzi ekziskulyar davranışlar, eləcə də onun ətrafında necə işləməli olduğu barədə nümunələr təsvir olunur.


Bu səhifə mümkün qədər çox insan üçün əlçatan olması üçün ingilis dilindən maşın tərcümə edilib. Təəssüf ki, maşın tərcüməsi hələ mükəmməl texnologiya deyil, ona görə də səhvlər baş verə bilər. İstəyirsinizsə, orijinal ingilis versiyasına buradan baxa bilərsiniz:

String Formatting with Macro and strFmt in Dynamics AX 2012

Bu postdakı məlumatlar Dynamics AX 2012 R3 əsasında hazırlanıb. Digər versiyalar üçün də keçərli ola bilər və ya olmaya bilər.

Bu yaxınlarda strFmt funksiyası ilə bir məsələ ilə qarşılaşdım ki, bu da məni bir az da məəət etdi. Ən təəccüblü hissə isə o idi ki, mən bir qəribə təsadüf nəticəsində axapta/Dynamics AX developer kimi uzun illər ərzində heç vaxt rast gəlməmişəm.

Məsələ onda idi ki, mən strFmt funksiyası üçün format string kimi makro istifadə etməyə çalışdım və sadəcə işə yaramadı. % parametrlərinə tamamilə məhəl qoymadı və yalnız ipin qalan hissəsini geri qaytardı.

Ona baxdıqdan sonra kəşf etdim ki, makroslar özləri də ipləri format etmək üçün istifadə oluna bilər. Bu da mənim bilmədiyim bir şeydi. Oh yaxşı, həmişə yeni bir şey öyrənmək yaxşıdır, amma mən hələ də çox təəccübləndim ki, əvvəllər bu halla rastlaşmamışdım.

Əsasən belə bir şey

#define.FormatMacro('%1-%2-%3')
;

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

işləməyəcək, çünki makrodakı % işarələri əslində makronun öz string formatlama xüsusiyyətləri üçün istifadə olunur. Bu halda strFmt funksiyası formatlama stringi "--" olaraq görəcək və buna görə də yalnız bunu geri qaytaracaq.

Belə bir şey:

#define.FormatMacro('%1-%2-%3');
info(#FormatMacro(salesId,itemId,lineNum));

işləyəcək, amma yəqin ki, istədiyiniz kimi deyil. Üç dəyişənin qiymətlərini çıxıntdırmaq əvəzinə dəyişənlərin adlarını çıxacaq, bu halda "salesId-itemId-lineNum". (Qeyd edək ki, mən adətən metod zənglərində olduğu kimi parametrləri makroya ötürərkən kommalardan sonra boşluqlar qoymadım. Belə ki, makro faktiki olaraq belə boşluqlardan da istifadə edəcək. Yəni çıxış "salesId- itemId- lineNum" olardı, əgər etdimsə).

Əslində strFmt ilə formatlama string kimi makro istifadə etmək üçün, backslashes ilə faiz işarələrindən qaçmaq lazımdır. Bu kimi:

#define.FormatMacro('\\%1-\\%2-\\%3')
;

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

Bu, əslində format ipi birbaşa təmin etmiş kimi işləyəcək.

Bu kiçik iş nümunələri misal gətirir:

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-də paylaşınFacebookda paylaşLinkedIn-də paylaşınTumblr-da paylaşınX-də paylaşınLinkedIn-də paylaşınPinterest-də Pin

Mikkel Bang Christensen

Müəllif haqqında

Mikkel Bang Christensen
Mikkel miklix.com saytının yaradıcısı və sahibidir. O, peşəkar kompüter proqramçısı/proqram təminatı tərtibatçısı kimi 20 ildən artıq təcrübəyə malikdir və hazırda böyük Avropa İT korporasiyasında tam iş günü işləyir. Bloq yazmayanda o, boş vaxtını geniş çeşidli maraqlara, hobbilərə və fəaliyyətlərə sərf edir ki, bu da müəyyən dərəcədə bu veb-saytda əhatə olunan müxtəlif mövzularda əks oluna bilər.