乐趣区

Jerry带您了解Restful-ABAP-Programming模型系列之二Action和Validation的实现

相信通过 Jerry 的前一篇文章 30 分钟用 Restful ABAP Programming 模型开发一个支持增删改查的 Fiori 应用,想必大家对 Restful ABAP Programming 模型已经有了一个最基本的了解吧?

简单回忆一下,我们在前一篇文章里,在 SAP 云平台 ABAP 编程环境里创建了一个 Z 表,然后基于这张自定义数据库表创建了 CDS view,基于该 view 创建 Service Definition,把 view 暴露成服务,然后通过 Behavior Definition 实现对 Z 表的增删改查。

第一篇文章有朋友留言,询问通过 RAP 模型生成的 Fiori 应用如何部署到云上。这位朋友忘记了 Jerry 从始至终都是在 SAP 云平台 ABAP 环境上操作的啊,所以这个生成的 Fiori 应用也直接在云上可用了。

双击 Service Binding 里的 TravelProcessor 或者右键菜单里选择 Open Fiori Elements App Preview, 就可以访问 Fiori 应用。


稍稍有点经验的顾问朋友们都明白,一个模型只有增删改查的功能是不能满足客户实际需求的。在 SAP Cloud for Customer 里,开发顾问可以在 Cloud Application Studio 里创建 beforeSave 和 afterModify 这些脚本文件并实现业务逻辑,Jerry 也曾经介绍过,它们相当于 S /4HANA BOPF 框架里创建的 determination.

除了上述在运行时特定的时间点才能触发 (beforeSave,afterModify) 的逻辑外,Action 机制则提供了自由度更高的业务逻辑编写机制。体现在 UI 上,Action 逻辑一般通过 UI 按钮触发。

Validation 比较容易理解——自定义的数据校验逻辑。

本文按照顺序介绍 Action 和 Validation.

为了介绍在 Restful ABAP Programming 模型下如何开发 Action,Jerry 需要在第一篇文章创建的 SFLIGHT 表增添一个表示航班预订状态的字段,并开发一个 Action,当其被调用时,修改这个状态。

(1)在数据库表里增添一个 OVERALL_STATUS 字段:

当然在对应的 CDS view 上也要通过 @UI 相关的注解把这个字段配置到 UI 上。通过注解 lineItem 和 identification 分别把 view 的这个字段显示在搜索结果的 table 控件和航班信息明细页面的字段上。通过 label 指定 UI 上显示的标签,通过注解的 dataAction 把这个状态字段绑定到一个名为 acceptTravel 的 Action 上。

重新激活 CDS view 后,我们就能在工具栏上看到 CDS view 里通过 label 维护的标签文本为 Accept Travel 了:

因为缺乏实现,此时点击无效果。

(2) 在 Behavior Definition 的声明部分,添加如下三行代码:

  • action (features: instance) acceptTravel result [1] $self;
  • validation validateCustomer on save {field customer_id;}
  • validation validateDates on save {field begin_date, end_date;}

上面的代码除了定义一个 Action 外,还声明了两个 Validation,在特定字段发生变化并保存时触发校验逻辑,字段名称维护在大括号内。

剩下的就是 ABAP 编程实现了。在 Behavior Definition 的 ABAP 实现类里,声明下面这些 ABAP 类方法,来实现 Behavior Definition 里的定义。

首先看 Action 的实现,位于 ABAP 方法 SET_STATUS_COMPLETED 里:

将输入参数 travel_id 指定的航班预订记录的状态字段置为 A – Accepted.

现在我选中 ID 为 22 这条记录,点击 Accept Travel 按钮:

点击之后,状态成功被置为 A 了:

再来加上对航班日期的校验:如果航班结束日期在起始日期之前,显然不合理,需要弹一条错误消息。

第 87 行到第 91 行把输入参数包含的航班信息读到内表 lt_travel_result 里,然后第 95 行把结束日期和起始日期做比较,如果后者早于前者,进入 97 行开始的 IF 分支,弹一个错误信息到 UI.

错误信息仍然和传统的 ABAP 编程一样,通过 ABAP Message 类定义:

现在把结束日期维护成起始日期之前,保存的时候就看到了期望的错误消息:

至此,我们这个 SFLIGHT 模型除了增删改查之外,又增添了 Action 和 Validation 的功能。

这个系列的下一篇文章,Jerry 会聊聊在 SAP 云平台 ABAP 编程环境里对基于 Restful ABAP Programming 模型应用的简单调试,敬请期待。

要获取更多 Jerry 的原创文章,请关注公众号 ” 汪子熙 ”:

退出移动版