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.
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
;
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:
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:
;
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:
{
#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));
}