Merkkijonojen muotoilu makrolla ja strFmt:llä Dynamics AX 2012:ssa
Julkaistu: 16. helmikuuta 2025 klo 0.48.25 UTC
Tässä artikkelissa kuvataan omituinen käyttäytyminen Dynamics AX 2012:ssa, kun makroa käytetään muotomerkkijonona strFmt:ssä, sekä esimerkkejä sen kiertämisestä.
String Formatting with Macro and strFmt in Dynamics AX 2012
Tämän viestin tiedot perustuvat Dynamics AX 2012 R3:een. Se voi olla tai ei ole voimassa muille versioille.
Törmäsin äskettäin strFmt-toiminnon kanssa ongelmaan, joka hämmentyi minua jonkin verran. Hämmentävintä oli se, että en oudolta sattumalta ole koskaan törmännyt siihen aiemmin monien vuosien aikana Axapta/Dynamics AX -kehittäjänä.
Ongelmana oli, että yritin käyttää makroa strFmt-funktion muotomerkkijonona, mutta se ei vain toiminut. Se jätti kokonaan huomioimatta %-parametrit ja palautti vain loppuosan merkkijonosta.
Tutkittuani asiaa huomasin, että itse makroja voidaan käyttää merkkijonojen muotoiluun, mikä oli myös jotain, jota en tiennyt. No, aina on kiva oppia jotain uutta, mutta silti yllätyin kovasti, etten ollut törmännyt tähän aiemmin.
Periaatteessa 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 ei todennäköisesti haluamallasi tavalla. Kolmen muuttujan arvojen tulostamisen sijaan se tulostaa muuttujien nimet , tässä tapauksessa "salesId-itemId-lineNum". (Huomaa, että en laittanut välilyöntejä pilkkujen perään siirtäessäni parametreja makrolle, kuten yleensä teen metodikutsuissa. Tämä johtuu siitä, että makro itse asiassa käyttää myös tällaisia välilyöntejä, joten tulos olisi "salesId-itemId-lineNum", jos niin tekisin).
Jos haluat käyttää makroa muotoilumerkkijonona strFmt:n kanssa, sinun on poistettava prosenttimerkit kenoviivalla, kuten näin:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Tämä toimii itse asiassa ikään kuin olisit antanut muotomerkkijonon 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));
}