使用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注释

在下一步中,我们将通过事务代码SEGW创建网关项目,并将其引用到上一步ABAP CDS中创建的

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

服务文档如下所示:

“CRUD”类型OData服务创建

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

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

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

SAP将生成运行时对象

对于“CRUD”类型的OData服务,我们应该设置实体集的参数,然后实现它们中的每一个。

导航到ABAP Workbench并重新定义* DPC_EXT类的方法以进行CRUD操作

这里可以直接向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服务。

原文地址:https://www.cnblogs.com/yjyongil/p/10646659.html

时间: 2024-07-31 15:04:29

使用ABAP CDS视图创建服务的相关文章

教程:基于访问控制的ABAP CDS视图权限

Hi! 对每一个CDS视图,我们都可以通过DCL(Data Control Language)定义访问控制.在这篇文章中,我会介绍ABAP CDS视图中非常重要的一面:权限管理. 本文的阐述基于我正在使用的S4/HANA 1610 on NW 7.51. 内容分为五个部分: 标准示例的访问控制. 基于PFCG权限创建一个简单的例子. 带有CUBE数据类别的CDS分析视图. CDS分析查询视图的访问控制. 权限对象的并集(UNION)或者交集(INTERSECTION). 本文链接:http://

使用ABAP CDS views创建一个分析模型并设置参数

参考blog:https://blogs.sap.com/2017/09/29/trick-with-parameter-derivation-for-using-analytical-report-variants-in-abap-cds-views/ 原文地址:https://www.cnblogs.com/suoluo119/p/11691415.html

CDS测试框架介绍:如何为ABAP CDS Entities写测试

动机 现在大家都知道单元测试对我们代码的好处.并且我们都承认它是开发过程中不可或缺的一部分.但是在把代码切换到数据库的模式下的时候,我们被粗暴地打回了软件测试的黑暗年代...我们现在面临着逻辑下推到ABAP CDS entities后,代码要如何测试的难题. CDS Test Double Framework允许开发者们通过众所周知的ABAP Unit Test Framework自动化地测试CDS entities. 本文链接:http://www.cnblogs.com/hhelibeb/p

CDS视图篇 2

核心数据服务 (CDS) 公司希望使用 SAPS/4HANA 核心数据服务 (CDS) 视图技术.需要学习 CDS 视 图的概念和结构以及语法 . ● 核心数据服务是用于业务实体的 SAP 战略建模方法. ● SAP HANA 视图通过脚本式 ABAP 代码创建. ● CDS 对于更多用例(例如,搜索)而言是高度灵活的 . ● CDS 是脚本式的(含有扩展的 SQL). ● CDS 与 ABAP 完全集成:生命周期.权限管理等. ABAP中的 CDS 支持代码下推到数据库层,通过ABAP 中的

HANA CDS与ABAP CDS

如果你在网络或者SCN上面搜索CDS,即SAP的Core Data Services,你会很容易地找到类似“Core Data Services(CDS)是一个在SAP HANA中用于定义和消费富语义数据模型的基础架构”这样的句子.在另一方面,在ABAP字典中似乎也有一种叫做ABAP CDS的东西.它们有什么关系?让我们从ABAP(还有ABAP CDS)文档的作者的视角中看看这个问题. 原文标题:CDS – One Concept, Two Flavors 本文链接:http://www.cnb

CDS视图篇 1

CDS视图概览 CDS是Core Data Services的简称,是HANA数据库向上层ABAP应用层提供数据的一种高效的方式,CDS模型是基于数据库data definition language[DDL] and data control language[DCL]构建的. 可以在Eclipse 里面取数到DDL视图中,然后在SAP写程序到视图中取数展示, 可以很好提升报表查询效率   示例:ZMMV0002_DDL  采购价格清单视图(ZMMR0030采购信息记录) @EndUserTe

ABAP CDS 替代对象(Replacement Objects)引起的数据错误

最近遇到了一个诡异的问题:从CDS视图中取得的数据,和从透明表中取得的数据,会有不同的值.在这里记录下问题的表现和解决方案,以供参考. 系统版本:S/4HANA OP1610 涉及表:MCHB 本文链接:http://www.cnblogs.com/hhelibeb/p/7346984.html 最近写了一个CDS视图: @AbapCatalog.sqlViewName: 'ZCI_TEST' @AbapCatalog.compiler.compareFilter: true @AccessCo

SAP ABAP CDS view里的注解在ABAP后台是如何被解析的?

我们在ABAP Development Tool里编写SAP CDS view,为视图维护这些以@开头的注解,同Java Spring里广泛应用的annotation一样,都是一种为development object维护元数据的方式. 如上图所示,我维护了五个不同的注解,一旦保存,这个cds view的源代码被发送到ABAP后台,通过CL_DD_DDL_HANDLER解析,DDL此处是Data Definition Language的缩写. 这个类的ANNOTATIONS字段包含了一个内表M_

5-03使用视图创建表

视图创建表的过程: 找到你操作的数据库,点开数据库,右击表,点新建表. 出现这个窗口的时候,就可以打上列名和数据类型. 按键盘的ctrl+s就可以进行保存,打上表名就行了