Miklix

Strengjasnið með Macro og strFmt í Dynamics AX 2012

Birt: 19. mars 2025 kl. 21:33:06 UTC

Þessi grein lýsir sérkennilegri hegðun í Dynamics AX 2012 þegar fjölvi er notað sem sniðstrengur í strFmt, sem og dæmum um hvernig á að vinna í kringum það.


Þessi síða var vélþýdd úr ensku til að gera hana aðgengilega sem flestum. Því miður er vélþýðing ekki enn fullkomin tækni, svo villur geta komið upp. Ef þú vilt geturðu skoðað upprunalegu ensku útgáfuna hér:

String Formatting with Macro and strFmt in Dynamics AX 2012

Upplýsingarnar í þessari færslu eru byggðar á Dynamics AX 2012 R3. Þær kunna að vera giltar eða ekki fyrir aðrar útgáfur.

Ég mætti nýlega á vandamál með strFmt fallið sem ruglaði mig smá. Það sem var ruglandi var að ég, með einhverjum furðulegum tilviljunum, hafði aldrei áður mætt því á mínum mörgu árum sem Axapta/Dynamics AX þróunaraðili.

Vandamálið var að ég reyndi að nota macro sem sniðstreng fyrir strFmt fallið og það virkaði bara ekki. Það fór algjörlega framhjá % breytunum og skilaði bara afganginum af strengnum.

Eftir að hafa skoðað það, uppgötvaði ég að macro sjálf geta verið notuð til að sniðmátstríma strengina, sem var líka eitthvað sem ég vissi ekki. Óh well, það er alltaf gott að læra eitthvað nýtt, en ég var samt mjög hissa að ég hefði ekki rekist á þetta áður.

Í raun er þetta eitthvað eins og þetta

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

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

mun ekki virka vegna þess að % táknin í macro eru í raun notuð fyrir eigin sniðmátstrífun eigin macro. Í þessu tilfelli mun strFmt fallið sjá sniðmátstrenginn sem "--" og mun því aðeins skila því.

Eitthvað eins og þetta:

#define.FormatMacro('%1-%2-%3');
info(#FormatMacro(salesId,itemId,lineNum));

mun virka, en líklega ekki á þann hátt sem þú vilt. Í stað þess að úttak af gildum breytanna þrjú, mun það úttak heiti breytanna í staðinn, í þessu tilfelli "salesId-itemId-lineNum". (Taktu eftir að ég setti ekki bil á eftir kommum þegar ég sendi inn breytur í macro, eins og ég geri venjulega í aðferðar köllum. Það er vegna þess að macro mun í raun nota slík bil líka, svo úttakið yrði "salesId- itemId- lineNum" ef ég hefði gert það).

Til að nota macro sem sniðstreng með strFmt, þarftu að flýja % táknin með bakslá, eins og þetta:

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

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

Þetta mun í raun virka eins og þú hefðir sent sniðstrenginn beint.

Þessi litla vinna útskýrir dæmin:

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));
}
Deildu á BlueskyDeildu á FacebookDeildu á LinkedInDeildu á TumblrDeildu á XDeildu á LinkedInFestu á Pinterest

Mikkel Christensen

Um höfundinn

Mikkel Christensen
Mikkel er skapari og eigandi miklix.com. Hann hefur yfir 20 ára reynslu sem faglegur tölvuforritari/hugbúnaðarhönnuður og er nú í fullu starfi hjá stóru evrópsku upplýsingatæknifyrirtæki. Þegar hann er ekki að blogga eyðir hann frítíma sínum í margs konar áhugamál, áhugamál og athafnir, sem geta að einhverju leyti endurspeglast í margs konar efni sem fjallað er um á þessari vefsíðu.