Miklix

სიმებიანი ფორმატირება მაკრო და strFmt დინამიკაში AX 2012

გამოქვეყნებულია: 16 თებერვალი, 2025, 00:51:46 UTC
ბოლო განახლება: 12 იანვარი, 2026, 08:44:46 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-ის გამოყენებით მაკროს ფორმატირების სტრიქონად გამოსაყენებლად, პროცენტული ნიშნებისთვის უკუხაზების გამოყენებაა საჭირო, ასე:

#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-ზეPinterest-ზე დამაგრება

მიკელ კრისტენსენი

ავტორის შესახებ

მიკელ კრისტენსენი
მაიკლ არის miklix.com-ის შემქმნელი და მფლობელი. მას აქვს 20 წელზე მეტი გამოცდილება, როგორც პროფესიონალი კომპიუტერული პროგრამისტი/პროგრამული უზრუნველყოფის შემქმნელი და ამჟამად მუშაობს სრულ განაკვეთზე დიდ ევროპულ IT კორპორაციაში. როდესაც ბლოგს არ წერს, თავისუფალ დროს ატარებს ინტერესების, ჰობიებისა და აქტივობების უზარმაზარ სპექტრზე, რაც შეიძლება გარკვეულწილად აისახოს ამ ვებსაიტზე გაშუქებულ თემებზე.