Miklix

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

Nəşr olundu: 16 fevral 2025 at 00:52:33 UTC
Son yeniləmə: 12 yanvar 2026 at 08:44:50 UTC

Bu məqalədə Dynamics AX 2012-də strFmt-də format sətri kimi makro istifadə edərkən bəzi qəribə davranışlar, eləcə də bunun ətrafında necə işləmək 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 yazıdakı məlumat Dynamics AX 2012 R3-ə əsaslanır. Digər versiyalar üçün keçərli ola bilər və ya olmaya da bilər.

Bu yaxınlarda strFmt funksiyası ilə bağlı bir problemlə qarşılaşdım və bu, məni bir az çaşdırdı. Ən çaşdırıcısı o idi ki, qəribə bir təsadüf nəticəsində Axapta/Dynamics AX geliştiricisi kimi uzun illər ərzində heç vaxt bununla qarşılaşmamışdım.

Problem ondadır ki, strFmt funksiyası üçün format sətri kimi makrodan istifadə etməyə çalışdım və o, sadəcə işləmədi. O, % parametrlərini tamamilə nəzərə almadı və yalnız sətrin qalan hissəsini qaytardı.

Bunu araşdırdıqdan sonra makroların özlərinin sətirləri formatlamaq üçün istifadə edilə biləcəyini kəşf etdim ki, bu da mənim bilmədiyim bir şey idi. Hə, yeni bir şey öyrənmək həmişə yaxşıdır, amma yenə də əvvəllər buna rast gəlmədiyim üçün çox təəccübləndim.

Əsasən, buna bənzər 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 sətir formatlama xüsusiyyətləri üçün istifadə olunur. Bu halda, strFmt funksiyası formatlama sətrini "--" kimi görəcək və buna görə də yalnız onu qaytaracaq.

Bu kimi 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 dəyərlərini çıxarmaq əvəzinə, dəyişənlərin adlarını, bu halda "salesId-itemId-lineNum"-u çıxaracaq. (Diqqət yetirin ki, parametrləri makroya ötürərkən, adətən metod çağırışlarında etdiyim kimi, vergüllərdən sonra boşluq qoymadım. Çünki makro əslində bu cür boşluqlardan da istifadə edəcək, ona görə də çıxarış "salesId-itemId-lineNum" olardı).

Makronu strFmt ilə formatlaşdırma sətri kimi istifadə etmək üçün faiz işarələrindən geri əyri xətlərlə qaçmaq lazımdır, məsələn:

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

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

Bu, əslində format sətrini birbaşa təqdim etdiyiniz kimi işləyəcək.

Bu kiçik iş nümunələri göstərir:

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));
}

Əlavə Oxu

Bu yazı xoşunuza gəldisə, bu təklifləri də bəyənə bilərsiniz:


Bluesky-də paylaşınFacebookda paylaşLinkedIn-də paylaşınTumblr-da paylaşınX-də paylaşınLinkedIn-də paylaşınPinterest-də Pin

Mikkel Christensen

Müəllif haqqında

Mikkel 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.