SAP创建ODATA服务-Structure
SAP创建ODATA服务-Structure
1、创建数据字典
进入se11创建透明表ZRICO_USR,并创建对应字段

2、创建OData service
-
首先创建Gateway service project,事务码:SEGW,点击Create Project 按钮


Gateway service Project分四个部分:
♦ 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:注册服务,测试服务
-
创建Data Model
-
创建Entity
选中Data Model,右键,Import->DDIC Structure

输入Entity Name以及数据表结构 ZRICO_USR,若勾选Create Default entity set则自动创建Entity set,然后next

选中所有字段,点击next

选择字段MANDT、USRID为主键,并将Name值按照规范首字符需大写,如下图所示。

点击finish,如下图所示:

完成后查看Entity属性

-
调整Entity Sets
设置Entity集合可CRUD

-
-
设置Entity集合可CRUD
选中项目名,右键Generate Runtime

保持所有值默认,点击Continue按钮,运行

系统生成Runtime objects

-
服务注册
若之前已经创建了Gateway Service别名,则在Service Maintenance下可以看到

此时Register Status是没有状态的,点击Register按钮

选择系统别名LOCAL

确认后,完成服务注册,状态已经改变。

-
测试OData Service
可以通过Browser或者SAP Gateway Client 进行测试,点击Maintain进入激活并维护服务界面


调用浏览器测试,如下图所示,测试成功:

浏览器测试可能存在问题:
A.点击 Call Browser 按钮,系统显示 host name 或 port 没有配置好,使用事务码 SMICM,然后通过菜单 Goto -> Services,看看主机和端口是否配置好,是否启用。
B.如果服务器没有在 Internet 上公开,这个 host name 不能通过 Internet 网进行访问,则需要设置本机的 hosts 文件,让本机指向这个域名。hosts 文件的位置在 C:\Windows\System32\drivers\etc 文件夹中。
Gateway客户端测试:


客户端测试,当前连接出错,未配置Fiori外部服务环境,可跳过,不影响后续测试,正常测试如下:

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

需要编写具体的代码,这样外部才能实现对SAP数据的增删改查。
| OData Operation | HTTP Method | What it meant to an ABAPer |
|---|---|---|
| Create | POST | Insert from |
| Read | GET | Select Single * From into |
| Update | PUT/PATCH | Update set |
| Delete | DELETE | Delete from |
| Query | GET | Select * From Into Table |
| Function Import | GET/POST | Everything covered by GET and POST. But only use if scenario does not fit into CRUDQ operations. |
-
Query重定义
首先我们开看看GetEntitySet方法的编写过程 。选中GetEntitySet(Query),右键,Go to Abap Workbench

系统提示:

点击确认,进入下列界面:

选中ZUSERSET_GET_ENTITYSET方法,右键,重定义,改写该方法实现过程(其他方法改写类似)

改写里面的逻辑:
method zuserset_get_entityset.data:ls_filter type /iwbep/s_mgw_select_option,ls_select_options type /iwbep/s_cod_select_option.data:lt_range_usrid type table of zrange_vhl.field-symbols:<fs_range_usrid> type zrange_vhl.read table it_filter_select_optionsinto ls_filterwith key property = 'Usrid'.if sy-subrc = 0.loop at ls_filter-select_options into ls_select_options.append initial line to lt_range_usrid assigning <fs_range_usrid>.move-corresponding ls_select_options to <fs_range_usrid>.unassign <fs_range_usrid>.endloop.endif.select *from zrico_usrinto corresponding fields of table et_entitysetwhere usrid in lt_range_usrid.endmethod.其中ET_ENTITYSET是类方法预设的参数,基于ZRICO_USR内表结构。

修改完成后激活,然后通过浏览器进行测试或者Gateway客户端测试

同时,也可以通过Postman测试SAP OData Services,后面会大量使用Postman来测试

