Dynamics AX 2012 の SysOperation データ コントラクト クラスでクエリを使用する
出版された: 2025年2月16日 1:22:51 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);
}
このメソッドは必ずコントローラー クラスから呼び出す必要があります。