Miklix

Dynamics AX 2012 SysOperation Framework の概要

出版された: 2025年2月15日 22:35:24 UTC
最終更新日 2026年1月12日 8:38:52 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のホワイトペーパーも併せてご一読いただくことを強くお勧めします。このフレームワークを用いたオペレーション開発に関係する様々なクラスについて、簡単に復習したい場合など、この投稿の情報は役立つかもしれません。

バリエーションはありますが、フレームワークを使用する場合、通常は次の 3 つのクラスを実装します。

  • データ コントラクト (SysOperationDataContractBase を拡張する必要があります)
  • サービス(SysOperationServiceBase を拡張する必要があります)
  • コントローラー (SysOperationServiceController を拡張する必要があります)

さらに、UIBuilder クラス (SysOperationUIBuilder を拡張する必要があります) を実装することもできますが、これは、何らかの理由でダイアログがフレームワークによって自動的に生成されるものよりも高度なものである必要がある場合にのみ必要です。


データ契約

データコントラクトは、操作に必要なデータメンバーを保持します。これは、RunBaseフレームワークで定義されている典型的なCurrentListマクロに似ていますが、クラスとして実装されています。データコントラクトはSysOperationDataContractBaseを拡張する必要がありますが、拡張しなくても動作します。スーパークラスを拡張する利点は、役立つ可能性のあるセッション情報を提供できることです。

[DataContractAttribute]
class MyDataContract extends SysOperationDataContractBase
{
    ItemId itemId;
}

この例では、itemId はデータメンバーです。各データメンバーに対して parm メソッドを実装し、DataMemberAttribute でタグ付けして、フレームワークがそれを認識できるようにする必要があります。これにより、フレームワークは自動的にダイアログを構築できるようになります。

[DataMemberAttribute]
public ItemId parmItemId(ItemId _itemId = itemId)
{
    ;

    itemId = _itemId;
    return itemId;
}


サービス

サービスクラスは、実際のビジネスロジックを含むクラスです。ダイアログの表示やバッチ処理などはサービスクラスが担いません。これらはコントローラークラスの責任です。サービスクラスとコントローラークラスを分離することで、コード設計が最適化され、再利用性の高いコードを作成できるようになります。

データコントラクトクラスと同様に、サービスクラスは特に何かを継承する必要はありませんが、少なくともサービスをバッチジョブとして実行することを想定している場合は、スーパークラスがバッチコンテキストに関する情報を提供するため、SysOperationServiceBaseクラスを継承する必要があります。操作を開始する(つまり、ビジネスロジックを実行する)メソッドは、データコントラクトクラスのオブジェクトを入力として受け取り、[SysEntryPointAttribute]で修飾する必要があります。例えば、次のようになります。

class MyService extends SysOperationServiceBase
{
}

runというメソッドを使用します:

[SysEntryPointAttribute]
public void run(MyDataContract _dataContract)
{
    // run business logic here
}


コントローラ

コントローラークラスは、操作の実行とバッチ処理を担当します。また、コードがCIL内で実行されるようにすることで、パフォーマンスを最大限に高めます。コントローラークラスは通常、SysOperationServiceControllerクラスを継承しますが、他のオプションもあります。

class MyController extends SysOperationServiceController
{
}

スーパークラスのコンストラクタは、クラス名、メソッド名、そして(オプションで)実行モードを引数として受け取ります。クラス名とメソッド名は、サービスクラスとその上で実行されるメソッドの名前である必要があります。したがって、コントローラーのconstructメソッドは次のように実装できます。

public static MyController construct()
{
    ;

    return new MyController(classStr(MyService),
    methodStr(MyService, run));
}

MyControllerクラスのメインメソッドは次のようにシンプルになります。

public static void main(Args _args)
{
    ;

    MyController::construct().startOperation();
}

これで基本的に完了です。上記は非常にシンプルな例であり、フレームワークには他にも多くのオプションや可能性が含まれていますが、しばらくフレームワークを使用していないときに復習が必要な場合に、簡単な概要として役立ちます。

さらに読む

この投稿が気に入った場合は、次の提案も気に入るかもしれません:


BlueskyでシェアFacebookでシェアLinkedInでシェアTumblrでシェアXでシェアLinkedInでシェアPinterest にピン留めする

ミケル・クリステンセン

著者について

ミケル・クリステンセン
ミッケルはmiklix.comの開発者でありオーナーです。プロのコンピューター・プログラマー/ソフトウェア開発者として20年以上の経験を持ち、現在はヨーロッパの大手IT企業に常勤している。ブログを書いていないときは、さまざまな興味、趣味、活動に余暇を費やしている。