-
Read重定义
选中GetEntity,同理进入对应的类,改写ZUSERSET_GET_ENTITY:代码如下
method ZUSERSET_GET_ENTITY. * RAISE EXCEPTION TYPE /iwbep/cx_mgw_not_impl_exc * EXPORTING * textid = /iwbep/cx_mgw_not_impl_exc=>method_not_implemented * method = 'ZUSERSET_GET_ENTITY'.data lv_usrid type zrico_usr-usrid.data:ls_key_tab type /iwbep/s_mgw_name_value_pair,ls_usr type zrico_usr.read table it_key_tabwith key name = 'Usrid'into ls_key_tab.if sy-subrc = 0.lv_usrid = ls_key_tab-value.endif.select single *from zrico_usrinto er_entitywhere usrid = lv_usrid.endmethod.执行结果hanas1.hand-china.com:2550/sap/opu/odata/sap/ZRICO_STRU_USR1_SRV/zuserSet(Mandt=‘200’,Usrid=‘123’)?$format=xml:如下

-
Create重定义
选中Create,右键进入ABAP工作台,方法 ZUSERSET_CREATE_ENTITY重定义,代码如下:
method ZUSERSET_CREATE_ENTITY. * RAISE EXCEPTION TYPE /iwbep/cx_mgw_not_impl_exc * EXPORTING * textid = /iwbep/cx_mgw_not_impl_exc=>method_not_implemented * method = 'ZUSERSET_CREATE_ENTITY'.datals_usr type zrico_usr.io_data_provider->read_entry_data( importing es_data = er_entity ).MOVE-CORRESPONDING er_entity to ls_usr.insert zrico_usr from ls_usr.endmethod. -
Update重定义
选中Update,右键,进入工作台,方法ZUSERSET_UPDATE_ENTITY重定义,代码如下:
METHOD zuserset_update_entity. * RAISE EXCEPTION TYPE /iwbep/cx_mgw_not_impl_exc * EXPORTING * textid = /iwbep/cx_mgw_not_impl_exc=>method_not_implemented * method = 'ZUSERSET_UPDATE_ENTITY'.DATA:ls_usr TYPE zrico_usr.io_data_provider->read_entry_data( IMPORTING es_data = er_entity ).MOVE-CORRESPONDING er_entity TO ls_usr.MODIFY zrico_usr FROM ls_usr.ENDMETHOD. -
Delete重定义
选中Delete,右键,进入ABAP工作台,方法ZUSERSET_DELETE_ENTITY重定义,代码如下:
METHOD zuserset_delete_entity. * RAISE EXCEPTION TYPE /iwbep/cx_mgw_not_impl_exc * EXPORTING * textid = /iwbep/cx_mgw_not_impl_exc=>method_not_implemented * method = 'ZUSERSET_DELETE_ENTITY'.DATA:lv_usrid TYPE zrico_usr-usrid.DATA:ls_key_tab TYPE /iwbep/s_mgw_name_value_pair,ls_usr TYPE zrico_usr.READ TABLE it_key_tab WITH KEY name = 'Usrid' INTO ls_key_tab.IF sy-subrc = 0.lv_usrid = ls_key_tab-value.ENDIF.DELETE FROM zrico_usr WHERE usrid = lv_usrid.ENDMETHOD. -
Function Import 函数导入
如果操作不适合CRUD方案,那么您可以通过函数导入来执行。选中DataModel,右键,Create,Function Import

输入导数名称,例如:需要根据用户名NAME查询其他信息

确认后,Function Imports节点下显示创建的名称。

调用Function imports相关参数:
Return type Kind:Entity type Return type: ZUSER
Return Cardinality:返回值为实体集合,则选择 0…n
HTTP:Get方式

为Function Import创建导入参数:双击Function Import Parameters,

选择传建按钮,输入参数名:Us人Name,参数类型Edm.String,最大长度值

完成后保存
然后可以在Postman或者调用浏览器测试,可获得类似的结果

然后通过类似的方法给对应的方法重定义再进行测试即可
下一步重定义方法:

代码如下:

然后通过Postman测试:
http://gXXX.XXXXX.com:8000/sap/opu/odata/sap/ZRICO_STRU_USR_SRV/UserByName?UsrName=‘12’

