Miklix

如何在 Dynamics AX 2012 中從 X++ 程式碼迭代枚舉元素

已發佈: 2025年2月15日 晚上11:11:05 [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 類別開始。如您所見,此類有幾種方法可以從索引和值中取得名稱和標籤等資訊。

index 與 value 之間的差異在於,如果枚舉的元素從零開始依序編號,則 index 是列舉中元素的編號,而 value 是元素的實際「值」屬性。由於大多數枚舉的值從 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 上

米克爾·邦·克里斯滕森

關於作者

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