Miklix

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


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

#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 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ä:

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

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

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));
}

Lisälukemista

Jos pidit tästä postauksesta, saatat pitää myös näistä ehdotuksista:


Jaa BlueskyssäJaa FacebookissaJaa LinkedInissäJaa TumblrissaJaa X:ssäJaa LinkedInissäPin Pinterestissä

Mikkel Christensen

Kirjoittajasta

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