在做 RAP 业务对象时,经常会碰到一类很特别的数据。它们需要拥有明确的字段、数据类型、语义注解,甚至还需要描述父子层级关系,但这些数据并不应该真正存进数据库。
一个很典型的场景就是 RAP Action。
业务对象本身可能是销售订单、采购申请、Travel、合同或者服务工单,这些对象都有自己的持久化模型。但某个 Action 执行时,调用方还要额外传入一组信息。譬如销售订单批量改价时,要传折扣比例、原因代码和备注。审批 Action 需要传审批结果、审批意见和代理审批人。某个模拟计算 Function 可能接收一组输入条件,再返回一个临时计算结果。
这些数据只存在于一次业务操作的调用过程中。
如果专门为它们建立数据库表,显然太重。如果建立普通 CDS View,又没有真正的数据源可以查询。如果只使用一个普通 ABAP Structure,又会失去 CDS Annotation、RAP 元数据和 OData 类型系统之间的统一描述能力。
这正是 CDS Abstract Entity 最合适的位置。
SAP 对 Abstract Entity 的定义非常明确。它用于在 ABAP CDS 中定义结构化数据类型,同时属于 transient entity,也就是瞬态实体。激活之后不会生成数据库对象,也不能作为 ABAP SQL 的数据源执行查询。SAP Help Portal
理解 Abstract Entit