Eilučių formatavimas naudojant makrokomandą ir strFmt sistemoje „Dynamics AX 2012“.
Paskelbta: 2025 m. vasario 16 d. 00:48:42 UTC
Paskutinį kartą atnaujinta: 2026 m. sausio 12 d. 08:44:28 UTC
Šiame straipsnyje aprašomas keistas „Dynamics AX 2012“ veikimas, kai makrokomanda naudojama kaip formatavimo eilutė funkcijoje „strFmt“, taip pat pateikiami pavyzdžiai, kaip tai išspręsti.
String Formatting with Macro and strFmt in Dynamics AX 2012
Šiame įraše pateikta informacija pagrįsta „Dynamics AX 2012 R3“. Ji gali tikti arba netikti kitoms versijoms.
Neseniai susidūriau su problema su „strFmt“ funkcija, kuri mane šiek tiek glumino. Labiausiai glumino tai, kad kažkokiu keistu atsitiktinumu niekada anksčiau nebuvau susidūręs su ja per daugelį savo, kaip „Axapta“ / „Dynamics AX“ kūrėjo, metų.
Problema buvo ta, kad bandžiau naudoti makrokomandą kaip strFmt funkcijos formatavimo eilutę, bet tai tiesiog neveikė. Funkcija visiškai ignoravo % parametrus ir grąžino tik likusią eilutės dalį.
Pasidomėjęs atradau, kad pačios makrokomandos gali būti naudojamos eilutėms formatuoti, ko taip pat nežinojau. Na, visada smagu išmokti ką nors naujo, bet vis tiek buvau labai nustebęs, kad anksčiau su tuo nesusidūriau.
Iš esmės, kažkas panašaus
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Neveiks, nes makrokomandoje esantys % ženklai iš tikrųjų naudojami pačios makrokomandos eilutės formatavimo funkcijoms. Šiuo atveju funkcija „strFmt“ formatavimo eilutę matys kaip „--“ ir todėl grąžins tik ją.
Kažkas panašaus:
info(#FormatMacro(salesId,itemId,lineNum));
Veiks, bet tikriausiai ne taip, kaip norite. Užuot išvedęs trijų kintamųjų reikšmes, bus išvesti kintamųjų pavadinimai, šiuo atveju „salesId-itemId-lineNum“. (Atkreipkite dėmesį, kad perduodamas parametrus makrokomandai po kablelių nedėjau tarpų, kaip paprastai darau metodų iškvietimuose. Taip yra todėl, kad makrokomanda iš tikrųjų taip pat naudos tokius tarpus, todėl, jei tai padaryčiau, išvestis būtų „salesId-itemId-lineNum“).
Norint naudoti makrokomandą kaip formatavimo eilutę su strFmt, procentų ženklus reikia pakeisti atgaliniais brūkšneliais, pvz.:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Tai veiks taip, lyg būtumėte tiesiogiai pateikę formato eilutę.
Šis mažas darbelis iliustruoja pavyzdžius:
{
#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));
}
Papildoma literatūra
Jei jums patiko šis įrašas, jums taip pat gali patikti šie pasiūlymai:
- Kaip kartoti Enum elementus iš X++ kodo „Dynamics AX 2012“
- Skirtumas tarp duomenų () ir buf2Buf () Dynamics AX 2012
- Ištrinkite juridinį subjektą (įmonės paskyras) „Dynamics AX 2012“.
