使用RAP创建创建一个简单功能例子

这个例子中使用ABAP RESTful Application Programming Model开发一个ODATA服务,前端使用WEBIDE创建 一个SAPUI5程序 并发布到SAP中。

功能如图

使用RAP创建创建一个简单功能例子 - 第1张  | 优通SAP

其中使用到如下功能,

  • 使用define root custom entity创建一个自定义查询功能CDS;
  • CDS查询时调用自定义类方法实现自由查询返回数据;
  • CDS查询中插入数据;
  • 实现RAP的behavior中的Actions方法,并在WEB中调用些方法(删除,领料);
  • 在SAPUI5中设置最新行高亮显示,使用SAP UI5 的表达式绑定(expression binding)实现;
  • SAPUI5中使用callFunction调用CDS的ACTION,此方法也可调用SEGW中创建 的方法及BOPF中定义的ACTION.
  • SAPUI5中过滤器 filter 的开发和使用,在查询后判断查询是否成功
  • SAPUI5中支付扫码输入查询

1.创建CDS

其中的注释一开始是打算使用SAP Fiori Elements开发的,但后期发现一些细节实现不也,所以就改用SAPUI5 freestyle开发了,所以这里的注释没用使用。在这里用类ZCL_CONSIGN_SALE_QUERY来定义查询,这里定义的两个ACTION,后下一步中实现 。

CDS查询类ZCL_CONSIGN_SALE_QUERY

创建类ZCL_CONSIGN_SALE_QUERY,其中接口引入IF_RAP_QUERY_PROVIDER,并实现IF_RAP_QUERY_PROVIDER~SELECT方法,并在其中读取数据。其中字段ZTSC用来标记当前行(最新行),在SAPUI5前端为来记录最新的数据。据说,这里应该不能使用COMMIT,不过,我是查询所以应该不影响。

1.1.类方法QUERY_LENUM_ECC

2.创建behavior

在CDS上右键,选择NEW Behavior Defintion来创建一个behavior,在这里定义对应的ACTION,及对应的CLASS类zbp_i_consign_sale。其中定义了两上操作功能ACTION(ZDELETE_ALL,ZCREATE_LYD)在第一步的CDS中使用这两个ACTION.

使用RAP创建创建一个简单功能例子 - 第2张  | 优通SAP

3.创建define service

在package上左右新建立

4.创建Service Binding

选择上一步中的Define service,右键建立 一个OData V2 – UI的服务绑定ZCONSIGN_SALE_UI_V2,并发布。

使用RAP创建创建一个简单功能例子 - 第3张  | 优通SAP

5.SAP Fiori Elements开发完成

到这里我们就可以在上一步图中点击 OPEN Preview for Fiori Elements App,来浏览FIORI APP了,但些细节不满意,比如输入一个号查询后查询不到数据不能提示,查询后不能删除查询(后期点击删除功能会再次使用这里的数据再查询,结果就不对了)。所以后面改用SAPUI5 freestyle来自定义开发。

6.SAPUI5前端开发

我使用的是WEBIDE,使用模板SAP Fiori Master-Detail Applaction 选择前面服务生成 的ODATA(ZCONSIGN_SALE_UI_V2),来创建一个新的APP,然后修改MASTER的XML,JS文件,

Master.view.xml

Master.controller.js

7.SAPUI5说明

  • 在XML文件中ObjectListItem的高亮属性highlight,使用表达式绑定(expression binding)实现,代码 :”{= ${ZTSC} === 3 ? ‘Success’ : ‘None’ }”, 表示 当ODATA当前VIEW的ZTSC字段值为3时,高亮为成功(Success ,绿色),否则无色。理多的例子代码 可参看这里
  • 使用扫码对象BarcodeScannerButton实现扫条码输入,更多关于扫码的信息参考 这里,扫码成功后,我本打算让JS自动打开摄像头再次进行扫码的,这样就让手机一直处理扫码状态了。但没实现。
  • 在onSearch事件中,在FILTER后调用Model().read来验证Filter后的数据是否取到数据查询条件数据,取不到时报消息;
  • 经测试发现系统Filter完全后,SAP后端会记录最后一次查询 的条件,当ACTION(删除,领用功能)后,SAP(后端)会使用些条件再次执行查询并返回数据(我觉得这应该算是SAP的BUG,这也是为什么我不用SAP Fiori Elements开发此功能 的主要原因) ,而这我功能要求每次查询会把满足条件的数据保存至表,所以在执行Filter完成后,把查询条件置空,并再执行一下空查询。
  • 删除、领用分别调用SAP ABAP端的RAP中创建的两个ACTIONS,在JS中使用omodel.callFunction方法调用,并判断的成功失败分别处理消息。