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…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...