Dynamics AX 2012 дээрх Макро болон strFmt-ээр мөр форматлах
Нийтэлсэн: 2025 оны гуравдугаар сарын 19 21:33:08 (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));
}