【SAP Abap】三种方法进行SAP ODATA数据服务发布(DDIC、RFC、CDS)

1、通过DDIC发布ODATA服务

1.1、SE11创建数据表

首先,要创建ODATA要发布的数据结构,可以是透明表,也可以是结构体。
这里我以一个自建表 ZTIFLIST 为例,发布其中的几个字段。
在这里插入图片描述

1.2、配置ODATA服务(定义)

(1)执行SEGW,新建 ODATA 项目
在这里插入图片描述
(2)创建 数据模型,选择导入 → DDIC结构
在这里插入图片描述
定义 Entity 名称,选择对应的 DDIC 表
在这里插入图片描述
勾选需要让外部访问的字段
在这里插入图片描述
勾选关键字
在这里插入图片描述
模型创建完成,如下图
在这里插入图片描述
(3)生成ODATA服务
在这里插入图片描述
生成如下 Runtime Artifacts 对象
在这里插入图片描述
说明:
DPC:data provider class 数据CRUD类,提供增上改查方法
MPC:modle provider class 数据提供类,提供查询方法

(4)服务实施:创建方法
在这里插入图片描述
其中:
GetEntity(Read)表示读取单条,需要配合关键字查询;
GetEntitySet(Query)表示读取集合。

选中对应要提供的方法,右键 → 重定义
在这里插入图片描述
编写数据查询代码,保存,激活,服务配置完成。
在这里插入图片描述
在这里插入图片描述

1.3、发布ODATA服务(激活)

(1)执行事务码:/n/IWFND/MAINT_SERVICE
在这里插入图片描述
在这里插入图片描述
添加成功如下:
在这里插入图片描述

1.4、测试ODATA服务

点击 SAP Gateway 客户端,进行服务测试 → 点击执行
在这里插入图片描述
获得响应,服务连接成功
在这里插入图片描述
修改URL参数,可以获取 json 数据集合
在这里插入图片描述
在返回结果中,有完整的ODATA服务访问地址,复制出来,可以在浏览器或第三方工具中访问,如Posman,需要输入SAP登录用户名和密码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查询单条记录时报错,可以通过事务码 /n/IWFND/ERROR_LOG 查看报错日志
在这里插入图片描述
因为我们还未实施单条记录查询的方法。

1.5、总结

此种方法,适用于快速发布基于某个表的数据服务。

2、通过RFC发布ODATA服务

2.1、SE37创建函数

基于上表 ZTIFLIST,创建一个RFC函数,来进行 ODATA服务发布演示。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

2.2、配置ODATA服务(定义)

配置过程基本同上,这里仅截取部分不同的界面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建完成后,生成运行对象。

服务实施:重定义方法

  METHOD YZTIFLISTSET_GET_ENTITYSET.

  DATA: LT_LIST TYPE TABLE OF ZTIFLIST.
  DATA: LS_ENTITY LIKE LINE OF ET_ENTITYSET.

  TRY.
    CALL FUNCTION 'YFM_ODATA'
      TABLES
        T_LIST        = LT_LIST.

    MOVE-CORRESPONDING LT_LIST TO ET_ENTITYSET.

    CATCH /IWBEP/CX_MGW_BUSI_EXCEPTION.
    CATCH /IWBEP/CX_MGW_TECH_EXCEPTION.
  ENDTRY.
  ENDMETHOD.

2.3、服务激活测试(同上)

2.4、总结

此种方法,适用于发布基于某个已封装逻辑的函数服务。

3、通过CDS发布ODATA服务

3.1、创建CDS View

进入Eclipse ADT开发环境,新建CDS View
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
编写CDS,增加注解 @OData.publish: true
在这里插入图片描述
保存,激活CDS,忽略警告提示服务尚未激活
在这里插入图片描述

@AbapCatalog.sqlViewName: 'ZV_CDS_ODATA'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'CDS View 发布ODATA服务'
@OData.publish: true        --此注解表示发布odata服务
define view ZCDS_ODATA as select from ztiflist {
    key ifno,				--指定key
    key ifrow,
        ifname,
        project,
        iftype,
        devname
}

3.2、发布ODATA服务

执行事务码:/n/IWFND/MAINT_SERVICE,添加服务
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加成功,回到 Eclipse,刷新,查看提示,OData服务已创建。
在这里插入图片描述

3.3、服务测试

增加 EntitySet(默认实体为ZCDS_ODATA)和URI Option(format=json),可以获得JSON 格式结果。
在这里插入图片描述

3.4、总结

此种方法,可以直接基于CDS发布ODATA服务,省去了配置Sap Getway以及方法实现的步骤,更加快速便捷。

