Dynamics AX 2012에서 매크로 및 strFmt를 사용한 문자열 포맷팅
게시됨: 2025년 2월 16일 오전 12시 48분 40초 UTC
마지막으로 업데이트되었습니다: 2026년 1월 12일 오전 8시 44분 27초 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));
}
추가 자료
이 글이 마음에 드셨다면 다음 제안도 마음에 드실 겁니다.
- Dynamics AX 2012의 SysOperation 데이터 계약 클래스에서 쿼리 사용
- Dynamics AX 2012에서 "데이터 계약 개체에 대해 정의된 메타데이터 클래스가 없습니다" 오류
- SysExtension 프레임워크를 사용하여 Dynamics AX 2012에서 인스턴스화할 하위 클래스 찾기