相关文章:
SAP创建ODATA服务-Structure
SAP创建ODATA服务-Structure 1、创建数据字典 进入se11创建透明表ZRICO_USR,并创建对应字段 2、创建OData service 首先创建Gateway service project,事务码:SEGW,点击Create Project 按钮 Gateway service Project分四个部分:…...
【开源】基于JAVA的车险自助理赔系统
项目编号: S 018 ,文末获取源码。 \color{red}{项目编号:S018,文末获取源码。} 项目编号:S018,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 车…...
单例模式-C++实现
目录 饿汉式懒汉式双检查锁,线程安全的版本什么是reorder?解决内存读写reorder不安全方法代码解释懒汉式的优缺点 单例模式是一种设计模式,用于确保一个类只有一个实例,并提供一个全局的访问点来获取该实例。它常用于需要在整个应…...
一种模板类实现和声明分开在生成的.a文件被使用时出现undefined reference时的一种解决方法
一种模板类实现和声明分开在生成的.a文件被使用时出现undefined reference时的一种解决方法 模板类头文件格式如下: test.h // test.h namespace test { namespace _testspace { class base { public: base(); ~base(); };template<bool T> class base_impl…...
js用到的算法
1.对象数组中,对象中有对象,数组根据对象中的对象打平 [{indexValueMap: { 68443: 0, 68457: 0 },rowName1: 固定收益类,rowName2: 交易类,rowName3: 次级},{indexValueMap: { 68443: 0, 68457: 0 },rowName1: 固定收益类,rowName2: 交易类,rowName3: 中…...
【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷9
1、商标也属于知识产权的一种。一个商标在注册之后,将会在()的时间受到保护 A、20 年内 B、50 年内 C、直至注册人去世 D、10 年内 答案:D 2、人类史上第一位进入太空的宇航员是(),他/她是…...
如何使用抖音直播调试入口扫码进行调试
使用抖音直播调试入口扫码进行调试的步骤如下: 确保你已经安装了抖音调试助手。打开调试助手,并在主界面点击“连接”按钮。在连接向导页面,根据提示连接你的抖音直播间。请确保你已经获取了直播间的token和scheme。连接成功后,你…...
AI智能人机对话小程序系统源码 附带完整的搭建教程
移动互联网的普及和快速发展,小程序已经成为了一种非常流行的应用形态。小程序具有即用即走、轻量级的特点,非常适合用于提供各种便捷服务。下面罗峰来给大家分享一款AI智能人机对话小程序系统源码,带有完整的搭建教程。 以下是部分代码示例…...
【腾讯云云上实验室】用向量数据库在金融信数据库分析中的实战运用
一、前言 这篇文章将带领读者探索数据库的多样化解决方案及其演进历程,特别关注向量数据库的重要性和在实际项目中的应用。 通过深入剖析腾讯云向量数据库及其在金融信用数据库分析中的实战运用,为读者提供全面而实用的指南,帮助他们理解、…...
2015年五一杯数学建模A题不确定性条件下的最优路径问题解题全过程文档及程序
2015年五一杯数学建模 A题 不确定性条件下的最优路径问题 原题再现 目前,交通拥挤和事故正越来越严重的困扰着城市交通。随着我国交通运输事业的迅速发展,交通“拥塞”已经成为很多城市的“痼疾”。在复杂的交通环境下,如何寻找一条可靠、快…...
5、Qt:项目中包含多个子项目(.pro)/子模块(.pri)
一、说明: 在进行项目开发过程中,会涉及子项目/子模块的问题 Qt中使用TEMPLATE subdirs添加多个子项目;子项目可以单独编译生成可执行文件(exe)或者动态链接库(dll)等,供其他模块…...
Facebook的特点优势
Facebook作为全球最大的社交媒体平台之一,同时也是最受欢迎的社交网站之一,Facebook具有许多独特的特点和优势。本文小编将说一些关于Facebook的特点及优势。 1、全球化 Facebook拥有数十亿的全球用户,覆盖了几乎所有国家和地区。这使得人们…...
Spring框架体系及Spring IOC思想
目录 Spring简介Spring体系结构SpringIOC控制反转思想自定义对象容器Spring实现IOCSpring容器类型容器接口容器实现类对象的创建方式使用构造方法使用工厂类的方法使用工厂类的静态方法对象的创建策略对象的销毁时机生命周期方法获取Bean对象的方式通过id/name获取通过类型获取…...
WT588F02B-8S语音芯片:16位DSP技术引领个性化功能产品新时代
随着科技的快速发展,语音芯片作为人机交互的核心组件,在各个领域的应用越来越广泛。唯创知音推出的WT588F02B-8S语音芯片,以其强大的16位DSP技术和丰富的内置资源,正成为行业内的翘楚。 首先,唯创知音WT588F02B-8S是一…...
数字逻辑电路基础-时序逻辑电路之移位寄存器
文章目录 一、移位寄存器定义二、verilog源码三、仿真结果 一、移位寄存器定义 移位寄存器定义 A shift register is a type of digital circuit using a cascade of flip flops where the output of one flip-flop is connected to the input of the next. 移位寄存器是一种将…...
DEM分析
一、实验名称: DEM分析 二、实验目的: 通过本实验练习,掌握DEM的建立与应用基本方法。 三、实验内容和要求: 实验内容: 利用ARCGIS软件相关分析工具及实验数据,创建DEM,并计算相应坡度的区…...
全面探讨HTTP协议从0.9到3.0版本的发展和特点
前言: 最近的几场面试都问到了http的相关知识点,博主在此结合书籍和网上资料做下总结。本篇文章讲收录到秋招专题,该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出,对大佬有帮…...
中通快递查询入口,根据物流更新量筛选出需要的单号记录
批量中通快递单号的物流信息,根据物流更新量将需要的单号记录筛选出来。 所需工具: 一个【快递批量查询高手】软件 中通快递单号若干 操作步骤: 步骤1:运行【快递批量查询高手】软件,并登录 步骤2:点击主…...
Arraylist案例
Arraylist是使用最频繁的一个集合,它与数组类似,不同之处在于它可以动态改变长度,不够了可以扩容。 案例: 我的思考: 首先多个菜品信息可以用Arraylist 来存储,那我们需要再创建一个菜品类Food࿰…...
『heqingchun-Ubuntu系统+x86架构+配置编译安装使用yolov5-6.0+带有TensorRT硬件加速+C++部署』
Ubuntu系统x86架构配置编译安装使用yolov5-6.0带有TensorRT硬件加速C部署 一、准备文件 1.yolov5-6.0.zip 官网下载 网址: https://github.com/ultralytics/yolov5/tree/v6.0操作: 点击"Code"下的"Download ZIP" 下载得到yolov5…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
Netty自定义协议解析
目录 自定义协议设计 实现消息解码器 实现消息编码器 自定义消息对象 配置ChannelPipeline Netty提供了强大的编解码器抽象基类,这些基类能够帮助开发者快速实现自定义协议的解析。 自定义协议设计 在实现自定义协议解析之前,需要明确协议的具体格式。例如,一个简单的…...
【免杀】C2免杀技术(十五)shellcode混淆uuid/ipv6/mac
针对 shellcode 混淆(Shellcode Obfuscation) 的实战手段还有很多,如下表所示: 类型举例目的编码 / 加密XOR、AES、RC4、Base64、Poly1305、UUID、IP/MAC改变字节特征,避开静态签名或 YARA结构伪装PE Stub、GIF/PNG 嵌入、RTF OLE、UUID、IP/MAC看起来像合法文件/数据,弱…...
论文笔记:Large Language Models for Next Point-of-Interest Recommendation
SIGIR 2024 1 intro 传统的基于数值的POI推荐方法在处理上下文信息时存在两个主要限制 需要将异构的LBSN数据转换为数字,这可能导致上下文信息的固有含义丢失仅依赖于统计和人为设计来理解上下文信息,缺乏对上下文信息提供的语义概念的理解 ——>使用…...
Ubantu-Docker配置最新镜像源250605
尝试其他镜像加速器 阿里云镜像加速器:登录阿里云,进入容器镜像服务获取专属加速器地址。毫秒镜像:https://docker.1ms.run。DockerHub镜像加速器:https://docker.xuanyuan.me。Docker Hub 镜像加速服务:https://dock…...
stm32—ADC和DAC
ADC和DAC 在嵌入式系统中,微控制器经常需要与现实世界的模拟信号进行交互。STM32微控制器内置了模拟数字转换器(ADC)和数字模拟转换器(DAC),它们是实现这种交互的关键模块。 1. 模拟数字转换器(…...
