Miklix

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ä.


Tämä sivu on käännetty koneellisesti englannista, jotta se olisi mahdollisimman monen ihmisen saatavilla. Valitettavasti konekääntäminen ei ole vielä täydellistä tekniikkaa, joten virheitä voi esiintyä. Voit halutessasi tarkastella alkuperäistä englanninkielistä versiota täällä:

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

#define.FormatMacro('%1-%2-%3')
;

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:

#define.FormatMacro('%1-%2-%3');
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:

#define.FormatMacro('\\%1-\\%2-\\%3')
;

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

Tämä toimii itse asiassa ikään kuin olisit antanut muotomerkkijonon suoraan.

Tämä pieni työ havainnollistaa esimerkkejä:

static void StrFmtMacroTest(Args _args)
{
    #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));
}
Jaa BlueskyssäJaa FacebookissaJaa LinkedInissäJaa TumblrissaJaa X:ssäJaa LinkedInissäPin Pinterestissä

Mikkel Bang Christensen

Kirjoittajasta

Mikkel Bang Christensen
Mikkel on miklix.com-sivuston luoja ja omistaja. Hänellä on yli 20 vuoden kokemus ammattimaisena tietokoneohjelmoijana/ohjelmistokehittäjänä, ja tällä hetkellä hän työskentelee kokopäiväisesti suuressa eurooppalaisessa IT-yrityksessä. Kun hän ei ole bloggaamassa, hän käyttää vapaa-aikaansa monenlaisiin kiinnostuksen kohteisiin, harrastuksiin ja aktiviteetteihin, mikä saattaa jossain määrin heijastua tällä verkkosivustolla käsiteltävien aiheiden moninaisuuteen.