使用ABAP CDS视图创建服务
介绍
本文介绍使用ABAP Core Data Services创建OData服务的最快方法。 给出了有关@ OData.publish注释利用率,对数据源CDS实体的引用和从DDIC结构导入的详细信息。 自定义透明表数据上显示的创建,更新和删除操作只是为了简化文章,而不是将重点从OData服务创建转移到业务流程需求实现。
“R”类型OData服务创建。 在ABAP CDS中使用@ OData.publish注释
我们假设我们有下列数据表(可能在自定义命名空间中,只是为了简化演示案例并仅关注OData服务,而不是关注SAP功能模块和类使用)

可以使用SAP HANA Studio为其创建ABAP CDS视图

在CDS激活期间,OData服务将在后台生成。
服务文档如下所示:

“R”类型OData服务创建。 使用ABAP CDS上的参考

可以使用SAP HANA Studio为其创建ABAP CDS视图。 请注意,在这种情况下,没有使用@OData注释



SAP将基于对ABAP CDS的引用生成运行时对象

服务文档如下所示:

“CRUD”类型OData服务创建

可以使用SAP HANA Studio为其创建ABAP CDS视图(未使用@OData注释)

在下一步中,我们将通过事务代码SEGW创建网关项目并导入DDIC结构(使用ABAP CDS中的@ AbapCatalog.sqlViewName值,请参见上图)



如果您正在使用具有关联的复杂CDS(例如,对于Master-Details视图),则还应创建关联和导航属性。 将添加此部分。
SAP将生成运行时对象



这里可以直接向ABAP CDS指出SELECT语句的Get_EntitySet方法
- METHOD experimentset_get_entityset.
- SELECT *
- FROM zxeq1_lexprmnt01
- INTO CORRESPONDING FIELDS OF TABLE @et_entityset
- ORDER BY PRIMARY KEY.
- ENDMETHOD.
如果设置实体集的可搜索参数,则ABAP代码实现应如下所示
- METHOD experimentset_get_entityset.
- DATA: lv_osql_where_clause TYPE string.
- "Prepare where clause
- lv_osql_where_clause = io_tech_request_context->get_osql_where_clause( ).
- "Select data
- SELECT *
- FROM zxeq1_lexprmnt01
- INTO CORRESPONDING FIELDS OF TABLE @et_entityset
- WHERE (lv_osql_where_clause)
- ORDER BY PRIMARY KEY.
- ENDMETHOD.
如果您另外设置实体集的Pageable参数,则ABAP代码应如下所示
- METHOD experimentset_get_entityset.
- DATA: lv_osql_where_clause TYPE string,
- lv_top TYPE i,
- lv_skip TYPE i,
- lv_max_index TYPE i.
- "Prepare top and skip
- lv_top = io_tech_request_context->get_top( ).
- lv_skip = io_tech_request_context->get_skip( ).
- IF lv_top IS NOT INITIAL.
- lv_max_index = lv_top + lv_skip.
- ENDIF.
- "Prepare where clause
- lv_osql_where_clause = io_tech_request_context->get_osql_where_clause( ).
- "Select data
- SELECT *
- FROM zxeq1_lexprmnt01
- INTO CORRESPONDING FIELDS OF TABLE @et_entityset
- UP TO @lv_max_index ROWS
- WHERE (lv_osql_where_clause)
- ORDER BY PRIMARY KEY.
- "Process skip
- IF lv_skip IS NOT INITIAL.
- DELETE et_entityset TO lv_skip.
- ENDIF.
- "Process inline couter
- IF io_tech_request_context->has_inlinecount( ) = abap_true.
- SELECT COUNT(*)
- FROM zxeq1_lexprmnt01 WHERE (lv_osql_where_clause).
- es_response_context-inlinecount = sy-dbcnt.
- ELSE.
- CLEAR es_response_context-inlinecount.
- ENDIF.
- ENDMETHOD.
在Get_Entity方法中,我们应该使用ABAP CDS和其他数据类型相关的对象和关键字段名称
- METHOD experimentset_get_entity.
- DATA: ls_data TYPE zcl_xeq1s_exprmnt01p_mpc=>ts_experiment.
- "Convert keys to data
- CALL METHOD io_tech_request_context->get_converted_keys
- IMPORTING
- es_key_values = ls_data.
- "Select data by keys
- SELECT SINGLE *
- INTO CORRESPONDING FIELDS OF @er_entity
- FROM zxeq1_lexprmnt01
- WHERE uname = @ls_data-uname.
- ENDMETHOD.
如果设置Creatable参数,则应实现Create_Entity方法,ABAP代码可能如下所示。 在我们当前的示例中,我们使用数据库表作为INSERT数据的目标(在更复杂和更现实的业务案例中,SAP BAPI或功能模块或ABAP类应在此处用于实现所需的业务逻辑)
- METHOD experimentset_create_entity.
- DATA: ls_data TYPE zxeq1_dexprmnt01.
- "Insert data in database
- MOVE-CORRESPONDING er_entity TO ls_data.
- INSERT zxeq1_dexprmnt01
- FROM @ls_data.
- ENDMETHOD.
如果您设置Updatable参数,那么您应该实现Update_Entity方法,如下面的示例。 在我们当前的示例中,我们使用数据库表作为UPDATE数据的目标(在更复杂和更现实的业务案例中,SAP BAPI或功能模块或ABAP类应在此处用于实现所需的业务逻辑)
- METHOD experimentset_update_entity.
- DATA: ls_data TYPE zxeq1_dexprmnt01.
- "Update data in database
- MOVE-CORRESPONDING er_entity TO ls_data.
- UPDATE zxeq1_dexprmnt01
- FROM @ls_data.
- ENDMETHOD.
如果设置了Entity Set的Deletable参数,那么您应该实现Delete_Entity方法,如下例所示。 在我们当前的示例中,我们使用数据库表作为删除数据的目标(在更复杂和更现实的业务案例中,SAP BAPI或功能模块或ABAP类应在此处用于实现所需的业务逻辑)
- METHOD experimentset_delete_entity.
- DATA: ls_data TYPE zcl_xeq1s_exprmnt01p_mpc=>ts_experiment.
- "Convert keys to data
- CALL METHOD io_tech_request_context->get_converted_keys
- IMPORTING
- es_key_values = ls_data.
- "Delete data from database
- DELETE FROM zxeq1_dexprmnt01
- WHERE uname = @ls_data-uname.
- ENDMETHOD.
创建了以下OData服务文档

