把 SQLScript 计算能力嵌入 ABAP CDS,Scalar Function 从定义到运行机制 在一个 SAP S/4HANA 项目里,我们经常会碰到这样一类需求。业务计算本身并不复杂,输入几个字段,经过一段运算,得到一个结果,但问题在于这段计算超出了普通 ABAP CDS 表达式最舒服的能力范围。例如 Travel 数据模型里有一笔旅行订单,总价为1000 EUR,其中 Booking Fee 为25 EUR。业务希望直接在 CDS 层得到手续费占总价的百分比,也就是2.5。如果只是一次简单除法,当然可以考虑直接写 CDS 表达式。但当计算逐渐加入条件分支、数据库函数、复杂数值处理,甚至某些只有 SAP HANA SQLScript 才具备的能力时,把所有逻辑硬塞进 CDS expression 很快就会失去可读性。这正是 SQL-based CDS Scalar Function 很适合处理的一类问题。Scalar Function可以接收一个或多个标量输入参数,但每次调用只返回一个标量结果。它不像 CDS Table Function 那样返回一张结果表,而更接近我们平时使用的abs、round、substring这一类函数。差别在于,普通内置函数由 SAP 提供,而 SQL-based Scalar Function 可以由我们自己定义接口,并通过 AMDP 使用 SAP HANA SQLScript 编写真正的计算逻辑。SAP 官方文档给出的模型也很清楚,一个完整的 CDS Scalar Function 并不是单独一个 CDS 对象,而是由几个 Repository 对象共同组成。Scal