让 CDS 自动推导日期区间,完整理解 @Consumption.derivation 的范围过滤机制
在SAP Fiori列表报表里打开销售订单查询页,过滤栏里没有填写订单日期,页面却希望自动显示某个业务季度的数据。这个需求看起来很普通,真正落到ABAP CDS建模时却有一个容易被忽略的问题,业务季度并不一定等同于自然季度。集团可能采用四四五会计日历,零售公司可能按照促销周期划分财务期间,不同公司代码甚至可能维护不同的起止日期。把季度边界硬编码在消费视图里,不但难维护,也会让核心数据模型和业务配置紧紧绑在一起。
@Consumption.derivation提供了一种更适合消费层的做法。主实体负责暴露销售订单,查找实体负责保存或计算季度边界,运行时再把查找实体里的下限和上限带回主实体,自动形成订单日期的过滤区间。SAP 官方将这类场景称为Deriving Filter Ranges,也就是过滤区间派生。它依赖lookupEntity、resultElement、resultElementHigh和binding这几组注解,把过滤条件从另一张CDS实体中推导出来。
这套机制最适合解决一种问题,过滤范围由业务配置、系统上下文或主实体参数共同决定,而且希望在没有人工输入时自动生效。它不是在CDS源码中直接写死一个where条件,也不是在前端控制器里拼接一段$filter,而是把缺省过滤规则放进数据模型的消费语义中。
对于仍在使用经典SAP Gateway Foundatio
