Miklix

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

已出版: 2025年2月15日 UTC 23:11:04

本文介绍如何在 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上固定

米克尔·邦·克里斯滕森

关于作者

米克尔·邦·克里斯滕森
迈克尔 是 miklix.com 的创建者和所有者。他拥有 20 多年的专业计算机程序员/软件开发人员经验,目前全职受雇于一家大型欧洲 IT 公司。不写博客时,他把业余时间花在各种兴趣、爱好和活动上,这在一定程度上反映在本网站涵盖的各种主题上。