Eilučių formatavimas naudojant makrokomandą ir strFmt sistemoje „Dynamics AX 2012“.
Paskelbta: 2025 m. vasario 16 d. 00:48:42 UTC
Šiame straipsnyje aprašomas tam tikras ypatingas Dynamics AX 2012 elgesys, kai makrokomandą naudojate kaip formato eilutę strFmt, taip pat pateikiami pavyzdžiai, kaip ją apeiti.
String Formatting with Macro and strFmt in Dynamics AX 2012
Šiame įraše pateikta informacija pagrįsta Dynamics AX 2012 R3. Jis gali galioti arba negalioja kitoms versijoms.
Neseniai susidūriau su strFmt funkcijos problema, kuri mane šiek tiek suglumino. Labiausiai glumina tai, kad per tam tikrą keistą sutapimą per daugelį savo „Axapta/Dynamics AX“ kūrėjo metų niekada su tuo nesusidūriau.
Problema ta, kad bandžiau naudoti makrokomandą kaip strFmt funkcijos formato eilutę ir ji tiesiog neveikė. Jis visiškai nepaisė % parametrų ir grąžino tik likusią eilutės dalį.
Panagrinėjęs, sužinojau, kad pačios makrokomandos gali būti naudojamos eilėms formatuoti, o to aš taip pat nežinojau. Na, visada gera išmokti ką nors naujo, bet vis tiek buvau labai nustebęs, kad man dar neteko su tuo susidurti.
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. Tokiu atveju funkcija strFmt matys formatavimo eilutę kaip „--“, todėl ją grąžins tik.
Kažkas panašaus:
info(#FormatMacro(salesId,itemId,lineNum));
veiks, bet tikriausiai ne taip, kaip norite. Vietoj to, kad būtų pateiktos trijų kintamųjų reikšmės , bus išvesti kintamųjų pavadinimai , šiuo atveju „salesId-itemId-lineNum“. (Atkreipkite dėmesį, kad perduodamas parametrus makrokomandai nedėjau tarpų po kablelių, kaip dažniausiai darau metodų iškvietime. Taip yra todėl, kad makrokomandoje taip pat bus naudojami tokie tarpai, todėl išvestis būtų „salesId-itemId-lineNum“, jei tai padaryčiau).
Norėdami iš tikrųjų naudoti makrokomandą kaip formatavimo eilutę su strFmt, turite atsisakyti procentinių ženklų su pasviraisiais brūkšniais, kaip nurodyta taip:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Tai iš tikrųjų veiks taip, lyg būtumėte tiesiogiai pateikę formato eilutę.
Šis mažas darbas 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));
}