ABAP Cloud 日期处理新思路,从 I_CalendarDate 到可测试的 Date Functions 封装
在 SAP 项目里,日期计算属于那种看起来不起眼,真正写起来却很容易散落一地的基础逻辑。财务月结程序需要得到某个记账日期所在月份的最后一天,销售报表需要判断订单日期属于第几个季度,RAP 应用需要按照自然周汇总业务数据,接口程序可能还要判断一个日期究竟是星期几。放在传统 ABAP On-Premise 开发里,我们很自然会想到各种函数模块,甚至项目里还会积累一批自己的Z函数,把月末、季度、星期、周数等计算包装起来。到了 ABAP Cloud,这条路就不再那么自然了。这里需要把一个概念说准确。经典 ABAP 中的函数模块并没有突然消失,也不能笼统地认为 Function Module 技术已经失效。真正发生变化的是 ABAP Cloud 的访问模型。ABAP for Cloud Development属于受限制的 ABAP Language Version,代码不能随意引用 SAP 内部 Repository Object,而需要依赖针对 Cloud Development 发布的稳定 API。SAP 官方文档明确说明,ABAP Cloud 通过 Released API 与 Release Contract 控制 SAP 标准对象的访问边界,这也是 Upgrade Stability 和 Clean Core 能够成立的重要技术基础。于是,一个很实际的问题出现了。如果我们的 RAP Behavior Implementation 里有一个PostingDate,业务需要得到这个日期所在季度、星期、月初、月末和周一,还能不能继续像经典 ABAP 那样到处找函数模块来完成这些事情。