Merkkijonojen muotoilu makrolla ja strFmt:llä Dynamics AX 2012:ssa
Julkaistu: 16. helmikuuta 2025 klo 0.48.25 UTC
Viimeksi päivitetty: 12. tammikuuta 2026 klo 8.44.24 UTC
Tässä artikkelissa kuvataan Dynamics AX 2012:n erikoista toimintaa, kun makroa käytetään muotoilumerkkijonona strFmt-funktiossa, sekä annetaan esimerkkejä siitä, miten se voidaan kiertää.
String Formatting with Macro and strFmt in Dynamics AX 2012
Tämän viestin tiedot perustuvat Dynamics AX 2012 R3 -versioon. Ne eivät välttämättä päde muihin versioihin.
Kohtasin hiljattain strFmt-funktion ongelman, joka hämmensi minua hetken. Hämmentävintä oli, että jostain oudosta sattumasta johtuen en ollut koskaan aiemmin törmännyt siihen monien Axapta/Dynamics AX -kehittäjävuosieni aikana.
Ongelmana oli, että yritin käyttää makroa strFmt-funktion muotoilumerkkijonona, mutta se ei yksinkertaisesti toiminut. Se jätti %-parametrit kokonaan huomiotta ja palautti vain loput merkkijonosta.
Tutkittuani asiaa huomasin, että makroja itsessään voi käyttää merkkijonojen muotoiluun, mikä oli sekin asia, jota en tiennyt. No, aina on hyvä oppia jotain uutta, mutta olin silti hyvin yllättynyt, etten ollut sattunut törmäämään tähän aiemmin.
Pohjimmiltaan jotain tällaista
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Ei toimi, koska makron %-merkkejä käytetään itse asiassa makron omiin merkkijonojen muotoiluominaisuuksiin. Tässä tapauksessa strFmt-funktio näkee muotoilumerkkijonon muodossa "--" ja palauttaa siksi vain sen.
Jotain tällaista:
info(#FormatMacro(salesId,itemId,lineNum));
Toimii, mutta luultavasti ei haluamallasi tavalla. Kolmen muuttujan arvojen sijaan se tulostaa muuttujien nimet, tässä tapauksessa "salesId-itemId-lineNum". (Huomaa, etten laittanut välilyöntejä pilkkujen jälkeen välittäessäni parametreja makrolle, kuten yleensä teen metodikutsuissa. Tämä johtuu siitä, että makro käyttää itse asiassa myös tällaisia välilyöntejä, joten tuloste olisi "salesId-itemId-lineNum", jos olisin tehnyt niin).
Jotta makroa voidaan käyttää muotoilumerkkijonona strFmt-funktion kanssa, prosenttimerkkien väliin on vaihdettava kenoviivat, kuten tässä:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Tämä toimii itse asiassa ikään kuin olisit syöttänyt muotoilumerkkijonon suoraan.
Tämä pieni työ havainnollistaa esimerkkejä:
{
#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));
}
Lisälukemista
Jos pidit tästä postauksesta, saatat pitää myös näistä ehdotuksista:
- Virhe "Datasopimusobjektille ei ole määritetty metatietoluokkaa" Dynamics AX 2012:ssa
- Ero data():n ja buf2Buf():n välillä Dynamics AX 2012:ssa
- Poista oikeushenkilö (yritystilit) Dynamics AX 2012:ssa
