
在一个运行了多年的 SAP S/4HANA 系统里,经常能看到这样一类字段,订单状态用N、P、A、R表示,接口处理结果用0、1、2表示,审批状态又可能使用NEW、APPROVED、REJECTED。数据库里存储这些值并不困难,真正麻烦的是业务语义逐渐散落到了程序的各个角落。一段 ABAP 判断status = 'A',另一段 CDS View 写Status = 'A',某个 RAP Behavior Implementation 继续判断'A',到了 OData Service 或 UI 层,又必须知道A究竟代表 Approved、Active 还是 Accepted。这些值在技术上只是字符,在业务上却承担着明确的领域含义。过去 ABAP 开发里经常使用 Domain Fixed Values、常量接口或者 Class Constants 解决这个问题。到了现代 ABAP CDS 数据模型中,SAP 又提供了一种更接近语言级类型系统的表达方式,这就是 CDS Enumerated Types,也就是 CDS 枚举类型。SAP 官方对它的定位很明确,CDS Enumerated Type 可以定义一个固定的预定义常量集合,使用该枚举类型声明的变量、CDS 元素或者数据对象,只能接受这个集合中的合法值。非法值并不只是一个业