Miklix

Oblikovanje niza s makronaredbom i strFmt u Dynamics AX 2012

Objavljeno: 16. veljače 2025. u 00:51:20 UTC

Ovaj članak opisuje neka neobična ponašanja u programu Dynamics AX 2012 kada se koristi makronaredba kao niz formata u strFmt, kao i primjere kako to zaobići.


Ova je stranica strojno prevedena s engleskog kako bi bila dostupna što većem broju ljudi. Nažalost, strojno prevođenje još nije usavršena tehnologija pa se mogu pojaviti pogreške. Ako želite, izvornu englesku verziju možete pogledati ovdje:

String Formatting with Macro and strFmt in Dynamics AX 2012

Informacije u ovom postu temelje se na Dynamics AX 2012 R3. Može, ali i ne mora vrijediti za druge verzije.

Nedavno sam naišao na problem s funkcijom strFmt koji me malo zbunio. Ono što je najviše zbunjivalo bilo je to što se nekom čudnom slučajnošću nikada prije nisam susreo s tim u godinama koje sam proveo kao Axapta/Dynamics AX programer.

Problem je bio u tome što sam pokušao upotrijebiti makronaredbu kao niz formata za funkciju strFmt i jednostavno nije išlo. Potpuno je zanemario parametre % i vratio samo ostatak niza.

Nakon što sam to istražio, otkrio sam da se same makronaredbe mogu koristiti za formatiranje nizova, što također nisam znao. Ma dobro, uvijek je dobro naučiti nešto novo, ali svejedno sam bio jako iznenađen što nisam slučajno naišao na ovo prije.

Uglavnom, ovako nešto

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

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

neće raditi jer se znakovi % u makronaredbi zapravo koriste za vlastite značajke oblikovanja niza makronaredbe. U ovom slučaju, funkcija strFmt će niz za oblikovanje vidjeti kao "--" i stoga će vratiti samo to.

Nešto ovako:

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

radit će, ali vjerojatno ne onako kako biste željeli. Umjesto ispisivanja vrijednosti triju varijabli, ispisat će imena varijabli umjesto toga, u ovom slučaju "salesId-itemId-lineNum". (Primijetite da nisam stavio razmake iza zareza prilikom prosljeđivanja parametara u makronaredbu, kao što obično radim u pozivima metoda. To je zato što će makronaredba također koristiti takve razmake, tako da bi izlaz bio "salesId-itemId-lineNum" da jesam).

Da biste stvarno koristili makronaredbu kao niz za oblikovanje sa strFmt, trebate izbjeći znakove postotka obrnutim kosim crtama, ovako:

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

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

Ovo će zapravo funkcionirati kao da ste izravno unijeli niz 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));
}
Podijeli na BlueskyPodijelite na FacebookuPodijelite na LinkedInuPodijelite na TumblrPodijeli na XPodijelite na LinkedInuPrikvači na Pinterest

Mikkel Bang Christensen

O autoru

Mikkel Bang Christensen
Mikkel je kreator i vlasnik miklix.com. Ima više od 20 godina iskustva kao profesionalni računalni programer/razvijač softvera i trenutno je zaposlen na puno radno vrijeme za veliku europsku IT korporaciju. Kada ne piše blog, svoje slobodno vrijeme provodi na široku lepezu interesa, hobija i aktivnosti, što se u određenoj mjeri može odraziti na različite teme obrađene na ovoj web stranici.