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