Miklix

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;
}

代わりにコントローラ クラスによってクエリが決定されるようにしたい場合は、空の文字列を使用することもできます。その場合、いくつかのヘルパー メソッドも実装する必要があります (クエリにアクセスする必要がある場合に、自分の便宜のためにいずれにせよ実装する必要があります)。

public Query getQuery()
{
    ;

    return new Query(SysOperationHelper::base64Decode(packedQuery));
}

public void setQuery(Query _query)
{
    ;

    packedQuery = SysOperationHelper::base64Encode(_query.pack());
}

クエリを初期化する必要がある場合 (範囲を追加するなど)、initQuery メソッドを実装する必要があります。

public void initQuery()
{
    Query queryLocal = this.getQuery();
    ;

    // add ranges, etc...

    this.setQuery(queryLocal);
}

このメソッドは必ずコントローラー クラスから呼び出す必要があります。

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

ミッケル・バン・クリステンセン

著者について

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