String Formatting with Macro and strFmt in Dynamics AX 2012
Objavljeno: 16. februar 2025. u 00:51:17 UTC
Posljednje ažurirano: 12. januar 2026. u 08:44:44 UTC
Ovaj članak opisuje neka neobična ponašanja u Dynamics AX 2012 pri korištenju makroa kao formatnog niza u strFmt, kao i primjere kako to zaobići.
String Formatting with Macro and strFmt in Dynamics AX 2012
Informacije u ovom postu zasnovane su na Dynamics AX 2012 R3. Mogu, ali i ne moraju biti važeće za druge verzije.
Nedavno sam naišao na problem sa funkcijom strFmt koji me je pomalo zbunio. Najzbunjujuće je bilo to što se, nekom čudnom slučajnošću, nikada prije nisam susreo s tim u svojim dugogodišnjim Axapta/Dynamics AX programerskim iskustvom.
Problem je bio u tome što sam pokušao koristiti makro kao formatni string za funkciju strFmt i jednostavno nije radio. Potpuno je ignorisao % parametre i vraćao samo ostatak stringa.
Nakon što sam istražio, otkrio sam da se sami makroi mogu koristiti za formatiranje stringova, što također nisam znao. U redu, uvijek je dobro naučiti nešto novo, ali ipak sam bio jako iznenađen što se na ovo nisam ranije slučajno susreo.
Uglavnom, nešto ovako
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Neće raditi jer se znakovi % u makrou zapravo koriste za vlastite funkcije formatiranja stringova makroa. U ovom slučaju, funkcija strFmt će vidjeti string za formatiranje kao "--" i stoga će vratiti samo to.
Nešto ovako:
info(#FormatMacro(salesId,itemId,lineNum));
Će raditi, ali vjerovatno ne onako kako želite. Umjesto ispisa vrijednosti tri varijable, ispisat će nazive varijabli, u ovom slučaju "salesId-itemId-lineNum". (Primijetite 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, tako da bi ispis bio "salesId-itemId-lineNum" ako bih to uradio).
Da biste zapravo koristili makro kao formatirajući string sa strFmt, potrebno je da iza znakova procenta upotrijebite obrnute kose crte, ovako:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Ovo će zapravo funkcionirati kao da ste direktno naveli formatni niz.
Ovaj mali zadatak ilustruje primjere:
{
#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:
- Pretvaranje realnog u niz sa svim decimalama u Dynamics AX 2012
- Kako iterirati elemente enuma iz X++ koda u Dynamics AX 2012
- Dynamics AX 2012 SysOperation Framework Brzi pregled
