Miklix

String formatiranje sa makro i strFmt u Dinamics AKS KSNUMKS

Objavio: 19. mart 2025. 21:33:11 UTC

Ovaj članak opisuje neko čudno ponašanje u Dinamics AKS 2012 kada se koristi makro kao string formata u strFmt, kao i primere o tome kako ga zaobići.


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

String Formatting with Macro and strFmt in Dynamics AX 2012

Informacije u ovom postu zasnovane su na Dynamics AX 2012 R3. Moguće je da nisu validne za druge verzije.

Nedavno sam naišao na problem sa funkcijom strFmt koja me na trenutak zbunila. Najzbunjujući deo je bio to što sam, uz neku čudnu slučajnost, nikada ranije nisam naišao na njega tokom svojih mnogobrojnih godina rada kao Axapta/Dynamics AX developer.

Problem je bio što sam pokušao da koristim makro kao format string za funkciju strFmt i to jednostavno nije funkcionisalo. Potpuno je ignorisalo % parametre i samo je vratilo ostatak stringa.

Posle istraživanja, otkrio sam da se makroi sami mogu koristiti za formatiranje stringova, što je takođe nešto što nisam znao. Pa dobro, uvek je dobro naučiti nešto novo, ali sam i dalje bio veoma iznenađen što nisam ranije naišao na ovo.

U suštini, nešto ovako

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

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

neće raditi jer se % simboli u makrou zapravo koriste za vlastite funkcije formatiranja stringa makroa. U ovom slučaju, funkcija strFmt će videti formatiranje stringa kao "--" i stoga će vratiti samo to.

Nešto ovako:

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

će raditi, ali verovatno ne onako kako biste želeli. Umesto da izlaz bude vrednosti tri varijable, izlaz će biti imena varijabli, u ovom slučaju "salesId-itemId-lineNum". (Primećujete da nisam stavio razmake nakon zareza prilikom prosleđivanja parametara makrou, kao što obično radim u pozivima metoda. To je zato što makro zapravo koristi takve razmake, pa bi izlaz bio "salesId- itemId- lineNum" da sam ih stavio).

Da biste zapravo koristili makro kao formatiranje stringa sa strFmt, morate da escape-ujete procentne znakove pomoću backslash-a, ovako:

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

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

Ovo će zapravo raditi kao da ste direktno prosledili format string.

Ovaj mali posao ilustruje primere:

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));
}
Podeli na BlueskiPodeli na FejsbukuPodeli na LinkedInPodeli na TumblrPodeli na XPodeli na LinkedInPin na Pinterest

Mikkel Christensen

O autoru

Mikkel Christensen
Mikel je tvorac i vlasnik miklix.com. Ima preko 20 godina iskustva kao profesionalni kompjuterski programer / programer i trenutno je zaposlen sa punim radnim vremenom za veliku evropsku IT korporaciju. Kada ne bloguje, on provodi svoje slobodno vreme na širokom spektru interesovanja, hobija i aktivnosti, što se u određenoj meri može odraziti na različite teme koje se obrađuju na ovoj veb stranici.