从国家条件到买方清单,深入理解 ABAP CDS 单值过滤器派生

📅 2026/7/24 23:47:46
从国家条件到买方清单,深入理解 ABAP CDS 单值过滤器派生
一张销售订单列表准备交给业务部门使用,订单表里保存的是买方编号,业务人员真正关心的筛选条件却是国家。业务人员选择德国时,系统需要找到所有位于德国的业务伙伴,再拿这些业务伙伴编号过滤销售订单。最直接的做法,是在前端先请求业务伙伴服务,得到一批买方编号,再拼接一段很长的 OData$filter。另一种做法,是在 Gateway 扩展类或者 RAP Query Provider 里编写 ABAP 代码,手工查询业务伙伴并重写过滤条件。这两条路都能运行,但业务规则会逐渐散落在 UI、OData 服务实现和 ABAP 类里。国家与买方编号之间的关系原本属于数据模型,却被迫由消费端或者自定义代码维护。ABAP CDS 提供的@Consumption.derivation可以把这段逻辑放回数据模型。OData 客户端只需要给出国家,CDS 消费框架会访问另一个 CDS Entity,获得符合条件的买方编号,并把这些编号自动转化为主实体上的过滤条件。SAP 将这种能力称为Deriving Single-Value Filters,也就是单值过滤器派生。这里的单值并不表示最终只能得到一个值,而是表示每一个派生结果都是一个离散值,不是一个由下限和上限组成的区间。查找实体返回多行时,所有结果都可以成为主实体的过滤条件。(