相信通过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的实现的更多相关文章

  1. Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试

    Jerry的Restful ABAP Programming模型介绍系列的前两篇文章: 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用 Jerry带 ...

  2. 如何基于Restful ABAP Programming模型开发并部署一个支持增删改查的Fiori应用

    Jerry之前的文章30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用 发布之后,有朋友问我,"没错, 我是在你的文章里看到了Fiori应用的 ...

  3. 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用

    2016年时,Jerry曾经写过一系列关于SAP Fiori Smart Template(现在更名为Fiori Elements了)的博客,介绍了所谓的MDD开发方法论 - Metadata Dri ...

  4. I/O模型系列之二:Unix的五种网络I/O模型

    1. Unix的五种I/O模型 从上往下:阻塞程度(高-----低)I/O效率  (低-----高) 阻塞I/O(Blocking I/O):传统的IO模型 非阻塞I/O(Non-Blocking I ...

  5. Javascript事件模型系列(二)事件的捕获-冒泡机制及事件委托机制

    一.事件的捕获与冒泡 由W3C规定的DOM2标准中,一次事件的完整过程包括三步:捕获→执行目标元素的监听函数→冒泡,在捕获和冒泡阶段,会依次检查途径的每个节点,如果该节点注册了相应的监听函数,则执行监 ...

  6. 使用SAP Cloud Application Programming模型开发OData的一个实际例子

    刚刚过去的SAP TechEd上,SAP CTO Juergen Mueller向外界传递了一个重要的信息:身处云时代大环境下的SAP从业者,在SAP云平台上该如何选择适合自己的开发方式? Juerg ...

  7. JVM 系列(二)内存模型

    02 JVM 系列(二)内存模型 一.JVM 内存区域 JVM 会将 Java 进程所管理的内存划分为若干不同的数据区域.这些区域有各自的用途.创建/销毁时间: 一. 线程私有区域 线程私有数据区域生 ...

  8. Javascript事件模型系列(四)我所理解的javascript自定义事件

    被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情,公司的个人的,搞的自己心烦意乱浮躁了一 ...

  9. 文本主题模型之LDA(二) LDA求解之Gibbs采样算法

    文本主题模型之LDA(一) LDA基础 文本主题模型之LDA(二) LDA求解之Gibbs采样算法 文本主题模型之LDA(三) LDA求解之变分推断EM算法(TODO) 本文是LDA主题模型的第二篇, ...

随机推荐

  1. 003-结构型-02-装饰模式(Decorator)

    一.概述 装饰( Decorator )模式又叫做包装模式.通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案.他是23种设计模式之一,英文叫Decorator Pattern,又叫 ...

  2. visual studio code利用自身携带debug调试

    在.vscode文件夹下,添加如下文件 1) launch.json 内容如下 { "version": "0.2.0", "configuratio ...

  3. 【Redis】CacheCloud介绍及快速开始

    CacheCloud是做什么的 CacheCloud提供一个Redis云管理平台:实现多种类型(Redis Standalone.Redis Sentinel.Redis Cluster)自动部署.解 ...

  4. CentOS7下使用Sentinel实现Redis集群高可用

    Sentinel是Redis官方提供的一种高可用方案(除了Sentinel,Redis Cluster是另一种方案),它可以自动监控Redis master/slave的运行状态,如果发现master ...

  5. PHP5.2\5.3 Xdebug 调试器配置及应用

    PHP5.2添加的扩展方式:zend_extension_ts=D:\www\Server\php5\ext\php_xdebug-2.1.0-5.2-vc6.dll PHP5.3添加的扩展方式:ze ...

  6. 原生JavaScript常用本地浏览器存储方法三(UserData IE Only)

    UserData的应用范围 serData是微软为IE专门在系统中开辟的一块存储空间,所以说只支持Windows+IE的组合,实际测试在2000(IE5.5).XP(IE6.IE7),Vista(IE ...

  7. PRECONDITION_FAILED - inequivalent arg 'type' for exchange 'exchange' in vhost '/': received 'direct

    最近在搞rabbitmq,把解决问题方法记下 问题1:PRECONDITION_FAILED - inequivalent arg 'type' for exchange 'exchange' in ...

  8. hadoop(四)MapReduce

    如果将 Hadoop 比做一头大象,那么 MapReduce 就是那头大象的电脑.MapReduce 是 Hadoop 核心编程模型.在 Hadoop 中,数据处理核心就是 MapReduce 程序设 ...

  9. MApp_ZUI_CTL_MarqueeTextWinProc字串滚动

    /////////////////////////////////////////////////////////////////////////////// /// global MApp_ZUI_ ...

  10. gitlab 重置密码

    sudo gitlab-rails console production --------------------------------------------------------------- ...