Miklix

如何在 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 開始)不同,因此要遍歷枚舉中的元素,您可以這樣做:

DictEnum dictEnum = new DictEnum(enumNum(SalesStatus));
Counter  c;
;

for (c = 0; c < dictEnum.values(); c++)
{
    info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}

這將把枚舉中每個元素的符號和標籤輸出到資訊日誌中。

進一步閱讀

如果您喜歡這篇文章,您可能也會喜歡這些建議:


分享至 Bluesky在 Facebook 分享在 LinkedIn 分享在 Tumblr 上分享分享至 X在 LinkedIn 分享固定在 Pinterest 上

Mikkel Christensen

關於作者

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