SAPUI5 (35) - OData Model 连接后端 SAP 系统 (中)

2024-02-05 13:48

本文主要是介绍SAPUI5 (35) - OData Model 连接后端 SAP 系统 (中),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

完成上一篇的配置,现在我们可以在 SAP 系统中创建基于 SAP Netweaver Gateway 的 OData Service。本篇主要是介绍在 SAP 系统中创建 OData service 的过程,为后续在 OpenUI5 中通过 OData Model 使用 SAP 系统提供的 OData 数据服务。SAP OData service 本身包含很多知识点,也需要系统学习。

本次要实现的功能:创建数据库表 zemployee,并基于 SAP Netweaver OData Service, 实现对 zemployee 的增删改查。

1. 创建 zemployee 数据库表

使用事务码 SE11 创建 zemployee 表。因为本文主要介绍 OData service 创建的过程,所以并不打算详细说明创建表的细节。为了足够简单, zemployee 表只包含 empid, empname, empaddr (employee address) 三个字段。

2. 创建基于 Netweaver Gateway 的 OData Service

2.1 创建 Gateway service project

通过事务码 SEGW,进入下面的界面:

点击 Create Project 按钮,创建一个 Gateway service project, 将 project 命名为 zempprj。点击 「Local Object」按钮,zempprj 项目创建成功:


本节动图:

我们可以看到,Gateway service 分为四个部分 (左边的 panel):

  • Data Model: 数据模型,主要包括 Entity type,( 比如说 product entity,customer entity 等),Entity set (Entity 的集合,多笔数据) 和 Association (Entity 之间的关联)
  • Service Implementation: Entity set 的 CRUD 实现

  • Runtime Artifacts: 基于 Entity set 的代码框架,包括数据模型 (Data model),数据提供者 (Data provider)

  • Service maintenance:注册服务,测试服务。

2.2 创建 Data Model

1) 创建 Entity

选中 Data Model,右键,Import -> DDIC Structure,表示从 DDIC 中导入结构作为 Entity:

将 Entity type 命名为 Employee, 字段来自 DDIC 的 zemployee 表:

选中 zemployee 表的所有字段,点击 Next 按钮:

系统进入如下界面。在这个界面中,定义 Employee 这个 entity 的字段属性。将 mandt 和 empid 定义为 primary key,并将 Name 的名称规范为首字母大写。

属性定义完成后,左边的 panel 中, Properties 下面可以看到主键和属性:


本节动图:

2) 创建 Entity set

选中左边 Panel 的 Entity Set,右键,Create。将 Entity set 命名为 EmployeeCollection, Entity type 为刚刚创建的 Employee

定义 EmployeeCollection 可以进行 CRUD:

本节动图:

2.3 Generate Runtime Objects

选中左边 Panel 的 Runtime Artifacts,点击 Generate Runtime Objects 按钮,系统进入下面的界面:

保持所有默认不变,点击 Continue 按钮。系统生成 Runtime Objects。

2.4 服务注册

前面我们在 SAP 系统中创建了 Gateway service 的别名,我们可以看到,这个别名出现在 Service maintenance 下面。双击可以进入下面的界面。

此时, Registration status 是没有状态的,点击 Register 按钮,系统弹出对话框:

选择 Sytem Alias 为 local,进入下面的界面

确认,完成系统注册。本节动图:

2.5 测试 OData service

尽管我们还没有编写 OData service 的实现代码,但已经可以通过 Browser 或者 SAP Gateway Client 进行测试了。双击左边 Panel Service maintenance 下的 localgateway,点击右边出现的 Maintain 按钮,进入下面的界面:

我们可以通过点击左下角的 Call Browser 或者 SAP Gateway Client 按钮进行测试。当点击 SAP Gateway Client 按钮的时候,界面如下:

后面我们会多次进入到这个界面,进行 CRUD 的测试。

利用 Browser 来进行测试,则有可能碰到一些问题。在这里介绍两种极有可能的情况及解决方法:

一是点击 Call Browser 按钮,系统显示 host name 或 port 没有配置好,这个时候,使用事务码 SMICM,然后通过菜单 Goto -> Services,看看主机和端口是否配置好,是否启用。

另外,还要注意域名解析,如果服务器没有在 Internet 上公开,这个 host name 不能通过 Internet 网进行访问,则需要设置本机的 hosts 文件,让本机指向这个域名。Windows 10 中 hosts 文件的位置在 C:\Windows\System32\drivers\etc 文件夹中。

2.6 服务实现 (Service maintenance)

服务实现是指提供 CRUD 的具体实现,因为读取数据的时候,存在 Entity 和 EntitySet,SAP 一般把读取 Entity 叫做 Read,把读取 EntitySet 叫做 Query。在 SEGW 界面中 展开 Service Implementation:

我们需要编写具体的代码,这样外部才能实现对 SAP 数据的增删改查。首先我们来看看 GetEntitySet 方法的编写过程。

Query

选中 GetEntitySet (Query),右键,Go to ABAP Workbench。系统提示:

点击「确认」按钮,进入下面的界面:

找到 EMPLOYEECOLLECTI_GET_ENTITYSET,右键,选择 Redefine,改写这个方法。其它的方法创建过程类似,不再重复说明。

