Miklix

Dynamics AX 2012의 SysOperation 데이터 계약 클래스에서 쿼리 사용

게시됨: 2025년 2월 16일 오전 1시 22분 53초 UTC
마지막으로 업데이트되었습니다: 2026년 1월 12일 오전 8시 47분 12초 UTC

이 문서에서는 Dynamics AX 2012(및 Dynamics 365 for Operations)에서 SysOperation 데이터 계약 클래스에 사용자 구성 및 필터링이 가능한 쿼리를 추가하는 방법에 대한 자세한 내용을 다룹니다.


이 페이지는 가능한 한 많은 사람이 이용할 수 있도록 영어에서 기계 번역되었습니다. 안타깝게도 기계 번역은 아직 완성된 기술이 아니므로 오류가 발생할 수 있습니다. 원하시는 경우 여기에서 영어 원문을 보실 수 있습니다:

Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012

이 게시물의 정보는 Dynamics AX 2012 R3을 기준으로 작성되었습니다. 다른 버전에서는 유효하지 않을 수 있습니다. (업데이트: Dynamics 365 for Operations에서도 동일하게 작동하는 것을 확인했습니다.)

SysOperation 프레임워크에서 쿼리를 지정하고 초기화하는 방법에 대한 세부 사항을 항상 잊어버리는 것 같습니다. 제가 만들어 온 배치 작업 대부분은 사용자 구성 가능한 쿼리를 기반으로 하지 않지만, 가끔씩 그런 배치 작업을 만들어야 할 때가 있어서 이 글은 제 참고용으로도 남겨두려고 합니다.

먼저, 데이터 계약 클래스에서 쿼리는 문자열로 패키징되어 저장됩니다. 해당 클래스의 parm 메서드에는 다음과 같이 AifQueryTypeAttribute 속성을 추가해야 합니다(이 예에서는 SalesUpdate 쿼리를 사용했지만, 다른 AOT 쿼리로 대체할 수 있습니다).

[
    DataMemberAttribute,
    AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
    ;

    packedQuery = _packedQuery;
    return packedQuery;
}

쿼리 결과를 컨트롤러 클래스에서 결정하도록 하려면 빈 문자열을 사용할 수도 있습니다. 이 경우 몇 가지 헬퍼 메서드를 구현해야 합니다(쿼리에 접근해야 할 때 편의를 위해 어차피 구현해 두는 것이 좋습니다).

public Query getQuery()
{
    ;

    return new Query(SysOperationHelper::base64Decode(packedQuery));
}

public void setQuery(Query _query)
{
    ;

    packedQuery = SysOperationHelper::base64Encode(_query.pack());
}

쿼리를 초기화해야 하는 경우(예: 범위 추가) initQuery 메서드를 구현해야 합니다.

public void initQuery()
{
    Query queryLocal = this.getQuery();
    ;

    // add ranges, etc...

    this.setQuery(queryLocal);
}

컨트롤러 클래스에서 이 메서드를 호출해야 합니다.

추가 자료

이 글이 마음에 드셨다면 다음 제안도 마음에 드실 겁니다.


블루스카이에서 공유하기페이스북에서 공유하기LinkedIn에서 공유하기Tumblr에 공유하기X에서 공유LinkedIn에서 공유하기Pinterest에 고정

미켈 크리스텐슨

저자 소개

미켈 크리스텐슨
남자 이름은 miklix.com의 창시자이자 소유자입니다. 전문 컴퓨터 프로그래머/소프트웨어 개발자로 20년 이상 경력을 쌓았으며 현재 유럽의 대형 IT 기업에서 정규직으로 근무하고 있습니다. 블로그를 운영하지 않을 때는 여가 시간을 다양한 관심사, 취미, 활동으로 보내며 이 웹사이트에서 다루는 다양한 주제에 어느 정도 반영되어 있습니다.