Форматирање низа помоћу макроа и стрФмт-а у Динамицс АКС 2012
Објављено: 16. фебруар 2025. 00:52:31 UTC
Овај чланак описује неко необично понашање у Динамицс АКС 2012 када се користи макро као стринг формата у стрФмт-у, као и примери како да то заобиђете.
String Formatting with Macro and strFmt in Dynamics AX 2012
Информације у овом посту су засноване на Динамицс АКС 2012 Р3. Може, али и не мора бити важеће за друге верзије.
Недавно сам наишао на проблем са функцијом стрФмт који ме је мало збунио. Оно што је највише збунило било је то што се неким чудним случајем никада раније нисам сусрео са тим током мојих много година као Акапта/Динамицс АКС програмер.
Проблем је био у томе што сам покушао да користим макро као стринг формата за функцију стрФмт и једноставно није успело. Потпуно је игнорисао % параметре и вратио само остатак стринга.
Након што сам га погледао, открио сам да се сами макрои могу користити за форматирање стрингова, што такође нисам знао. Па добро, увек је добро научити нешто ново, али сам ипак био веома изненађен што нисам случајно наишао на ово раније.
У суштини, овако нешто
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
неће функционисати јер се знаци % у макроу заправо користе за карактеристике форматирања низова самог макроа. У овом случају, стрФмт функција ће видети стринг за форматирање као "--" и стога ће само то вратити.
Нешто овако:
info(#FormatMacro(salesId,itemId,lineNum));
ће радити, али вероватно не онако како желите. Уместо излаза вредности три променљиве, уместо тога ће се исписати имена променљивих, у овом случају "салесИд-итемИд-линеНум". (Примијетите да нисам ставио размаке након зареза приликом просљеђивања параметара макроу, као што обично радим у позивима метода. То је зато што ће макро заправо користити и такве размаке, па би излаз био „салесИд- итемИд-линеНум“ ако јесам).
Да бисте заправо користили макро као стринг за форматирање са стрФмт, морате да избегнете знаке процента помоћу обрнутих косих црта, као што је ово:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Ово ће заправо функционисати као да сте директно доставили стринг формата.
Овај мали посао илуструје примере:
{
#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));
}