选项和枚举

已完成

选项数据类型是基于零的枚举器类型,因此您可以将选项值转换为整数。 因此,选项数据类型是数字数据类型,原因是选项值以整数的形式存储。

要定义选项类型的变量,您不能使用在选项数据类型字段上使用的 OptionMembers 属性。 您需要在变量定义后,以逗号分隔列表的形式列出可用选项。

在 AL 中使用选项数据类型的示例。

如果要在其他对象(如其他 codeunit、页面或表)中使用相同的选项类型,则必须重新定义所有可用值。 如果您后期决定添加其他值,则需要使用此其他值修改所有对象。 表中的选项不能通过表扩展进行扩展。

更好的方法是使用枚举对象。 枚举是一个单独的对象,具有自己的编号和名称。 您可以在所有其他对象中使用枚举对象,无需重新定义。 枚举对象也可以通过枚举扩展进行扩展。

枚举类型(在编程中也称为枚举)是用于声明由一组命名常量组成的类型的关键字。 命名常量列表称为枚举列表。 枚举可以用作表字段、局部和全局变量以及参数。

要在 AL 中声明枚举,必须指定 ID名称。 枚举列表由各种值组成,每个值都通过 ID 和值进行声明。 值 ID 是枚举列表中的序号值,且必须唯一。 当在 UI 中显示枚举值时,枚举值按声明顺序排序。 此外,如果扩展 B 用于扩展扩展 A,则扩展 A 中声明的枚举值显示在扩展 B 中声明的枚举值之前。

在 AL 中使用枚举对象类型的示例。

虽然枚举和 enumextension 对象具有对象 ID,但许可证不会强制执行这些值。 在先前版本中,它们重复使用表的范围,并在部署时根据许可证进行检查,但现在无需如此。 现在,在安装过程中会强制执行唯一性验证,如果枚举对象 ID 与已安装的枚举发生冲突,则验证失败。 因此跟以前一样,必须使用指定范围内的对象 ID,这点至关重要。 这适用于 AppSource 应用,但不适用于每租户扩展或本地扩展。 枚举不必使用与其所在表中相同的 ID。

只能扩展 Extensible 属性设置为“true”的枚举。

为枚举创建标题时,标题务必不能包含逗号。 如果在标题中使用逗号(例如 Caption = 'Diamond Level, with bonus'),会在 UI 中显示为多行。 此行为还会导致用户在 UI 中选择的实际值与数据库中保存的值不对应。

如果 .xlf 文件在枚举标题中包含逗号,则会触发 AppSourceCop 警告。

可以扩展枚举以向枚举列表添加更多值,在这种情况下,必须将“Extensible”属性设置为“true”。 枚举扩展的语法如下所示,其中使用值“Diamond”扩展“Loyalty”枚举。

	enumextension 50130 LoyaltyWithDiamonds extends Loyalty
	{
	    value(50130; Diamond)
	    {
	        Caption = 'Diamond Level';
	    }
	}