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的原创文章,请关注公众号"汪子熙":
Jerry带您了解Restful ABAP Programming模型系列之二:Action和Validation的实现相关推荐
- Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试
Jerry的Restful ABAP Programming模型介绍系列的前两篇文章: 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用 Jerry带 ...
- 如何基于Restful ABAP Programming模型开发并部署一个支持增删改查的Fiori应用
Jerry之前的文章30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用 发布之后,有朋友问我,"没错, 我是在你的文章里看到了Fiori应用的 ...
- 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用
2016年时,Jerry曾经写过一系列关于SAP Fiori Smart Template(现在更名为Fiori Elements了)的博客,介绍了所谓的MDD开发方法论 - Metadata Dri ...
- LDA主题模型系列(二)求解之Gibbs采样
本系列分为三部分: LDA基本概念 LDA求解之Gibbs采样 LDA求解之变分推断EM算法 该篇为第二部分:LDA求解之Gibbs采样 对于Gibbs采样不了解的可以参考这里 本文只包括思路,具体的 ...
- Javascript事件模型系列(二)事件的捕获-冒泡机制及事件委托机制
一.事件的捕获与冒泡 由W3C规定的DOM2标准中,一次事件的完整过程包括三步:捕获→执行目标元素的监听函数→冒泡,在捕获和冒泡阶段,会依次检查途径的每个节点,如果该节点注册了相应的监听函数,则执行监 ...
- 使用Cloud Application Programming模型开发OData的一个实际例子
刚刚过去的SAP TechEd上,SAP CTO Juergen Mueller向外界传递了一个重要的信息:身处云时代大环境下的SAP从业者,在SAP云平台上该如何选择适合自己的开发方式? Juerg ...
- 如何修改 SAP ABAP OData 模型,使其支持 $expand 操作试读版
正如本教程的开篇介绍文章SAP OData 开发教程 - 从入门到提高(包含 SEGW, RAP 和 CDP)所提到的,SAP OData 服务开发,从实现技术上来说,可以分为三大类.因此本教程也分为 ...
- python如何做混合模型面板回归_面板Tobit模型探究(二):模型讲解以及stata实现...
第一部分 模型发展历史 Tobit模型从最初的结构式模型扩展到时间序列模型.面板数据模型以及非参数模型等形式,无论Tobit模型的结构形式如何变化,现有的估计方法基本上都是在Heckman(197 ...
- 一文带你深入理解JVM内存模型
一文带你深入理解JVM内存模型 一.JAVA的并发模型 共享内存模型 在共享内存的并发模型里面,线程之间共享程序的公共状态,线程之间通过读写内存中公共状态来进行隐式通信 该内存指的是主内存,实际上是物 ...
最新文章
- 连接此产品到计算机并打开此产品电源,n6705c 直流电源分析仪.pdf
- Postfix的bcc邮件备份
- 2020-12-14 Python PyCharm新建项目自动添加介绍和utf-8编码
- ModuleNotFoundError: No module named ‘openpyxl‘
- C# 繁体,简体 互转
- 坑了腾讯1624万!3人冒充老干妈员工诈骗腾讯 判决结果来了...
- 后视摄像头_鸡肋还是“真香”?流媒体后视镜到底值不值冲?
- c语言谭浩强ppt课件,编程_C语言学习课件_谭浩强_PPT~1216F.ppt
- 55寸电视尺寸长宽高多少
- flask常用的第三方平台,第三方库,扩展包
- 2022年顶会accepted papers list
- cf反恐穿越前线java,穿越前线反恐使命
- npm internal/modules/cjs/loader.js:883 throw err; ^ Error: Cannot find module ‘code-point-at‘ Requir
- 虫虫危机(人物图鉴)
- Vue路由守卫实现无登录只跳转到登录页面
- 通过rancher部署loki-distributed loki日志高可用集群 helm方式部署
- C/C++项目:编译最爱的童年回忆泡泡堂小游戏教程
- 富士施乐s2020扫描设置方法
- 如何突破代理获取客户的真实IP
- OpenGL 坐标系统
热门文章
- [2018/11/13]图像处理
- 获取列表中的最大的N项和最小的N项
- Linux命令更新系统时间,更新所有文件的时间(转)
- MVC视图之间调用方法总结
- linux查看端口占用程序
- CentOS 7下安装Mono
- fedora删除旧版本内核
- 编写sonar 插件:No SqaleSubCharacteristic annotation was found on class xxx
- vue 设置代理报错;occurred while trying to proxy request xxx
- Django从理论到实战(part33)--表关系