在 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
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);
}
你需要確保從控制器類別中呼叫此方法。
進一步閱讀
如果您喜歡這篇文章,您可能也會喜歡這些建議:
- 在 Dynamics AX 2012 中識別文件類別並查詢 AIF 服務
- Dynamics AX 2012 中 data() 與 buf2Buf() 之間的差異
- 在 Dynamics AX 2012 中刪除法人實體(公司帳戶)
