Miklix

在 Dynamics AX 2012 中的 SysOperation 資料契約類別中使用查詢

已發佈: 2025年2月16日 凌晨1:23:13 [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 公司。不寫部落格時,他會將業餘時間花在各種各樣的興趣、愛好和活動上,這在一定程度上反映在本網站所涵蓋的主題的多樣性上。