Miklix

Oblikovanje niza s makronaredbom i strFmt u Dynamics AX 2012

Objavljeno: 16. veljače 2025. u 00:51:20 UTC
Zadnje ažuriranje: 12. siječnja 2026. u 08:44:45 UTC

Ovaj članak opisuje neka neobična ponašanja u sustavu Dynamics AX 2012 pri korištenju makronaredbe kao niza 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. Mogu, ali i ne moraju biti važeće za druge verzije.

Nedavno sam naišao na problem s funkcijom strFmt koji me je pomalo zbunjivao. Najzbunjujuće je bilo to što se nekim čudnim slučajem nikada prije nisam susreo s tim u svojim mnogim godinama kao Axapta/Dynamics AX programer.

Problem je bio u tome što sam pokušao koristiti makro kao formatni niz za funkciju strFmt i jednostavno nije radio. Potpuno je ignorirao parametre % i vraćao samo ostatak niza.

Nakon što sam to istražio, otkrio sam da se makroi mogu koristiti za formatiranje nizova, što također nisam znao. Ug svakom slučaju, uvijek je dobro naučiti nešto novo, ali ipak sam bio jako iznenađen što se na ovo nisam slučajno prije susreo.

Uglavnom, nešto ovako

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

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

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

Nešto poput ovoga:

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

Će raditi, ali vjerojatno ne onako kako želite. Umjesto ispisa vrijednosti triju varijabli, ispisat će nazive varijabli, u ovom slučaju "salesId-itemId-lineNum". (Imajte na umu da nisam stavio razmake nakon zareza prilikom prosljeđivanja parametara makrou, kao što obično radim u pozivima metoda. To je zato što će makro zapravo također koristiti takve razmake, pa bi ispis bio "salesId-itemId-lineNum" da jesam).

Da biste zapravo koristili makro kao formatirajući niz s naredbom strFmt, morate 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 naveli niz formata.

Ovaj mali zadatak 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));
}

Dodatno čitanje

Ako vam se svidio ovaj post, možda će vam se svidjeti i ovi prijedlozi:


Podijeli na BlueskyPodijelite na FacebookuPodijelite na LinkedInuPodijelite na TumblrPodijeli na XPodijelite na LinkedInuPrikvači na Pinterest

Mikkel Christensen

O autoru

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