Dynamics AX 2012 SysOperation 프레임워크 빠른 개요
게시됨: 2025년 2월 15일 오후 10시 35분 25초 UTC
마지막으로 업데이트되었습니다: 2026년 1월 12일 오전 8시 38분 53초 UTC
이 문서에서는 Dynamics AX 2012 및 Dynamics 365 for Operations의 SysOperation 프레임워크에서 처리 클래스와 배치 작업을 구현하는 방법에 대한 간략한 개요(또는 요약)를 제공합니다.
Dynamics AX 2012 SysOperation Framework Quick Overview
이 게시물의 정보는 Dynamics AX 2012 R3을 기준으로 작성되었습니다. 다른 버전에서는 유효하지 않을 수 있습니다. (업데이트: 이 글의 정보는 Dynamics 365 for Operations에서도 유효한 것으로 확인되었습니다.)
이 글은 간단한 개요 및 요약 정보 제공을 목적으로 작성되었습니다. SysOperation 프레임워크를 처음 접하는 경우, Microsoft에서 제공하는 관련 백서를 읽어보시기를 강력히 권장합니다. 이 글의 내용은 해당 프레임워크를 사용하여 작업을 개발하는 데 필요한 다양한 클래스에 대한 간략한 복습에만 유용할 수 있습니다.
다양한 변형이 있지만, 제가 프레임워크를 사용할 때는 일반적으로 세 가지 클래스를 구현합니다.
- 데이터 계약(SysOperationDataContractBase를 확장해야 함)
- 서비스(SysOperationServiceBase를 확장해야 함)
- 컨트롤러(SysOperationServiceController를 상속해야 함)
또한, UIBuilder 클래스(SysOperationUIBuilder를 상속해야 함)를 구현할 수도 있지만, 이는 어떤 이유로든 프레임워크가 자동으로 생성하는 것보다 더 복잡한 대화 상자가 필요한 경우에만 필요합니다.
데이터 계약
데이터 계약은 작업에 필요한 데이터 멤버를 포함합니다. 이는 RunBase 프레임워크에서 정의되는 일반적인 CurrentList 매크로와 유사하지만, 클래스로 구현되어 있습니다. 데이터 계약은 SysOperationDataContractBase를 상속해야 하지만, 상속하지 않아도 작동합니다. 상위 클래스를 상속하면 유용한 세션 정보를 제공받을 수 있다는 장점이 있습니다.
class MyDataContract extends SysOperationDataContractBase
{
ItemId itemId;
}
이 예제에서 itemId는 데이터 멤버입니다. 각 데이터 멤버에 대해 parm 메서드를 구현하고 DataMemberAttribute 태그를 지정해야 프레임워크가 해당 멤버를 인식할 수 있습니다. 이렇게 하면 프레임워크가 자동으로 대화 상자를 생성할 수 있습니다.
public ItemId parmItemId(ItemId _itemId = itemId)
{
;
itemId = _itemId;
return itemId;
}
서비스
서비스 클래스는 실제 비즈니스 로직을 담고 있는 클래스입니다. 다이얼로그 표시, 일괄 처리 등은 서비스 클래스의 역할이 아니며, 컨트롤러 클래스의 책임입니다. 이렇게 로직을 분리하면 코드를 더 잘 설계하고 재사용성을 높일 수 있습니다.
데이터 계약 클래스와 마찬가지로 서비스 클래스는 특정 클래스를 상속할 필요는 없지만, 서비스가 배치 작업으로 실행될 것으로 예상되는 경우에는 SysOperationServiceBase 클래스를 상속하는 것이 좋습니다. 상위 클래스가 배치 컨텍스트에 대한 정보를 제공하기 때문입니다. 작업을 시작하는 메서드(즉, 비즈니스 로직을 실행하는 메서드)는 데이터 계약 클래스의 객체를 입력으로 받아야 하며, [SysEntryPointAttribute] 데코레이터를 사용해야 합니다. 예를 들면 다음과 같습니다.
{
}
run이라는 메서드를 사용하여:
public void run(MyDataContract _dataContract)
{
// run business logic here
}
제어 장치
컨트롤러 클래스는 작업의 실행 및 일괄 처리를 담당합니다. 또한 최대 성능을 위해 코드가 CIL(클라이언트 인터럽트 로직)에서 실행되도록 합니다. 컨트롤러 클래스는 일반적으로 SysOperationServiceController 클래스를 상속받지만, 다른 옵션도 있습니다.
{
}
슈퍼 클래스의 생성자는 클래스 이름, 메서드 이름, 그리고 (선택적으로) 실행 모드를 매개변수로 받습니다. 클래스 이름과 메서드 이름은 서비스 클래스의 이름과 해당 서비스 클래스에서 실행될 메서드 이름이어야 합니다. 따라서 컨트롤러의 생성자 메서드는 다음과 같이 구현할 수 있습니다.
{
;
return new MyController(classStr(MyService),
methodStr(MyService, run));
}
그러면 MyController 클래스의 main 메서드는 다음과 같이 간단해질 수 있습니다.
{
;
MyController::construct().startOperation();
}
이것으로 기본적으로 완료되었습니다. 위 예시는 매우 간단한 예시이며, 프레임워크에는 훨씬 더 많은 옵션과 가능성이 있지만, 오랫동안 프레임워크를 사용하지 않았을 때 빠르게 개요를 확인할 수 있습니다.
추가 자료
이 글이 마음에 드셨다면 다음 제안도 마음에 드실 겁니다.
- Dynamics AX 2012에서 "데이터 계약 개체에 대해 정의된 메타데이터 클래스가 없습니다" 오류
- Dynamics AX 2012에서 매크로 및 strFmt를 사용한 문자열 포맷팅
- SysExtension 프레임워크를 사용하여 Dynamics AX 2012에서 인스턴스화할 하위 클래스 찾기
