Virknes formatēšana, izmantojot makro un strFmt programmā Dynamics AX 2012
Publicēts: 2025. gada 16. februāris 00:48:43 UTC
Šajā rakstā ir aprakstītas dažas īpatnējas Dynamics AX 2012 darbības, izmantojot makro kā formāta virkni strFmt, kā arī sniegti piemēri, kā to apiet.
String Formatting with Macro and strFmt in Dynamics AX 2012
Šajā ziņā sniegtā informācija ir balstīta uz Dynamics AX 2012 R3. Tas var būt un var nebūt derīgs citām versijām.
Es nesen saskāros ar problēmu ar funkciju strFmt, kas mani mazliet mulsināja. Pats mulsinošākais bija tas, ka dīvainas sakritības dēļ es ar to nekad iepriekš nebiju saskāries savos daudzos Axapta/Dynamics AX izstrādātāja gados.
Problēma bija tāda, ka es mēģināju izmantot makro kā formāta virkni funkcijai strFmt, un tas vienkārši nedarbojās. Tas pilnībā ignorēja % parametrus un atgrieza tikai atlikušo virknes daļu.
Izpētījis to, es atklāju, ka pašus makro var izmantot virkņu formatēšanai, ko es arī nezināju. Ak, labi, vienmēr ir labi iemācīties kaut ko jaunu, bet es tik un tā biju ļoti pārsteigts, ka man ar to iepriekš nebiju gadījies sastapties.
Būtībā kaut kas līdzīgs šim
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
nedarbosies, jo % zīmes makro faktiski tiek izmantotas paša makro virknes formatēšanas līdzekļiem. Šajā gadījumā funkcija strFmt redzēs formatēšanas virkni kā "--" un tāpēc atgriezīs tikai to.
Kaut kas līdzīgs šim:
info(#FormatMacro(salesId,itemId,lineNum));
darbosies, bet, iespējams, ne tā, kā vēlaties. Tā vietā, lai izvadītu trīs mainīgo vērtības , tas izvadīs mainīgo nosaukumus , šajā gadījumā "salesId-itemId-lineNum". (Ņemiet vērā, ka, nododot parametrus makro, es neliku atstarpes aiz komatiem, kā to parasti daru metožu izsaukumos. Tas ir tāpēc, ka makro faktiski izmantos arī šādas atstarpes, tāpēc izvade būtu "salesId-itemId-lineNum", ja es to darītu).
Lai faktiski izmantotu makro kā formatēšanas virkni ar strFmt, jums ir jāizvairās no procentu zīmēm ar atpakaļvērstās slīpsvītras, piemēram:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Tas faktiski darbosies tā, it kā jūs būtu tieši norādījis formāta virkni.
Šis mazais darbs ilustrē piemērus:
{
#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));
}