Miklix

如何在 Dynamics AX 2012 中从 X++ 代码迭代枚举元素

已出版: 2025年2月15日 UTC 23:11:04
最后更新 2026年1月12日 UTC 08:42:08

本文解释了如何在 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 公司。不写博客时,他把业余时间花在各种兴趣、爱好和活动上,这在一定程度上反映在本网站涵盖的各种主题上。