在 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
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;
}
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());
}
{
;
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);
}
{
Query queryLocal = this.getQuery();
;
// add ranges, etc...
this.setQuery(queryLocal);
}
您需要確保從控制器類別呼叫此方法。