Dynamics AX 2012에서 매크로 및 strFmt를 사용한 문자열 포맷팅
게시됨: 2025년 2월 16일 오전 12시 48분 40초 UTC
이 문서에서는 strFmt에서 매크로를 형식 문자열로 사용할 때 Dynamics AX 2012에서 발생하는 몇 가지 특이한 동작과 이를 해결하는 방법에 대한 예를 설명합니다.
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));
}