Dynamics AX 2012 の SysOperation データ コントラクト クラスでクエリを使用する
出版された: 2025年2月16日 1:22:51 UTC
最終更新日 2026年1月12日 8:47:11 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);
}
このメソッドは必ずコントローラー クラスから呼び出す必要があります。
さらに読む
この投稿が気に入った場合は、次の提案も気に入るかもしれません:
- Dynamics AX 2012 で「データ コントラクト オブジェクトにメタデータ クラスが定義されていません」というエラーが発生する
- SysExtension フレームワークを使用して Dynamics AX 2012 でインスタンス化するサブクラスを見つける
- Dynamics AX 2012 SysOperation Framework の概要
