Miklix

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

გამოქვეყნებულია: 16 თებერვალი, 2025, 00:51: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– ით, თქვენ უნდა გაექცეთ პროცენტული ნიშნები 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-ზეPinterest-ზე დამაგრება

მიკელ ბანგ კრისტენსენი

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

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