结论
本文展示了一种基于ABAP CDS技术的完整CRUD功能支持的快速简单的OData服务创建方法。 可以看到基于ABAP CDS的CRUD OData服务的包装器可以创建为几个小时的活动。 我们需要的只是在其中添加ABAP逻辑,这与我们在使用Web服务之前在ABAP开发中完成的活动大致相同。 此外,在ABAP CDS视图上创建的OData服务已准备好供SAP HTML5(UI5)应用程序使用,可以从SAP Cloud Platform部署到公司本地SAP Fiori Launchpad或SAP Fiori Cloud Launchpad(Portal)。
附: 请注意,在使用SAP Fiori Cloud Launchpad的情况下,我们必须使用SAP Cloud Platform OData Provisioning Service来包装OData服务。
使用ABAP CDS视图创建服务的更多相关文章
- ABAP CDS-介绍(ABAP CDS视图)
前言 文章翻译自Tushar Sharma的文章,转载请注明原作者和译者! 在SAP发展到SAP HANA版本之后,SAP内部的技术正在快速地变化,SAP开发业务应用程序的方式已经发生了范式转变(根本 ...
- 教程:基于访问控制的ABAP CDS视图权限
Hi! 对每一个CDS视图,我们都可以通过DCL(Data Control Language)定义访问控制.在这篇文章中,我会介绍ABAP CDS视图中非常重要的一面:权限管理. 本文的阐述基于我正在 ...
- ABAP-Eclipse ADT中创建ABAP CDS视图
Create an ABAP Project in ABAP Development Tools (ADT): https://developers.sap.com/tutorials/abap-cr ...
- CDS测试框架介绍:如何为ABAP CDS Entities写测试
动机 现在大家都知道单元测试对我们代码的好处.并且我们都承认它是开发过程中不可或缺的一部分.但是在把代码切换到数据库的模式下的时候,我们被粗暴地打回了软件测试的黑暗年代...我们现在面临着逻辑下推到A ...
- ABAP CDS-Part 1(ABAP CDS实体)
文章翻译自Tushar Sharma的文章,转载请注明原作者和译者! 目录 预备条件 一.概述 二.ABAP CDS实体(CDS Entity) a.定义ABAP CDS Views b.ABAP C ...
- ABAP CDS Table Function介绍与示例
Core data services(以下简称CDS)可以指两样东西,一个是HANA CDS,一个是ABAP CDS. 如我们所知,HANA CDS只支持HANA数据库,ABAP CDS理论上支持多种 ...
- 使用PlanViz进行ABAP CDS性能分析
如管理学学者彼得·德鲁克所说:你无法管理你不能衡量的东西( If you can't measure it, you can't manage it).要对已有程序进行性能优化,首先要对它的运行状况做 ...
- 【ABAP CDS系列】ABAP CDS中的系统信息
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP CDS系列]ABAP CDS中的系统 ...
- CDS视图篇 2
核心数据服务 (CDS) 公司希望使用 SAPS/4HANA 核心数据服务 (CDS) 视图技术.需要学习 CDS 视 图的概念和结构以及语法 . ● 核心数据服务是用于业务实体的 SAP 战略建模方 ...
随机推荐
- RBTree和AVL
红黑树和AVL的相同:都是平衡二叉树,所以插入删除修改查询都非常高效. 红黑树和AVL的区别: 红黑树: 不是要求绝对平衡,付出的代价是要着色,查询次数可能会多一层,好处是减少旋转次数. AVL ...
- delegate 和 event
delegate 和 event 观察者模式 这里面综合了几本书的资料. 需求 有这么个项目: 需求是这样的: 一个气象站, 有三个传感器(温度, 湿度, 气压), 有一个WeatherData对象, ...
- SpringBoot学习(三)IDEA
一.什么是JPA JPA(Java Persistence API)定义了一系列对象持久化的标准,目前实现这一规范的产品有Hibernate.TopLink等. 二.Mysql数据库示例 1.在app ...
- bagging 和boosting的概念和区别
1.先弄清楚模型融合中的投票的概念 分为软投票和硬投票,硬投票就是几个模型预测的哪一类最多,最终模型就预测那一类,在投票相同的情况下,投票结果会按照分类器的排序选择排在第一个的分类器结果.但硬投票有个 ...
- webstorm&phpstorm打开大型项目卡死解决如vue-laravel-Yii2
用phpstorm开发时如果项目中文件过多会造成phpstorm变慢甚至卡死,尤其在node加入到我们的项目中更加会加重这种情况,因为node_modules目录中的模块非常多,phpstorm加载这 ...
- Sublime 快捷键一览表
Sublime Text 快捷键一览表 Sublime Text比起Notepad++,UltraEdit之类Code编辑器来说,其功能有过之而无不及,配合着各种插件使用,Sublime Text在实 ...
- IBAction作用相当于void,NSLog(@"被调用的方法名是%s",__func__);
IBAction作用相当于void,NSLog(@"被调用的方法名是%s",__func__);
- kakfa 开发-01
kafka 开发梳理 使用内置的zoookeeper启动 bin/zookeeper-server-start.sh config/zookeeper.properties tips: 出现0.0.0 ...
- 高考结束了,在门头沟有没有想学php建站的。
教你简单的html 教你文章后台管理 数据库管理及备份 编程工具的使用 如何找到你要学习的内容
- ubuntu server遇到的问题
1.在呢用is把隐藏的文件显示出来: ls -a 就可以啦 2.vim退出: 在命令模式中,连按两次大写字母Z,若当前编辑的文档曾被修改过,则Vi保存该文档后退出,返回到shell:若当前编辑的文档没 ...