Dynamics AX 2012의 SysOperation 데이터 계약 클래스에서 쿼리 사용
게시됨: 2025년 2월 16일 오전 1시 22분 53초 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;
}
대신 컨트롤러 클래스에서 쿼리를 결정하도록 하려면 빈 문자열을 사용할 수도 있습니다. 그런 경우, 몇 가지 도우미 메서드도 구현해야 합니다(쿼리에 액세스해야 할 때 편의를 위해 구현해야 할 수도 있음):
{
;
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
public void setQuery(Query _query)
{
;
packedQuery = SysOperationHelper::base64Encode(_query.pack());
}
쿼리를 초기화해야 하는 경우(예: 범위 추가) initQuery 메서드를 구현해야 합니다.
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
컨트롤러 클래스에서 이 메서드를 호출해야 합니다.