原创文章,转载请注明来源-X档案

  • 18
    点赞
  • 122
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 好的,以下是在 SAP ABAP 中使用 OData 过滤语句来过滤两个参数的示例代码,其中使用了 SEGW (SAP Gateway Service Builder) 来创建实体集合: 1. 在 SEGW 中创建实体集合 首先,在 SEGW 中创建一个实体集合,例如名为 Users 的实体集合,其中包含有关用户的信息,包括姓名、年龄和性别。 2. 在实体集合中添加查询方法 在实体集合中添加一个查询方法,例如名为 GetUsersByFilter 的方法,用于根据姓名和性别这两个参数来过滤出符合条件的用户信息。 3. 在查询方法中添加过滤语句 在查询方法的源代码中,添加以下过滤语句来过滤两个参数: ``` lt_users = lt_users WHERE ( Name EQ @iv_name ) AND ( Gender EQ @iv_gender ). ``` 其中,lt_users 是包含所有用户信息的内部表,iv_name 和 iv_gender 是输入参数,表示要过滤的姓名和性别。 4. 在前端应用中调用查询方法 在前端应用中,使用以下代码来调用查询方法并获取符合条件的用户信息: ``` var sUrl = "/sap/opu/odata/sap/Z_MY_SERVICE_SRV/GetUsersByFilter"; sUrl += "?$filter=Name eq 'John' and Gender eq 'Male'"; var oModel = new sap.ui.model.odata.ODataModel(sUrl, true); oModel.read("/Users", { success: function(oData) { // 处理返回的用户信息 } }); ``` 在上述代码中,我们使用 sap.ui.model.odata.ODataModel 类来创建 OData 模型,并使用 read 方法来调用 GetUsersByFilter 方法,并将过滤语句作为参数传递给 sUrl 变量。最后,我们使用 success 回调函数来处理返回的用户信息。 ### 回答2: 在 SAP ABAP SEGW 中,使用 OData Filter 可以过滤两个参数的例子。OData Filter 是一个用于在 OData 服务上进行数据过滤的语言,可以帮助我们筛选出符合特定条件的数据集。 假设我们有一个名为 "Employees" 的 EntitySet,其中包含了员工的信息,包括员工号(EmployeeID)、姓名(Name)和年龄(Age)等属性。 现在,我们想要筛选出年龄在30至40之间,且名字包含 "John" 的员工信息。我们可以使用 OData Filter 来实现这个需求。Filter 的语法类似于 SQL,具体示例如下: Employees?$filter=Age ge 30 and Age le 40 and substringof('John', Name) 在这个示例中,我们使用了 $filter 关键字来指定我们要对数据进行筛选。其中,Age ge 30 and Age le 40 表示要筛选年龄在30至40之间的员工,substringof('John', Name) 表示要筛选名字中包含 "John" 的员工。 通过将这个 Filter 语句添加到 EntitySet 的 URI 后面,我们就可以获取符合条件的员工数据。例如,我们可以使用以下 URI: /odata/Employees?$filter=Age ge 30 and Age le 40 and substringof('John', Name) 以这个 URI 发送请求,就能获取到年龄在30至40之间,且名字包含 "John" 的员工信息列表。 总结来说,OData Filter 提供了一种便捷的方式来筛选符合特定条件的数据。它可以在 SAP ABAP SEGW 中使用,通过指定合适的语法以及参数来实现数据过滤的需求。 ### 回答3: 在SAP ABAP SEGW中,使用OData Filter可以根据多个参数来过滤EntitySet。 假设我们有一个EntitySet叫做"Products",包含以下属性:ProductID、ProductName和Category。 首先,我们可以使用OData Filter来根据一个参数来过滤EntitySet。例如,我们想获取所有Category为"电子产品"的产品,可以使用以下代码: GET /sap/opu/odata/sap/SEGW_SAMPLE_SRV/Products?$filter=Category eq '电子产品' 上述代码中,$filter参数用于指定过滤条件。在这个例子中,我们使用eq操作符来表示相等性,并将Category的值设为'电子产品'。 接着,我们可以使用OData Filter来同时根据两个参数来过滤EntitySet。例如,我们想获取所有Category为"电子产品"且ProductID大于100的产品,可以使用以下代码: GET /sap/opu/odata/sap/SEGW_SAMPLE_SRV/Products?$filter=Category eq '电子产品' and ProductID gt 100 上述代码中,我们使用and操作符将两个过滤条件连接起来。其中,gt操作符表示大于。 通过以上例子,我们可以看到可以使用OData Filter在SAP ABAP SEGW中根据多个参数来过滤EntitySet。这给我们提供了更灵活的选项来获取符合特定条件的数据。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值