Dynamics AX 2012에서 X++ 코드의 열거형 요소를 반복하는 방법
게시됨: 2025년 2월 15일 오후 11시 10분 41초 UTC
마지막으로 업데이트되었습니다: 2026년 1월 12일 오전 8시 41분 59초 UTC
이 문서에서는 X++ 코드 예제를 포함하여 Dynamics AX 2012에서 기본 열거형의 요소를 열거하고 반복하는 방법을 설명합니다.
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
이 게시물의 정보는 Dynamics AX 2012 R3을 기준으로 작성되었습니다. 다른 버전에서는 유효하지 않을 수 있습니다.
최근에 열거형의 각 요소에 대한 값을 표시해야 하는 폼을 만들고 있었습니다. 필드를 수동으로 생성하고 열거형이 수정될 때마다 폼을 유지 관리해야 하는 번거로움을 피하기 위해, 실행 시 자동으로 필드에 필드를 추가하는 동적 방식을 구현하기로 했습니다.
하지만 곧 열거형의 값을 순회하는 것이 방법을 알면 쉽긴 하지만, 실제로 해보면 다소 복잡하다는 것을 알게 되었습니다.
당연히 DictEnum 클래스부터 시작해야 합니다. 보시다시피, 이 클래스에는 인덱스와 값 모두에서 이름이나 레이블과 같은 정보를 얻는 여러 메서드가 있습니다.
인덱스와 값의 차이점은 인덱스는 열거형 요소가 0부터 순차적으로 번호가 매겨져 있을 때 해당 요소의 번호를 나타내는 반면, 값은 요소의 실제 "값" 속성이라는 것입니다. 대부분의 열거형은 값이 0부터 순차적으로 번호가 매겨져 있으므로 요소의 인덱스와 값이 같은 경우가 많지만 항상 그런 것은 아닙니다.
하지만 열거형이 어떤 값을 가지고 있는지 어떻게 알 수 있을까요? 바로 이 부분이 혼란스러울 수 있습니다. DictEnum 클래스에는 values()라는 메서드가 있습니다. 이 메서드가 열거형의 값 목록을 반환할 것이라고 예상할 수도 있지만, 그렇게 간단하면 안 되겠죠. 대신 이 메서드는 열거형이 가지고 있는 값의 개수를 반환합니다. 하지만 이 값의 개수는 실제 값과는 아무런 관련이 없으므로, 값 기반 메서드가 아닌 인덱스 기반 메서드를 호출할 때 이 개수를 기준으로 삼아야 합니다.
이 메서드 이름을 indexes()라고 지었더라면 덜 헷갈렸을 텐데 ;-)
또한 열거형 값(그리고 이러한 "인덱스")은 X++의 배열 및 컨테이너 인덱스가 1부터 시작하는 것과는 달리 0부터 시작한다는 점을 명심하십시오. 따라서 열거형의 요소를 순회하려면 다음과 같이 할 수 있습니다.
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
이렇게 하면 열거형의 각 요소에 대한 기호와 레이블이 정보 로그에 출력됩니다.
추가 자료
이 글이 마음에 드셨다면 다음 제안도 마음에 드실 겁니다.
- Dynamics AX 2012에서 data()와 buf2Buf()의 차이점
- Dynamics AX 2012에서 "데이터 계약 개체에 대해 정의된 메타데이터 클래스가 없습니다" 오류
- SysExtension 프레임워크를 사용하여 Dynamics AX 2012에서 인스턴스화할 하위 클래스 찾기