改写后 employeecollecti_get_entityset 方法代码如下:

  METHOD employeecollecti_get_entityset.SELECT * FROM zemployeeINTO CORRESPONDING FIELDS OF TABLE et_entityset.ENDMETHOD.

et_entityset 是代码框架预设的方法参数,通过追踪,我们知道,它是基于 zemployee 的内表类型。

测试:

在 SAP Gateway Client 界面中:

  • HTTP Method: GET
  • Request URL: /sap/opu/odata/sap/ZEMPPRJ_SRV/EmployeeCollection?$format=json

系统返回的结果:

我们总可以从 SEGW 进入服务维护和 Gateway client 界面。也可以通过另外的事务码:

  • Service maintain: /IWFND/MAINT_SERVICE。这两个事务码比较怪,不通过/o 系统提示错误。所以应该输入 /O/IWFND/MAINT_SERVICE
  • SAP Gateway client: /o/iwfnd/gw_client
Read

实现 GetEntity (Read) 方法:

  METHOD employeecollecti_get_entity.DATA: ls_key_tab  TYPE /iwbep/s_mgw_name_value_pair,l_empid     TYPE zemployee-empid,ls_employee TYPE zemployee.READ TABLE it_key_tab WITH KEY name = 'EmpId' INTO ls_key_tab.l_empid = ls_key_tab-value.SELECT SINGLE * FROM zemployee INTO er_entity WHERE empid = l_empid.ENDMETHOD.

SAP Gateway Client 测试:

  • HTTP Method: GET

  • Request URL: /sap/opu/odata/sap/ZEMPPRJ_SRV/EmployeeCollection(Mandt='100',EmpId='1')?$format=json

  • Response:

{"d" : {"__metadata" : {"id" : "http://dph01.ourdomain:8180/sap/opu/odata/sap/ZEMPPRJ_SRV/EmployeeCollection(Mandt='100',EmpId='1')","uri" : "http://dph01.ourdomain:8180/sap/opu/odata/sap/ZEMPPRJ_SRV/EmployeeCollection(Mandt='100',EmpId='1')","type" : "ZEMPPRJ_SRV.Employee"},"Mandt" : "100","EmpId" : "1","EmpName" : "Stone","EmpAddr" : "Wuhan"}
}
Create

实现 Create 方法

  METHOD employeecollecti_create_entity.DATA: ls_employee TYPE zemployee." Get requested data from inputio_data_provider->read_entry_data( IMPORTING es_data = er_entity ).MOVE-CORRESPONDING er_entity TO ls_employee.INSERT zemployee FROM ls_employee.ENDMETHOD.

SAP Gateway Client 测试:

因为 Create 操作需要数据,我们可以先用 GET 方法得到一笔数据,更改后再用 POST 方法进行提交。操作步骤如下:

点击 「Use as request」,将获取的数据进行更改后提交:

返回的状态码为 201 则表示成功。

Update

实现 Update 方法:

  method EMPLOYEECOLLECTI_UPDATE_ENTITY.DATA: ls_employee TYPE zemployee." Get requested dataio_data_provider->read_entry_data( IMPORTING es_data = er_entity ).MOVE-CORRESPONDING er_entity TO ls_employee.MODIFY zemployee FROM ls_employee.endmethod.

Update 的测试使用 PUT 方法:

  • HTTP Method: PUT
  • Request URI: /sap/opu/odata/sap/ZEMPPRJ_SRV/EmployeeCollection(Mandt='100',EmpId='3')
Delete

实现 Delete 方法:

  METHOD employeecollecti_delete_entity.DATA: ls_key_tab  TYPE /iwbep/s_mgw_name_value_pair,l_empid     TYPE zemployee-empid,ls_employee TYPE zemployee.READ TABLE it_key_tab WITH KEY name = 'EmpId' INTO ls_key_tab.l_empid = ls_key_tab-value.DELETE FROM zemployee  WHERE empid = l_empid.ENDMETHOD.

测试比较简单,不再赘述。

这篇关于SAPUI5 (35) - OData Model 连接后端 SAP 系统 (中)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/681103

相关文章

MySQL中的交叉连接、自然连接和内连接查询详解

《MySQL中的交叉连接、自然连接和内连接查询详解》:本文主要介绍MySQL中的交叉连接、自然连接和内连接查询,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、引入二、交php叉连接(cross join)三、自然连接(naturalandroid join)四

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

Pydantic中model_validator的实现

《Pydantic中model_validator的实现》本文主要介绍了Pydantic中model_validator的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录引言基础知识创建 Pydantic 模型使用 model_validator 装饰器高级用法mo

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Python3.6连接MySQL的详细步骤

《Python3.6连接MySQL的详细步骤》在现代Web开发和数据处理中,Python与数据库的交互是必不可少的一部分,MySQL作为最流行的开源关系型数据库管理系统之一,与Python的结合可以实... 目录环境准备安装python 3.6安装mysql安装pymysql库连接到MySQL建立连接执行S

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

GORM中Model和Table的区别及使用

《GORM中Model和Table的区别及使用》Model和Table是两种与数据库表交互的核心方法,但它们的用途和行为存在著差异,本文主要介绍了GORM中Model和Table的区别及使用,具有一... 目录1. Model 的作用与特点1.1 核心用途1.2 行为特点1.3 示例China编程代码2. Tab

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma