如何在 Dynamics AX 2012 中從 X++ 程式碼迭代枚舉元素
已發佈: 2025年2月15日 晚上11:11:05 [UTC]
最後更新: 2026年1月12日 上午8:42:09 [UTC]
本文解釋如何在 Dynamics AX 2012 中列舉和遍歷基本枚舉的元素,並提供了一個 X++ 程式碼範例。
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
本文中的資訊是基於 Dynamics AX 2012 R3 版本,可能不適用於其他版本。
我最近在建立一個表單,需要顯示枚舉中每個元素的值。與其手動建立欄位(這樣如果枚舉被修改,就需要維護表單),我決定採用動態方式實現,以便在執行時間自動將欄位新增至表單設計。
然而,我很快就發現,雖然一旦掌握了方法,遍歷枚舉中的數值就很容易,但這其實有點令人困惑。
顯然,你需要從 DictEnum 類別入手。你會發現,這個類別提供了多種方法,可以根據索引和值來取得名稱、標籤等資訊。
索引和值之間的差異在於,索引是枚舉中元素的編號(假設枚舉元素從零開始按順序編號),而值是元素的實際「值」屬性。由於大多數枚舉的值都是從 0 開始按順序編號的,因此元素的索引和值通常會相同,但並非總是如此。
但是,如何知道枚舉包含哪些值呢?這就容易讓人困惑了。 DictEnum 類別有一個名為 values() 的方法。你可能以為這個方法會傳回枚舉值的列表,但這顯然太簡單了,所以它實際上返回的是枚舉值的數量。然而,這個數量與枚舉值本身無關,因此你需要使用這個數量作為呼叫基於索引的方法的基礎,而不是基於值的方法。
如果他們當初把這個方法命名為 indexes() 就好了,那樣就不會那麼容易混淆了 ;-)
還要記住,枚舉值(以及這些「索引」)從 0 開始,這與 X++ 中的陣列和容器索引(從 1 開始)不同,因此要遍歷枚舉中的元素,您可以這樣做:
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
這將把枚舉中每個元素的符號和標籤輸出到資訊日誌中。
進一步閱讀
如果您喜歡這篇文章,您可能也會喜歡這些建議:
- Dynamics AX 2012 SysOperation Framework 快速概覽
- 在 Dynamics AX 2012 中刪除法人實體(公司帳戶)
- 在 Dynamics AX 2012 中使用巨集和 strFmt 進行字串格式化
