Miklix

Dynamics AX 2012 SysOperation Framework の概要

出版された: 2025年2月15日 22:35:24 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
{
}

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

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企業に常勤している。ブログを書いていないときは、さまざまな興味、趣味、活動に余暇を費やしている。