Miklix

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

已發佈: 2025年2月16日 凌晨1:23:13 [UTC]
最後更新: 2026年1月12日 上午8:47:23 [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 上

Mikkel Christensen

關於作者

Mikkel Christensen
麥可 是 miklix.com 的創建者和所有者。他有超過 20 年的專業電腦程式設計師/軟體開發人員經驗,目前全職受僱於一家歐洲大型 IT 公司。不寫部落格時,他會將業餘時間花在各種各樣的興趣、愛好和活動上,這在一定程度上反映在本網站所涵蓋的主題的多樣性上。