Miklix

String Formatting with Macro and strFmt in Dynamics AX 2012

Objavljeno: 16. februar 2025. u 00:51:17 UTC

Ovaj članak opisuje neka neobična ponašanja u Dynamics AX 2012 kada se koristi makro kao string formata u strFmt, kao i primjere kako ga zaobići.


Ova stranica je mašinski prevedena sa engleskog kako bi bila dostupna što većem broju ljudi. Nažalost, mašinsko prevođenje još nije usavršena tehnologija, pa može doći do grešaka. Ako želite, možete pogledati originalnu englesku verziju ovdje:

String Formatting with Macro and strFmt in Dynamics AX 2012

Informacije u ovom postu su zasnovane na Dynamics AX 2012 R3. Može ili ne mora vrijediti za druge verzije.

Nedavno sam naišao na problem sa funkcijom strFmt koja me je malo zbunila. Najviše zbunjujuće je bilo to što se nekim čudnim slučajem nikada prije nisam susreo s njim u svojim godinama kao Axapta/Dynamics AX programer.

Problem je bio u tome što sam pokušao da koristim makro kao string formata za strFmt funkciju i to jednostavno nije uspelo. Potpuno je ignorisao % parametre i vratio samo ostatak stringa.

Nakon što sam to pogledao, otkrio sam da se sami makroi mogu koristiti za formatiranje nizova, što je također nešto što nisam znao. Oh dobro, uvijek je dobro naučiti nešto novo, ali sam ipak bio vrlo iznenađen da nisam slučajno naišao na ovo prije.

U osnovi, ovako nešto

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

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

neće raditi jer se znakovi % u makrou zapravo koriste za makra vlastite mogućnosti formatiranja nizova. U ovom slučaju, funkcija strFmt će vidjeti string za formatiranje kao "--" i stoga će vratiti samo to.

Nešto ovako:

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

će raditi, ali vjerojatno ne onako kako želite. Umjesto da ispisuje vrijednosti tri varijable, umjesto toga će se prikazati imena varijabli, u ovom slučaju "salesId-itemId-lineNum". (Primijetite da nisam stavljao razmake iza zareza prilikom prosljeđivanja parametara makrou, kao što to obično radim u pozivima metoda. To je zato što će makro zapravo koristiti i takve razmake, tako da bi izlaz bio "salesId- itemId- lineNum" ako to učinim).

Da biste zapravo koristili makro kao string za formatiranje sa strFmt, morate pobjeći od znakova procenta sa obrnutim kosama crtama, kao što je ova:

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

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

Ovo će zapravo raditi kao da ste direktno dali string formata.

Ovaj mali posao ilustrira primjere:

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));
}
Podijelite na BlueskyPodijelite na FacebookuPodijelite na LinkedIn-uPodijelite na Tumblr-uPodijeli na XPodijelite na LinkedIn-uPrikači na Pinterest

Mikkel Bang Christensen

O autoru

Mikkel Bang Christensen
Mikkel je kreator i vlasnik miklix.com. Ima preko 20 godina iskustva kao profesionalni kompjuterski programer/programer softvera i trenutno je zaposlen sa punim radnim vremenom u velikoj evropskoj IT korporaciji. Kada ne piše blog, svoje slobodno vrijeme provodi na širokom spektru interesovanja, hobija i aktivnosti, što se u određenoj mjeri može odraziti na različite teme koje se obrađuju na ovoj web stranici.