SAP创建ODATA服务-Structure

SAP创建ODATA服务-Structure

1、创建数据字典

进入se11创建透明表ZRICO_USR,并创建对应字段

在这里插入图片描述

2、创建OData service

  1. 首先创建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:注册服务,测试服务

  2. 创建Data Model

    1. 创建Entity

      选中Data Model,右键,Import->DDIC Structure

      在这里插入图片描述

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

      在这里插入图片描述

      选中所有字段,点击next

      在这里插入图片描述

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

      在这里插入图片描述

      点击finish,如下图所示:

      在这里插入图片描述

      完成后查看Entity属性

      在这里插入图片描述

    2. 调整Entity Sets

      设置Entity集合可CRUD

      在这里插入图片描述

  3. 设置Entity集合可CRUD

    选中项目名,右键Generate Runtime

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

    在这里插入图片描述

    系统生成Runtime objects

    在这里插入图片描述

  4. 服务注册

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

    在这里插入图片描述

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

    在这里插入图片描述

    选择系统别名LOCAL

    在这里插入图片描述

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

    在这里插入图片描述

  5. 测试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外部服务环境,可跳过,不影响后续测试,正常测试如下:

    在这里插入图片描述

  6. 服务实现

    服务实现是指提供 CRUD 的具体实现,因为读取数据的时候,存在 Entity 和 EntitySet,SAP 一般把读取 Entity 叫做 Read,把读取 EntitySet 叫做 Query,

    在SEGW界面中展开Service Implementation:

在这里插入图片描述

需要编写具体的代码,这样外部才能实现对SAP数据的增删改查。

OData OperationHTTP MethodWhat it meant to an ABAPer
CreatePOSTInsert from
ReadGETSelect Single * From into
UpdatePUT/PATCHUpdate set
DeleteDELETEDelete from
QueryGETSelect * From Into Table
Function ImportGET/POSTEverything covered by GET and POST. But only use if scenario does not fit into CRUDQ operations.
  1. 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_options
        into ls_filter
        with 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_usr
          into corresponding fields of table et_entityset
         where usrid in lt_range_usrid.
    
      endmethod.
    

    其中ET_ENTITYSET是类方法预设的参数,基于ZRICO_USR内表结构。

    在这里插入图片描述

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

    在这里插入图片描述

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

    在这里插入图片描述

  2. 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_tab
        with key name = 'Usrid'
        into ls_key_tab.
        if sy-subrc = 0.
          lv_usrid = ls_key_tab-value.
          endif.
    
        select single *
          from zrico_usr
          into er_entity
          where usrid = lv_usrid.
    
      endmethod.
    

    执行结果hanas1.hand-china.com:2550/sap/opu/odata/sap/ZRICO_STRU_USR1_SRV/zuserSet(Mandt=‘200’,Usrid=‘123’)?$format=xml:如下

    在这里插入图片描述

  3. 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'.
        data
              ls_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.
    
  4. 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.
    
  5. 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.
    
  6. 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’

    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu20.04安装tensorRT流程梳理

目标&#xff1a;先跑demo&#xff0c;再学习源码 step1, 提前准备好CUDA环境 安装CUDA&#xff0c;cuDNN 注意&#xff0c;CUDA&#xff0c;cuDNN需要去官网下载.run和tar文件安装&#xff0c;否则在下面step4 make命令会报找不到cuda等的错误&#xff0c;具体安装教程网上…

COMP2121 Discrete Mathematics

COMP2121 Discrete Mathematics 需要可WeChat: zh6-86

Unity 打印每次代码保存耗时

unity每次编辑代码的时候&#xff0c;都需要保存&#xff0c;unity右下角的小圆圈总是转个不停&#xff0c;那么每次编辑代码后&#xff0c;unity到底需要多久时间呢&#xff0c;下面就有代码可以获取 保存时间。 using UnityEngine; using UnityEditor; using UnityEditor.Com…

开源万能DIY预约小程序源码系统+自由DIY,海量模板任选择,附带完整的搭建教程

在移动互联网时代&#xff0c;用户对于预约服务的便捷性和高效性需求日益增长。为了满足这一需求&#xff0c;我们凭借多年的技术积累和经验&#xff0c;开发出了这款开源万能DIY预约小程序源码系统。该系统的推出旨在帮助开发者快速构建功能丰富、符合用户需求的预约小程序&am…

四、IDEA创建项目时,Maven Archetype模板工程说明

什么是Maven Archetype Archetype是一个Maven项目的模板工具包&#xff0c;它定义了一类项目的基本架构。Archetype为开发人员提供了创建Maven项目的模板&#xff0c;同时它也可以根据已有的Maven项目生成参数化的模板。 官方文档&#xff1a;https://maven.apache.org/archet…

fastjson和jackson序列化的使用案例

简单记录一下一个fastjson框架和jackson进行序列化的使用案例&#xff1a; 原json字符串&#xff1a; “{“lockCount”:”{1:790,113:1,2:0,211:0,101:1328,118:8,137:0,301:0,302:0}“,“inventoryCount”:”{1:25062,113:2,2:10000,211:2,101:11034,118:9,137:40,301:903914…

【一起来学kubernetes】7、k8s中的ingress详解

引言配置示例负载均衡的实现负载均衡策略实现模式实现方案Nginx类型Ingress实现Treafik类型Ingress实现HAProxy类型ingress实现Istio类型ingress实现APISIX类型ingress实现 更多 引言 Ingress是Kubernetes集群中的一种资源类型&#xff0c;用于实现用域名的方式访问Kubernetes…

FreeRTOS深入教程(软件定时器源码分析)

文章目录 前言一、软件定时器结构体二、软件定时器的工作机制三、创建软件定时器四、启动软件定时器五、软件定时器如何知道什么时候被调用总结 前言 除了有硬件定时器&#xff0c;还有软件定时器&#xff0c;那么这篇文章将带大家学习一下软件定时器是如何工作的&#xff0c;…

『Linux升级路』基础开发工具——make/Makefile

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;Linux &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、认识make/Makefile &#x1f4d2;1.1make/Makefile的优点 &#x1f4d2;…

NJU操作系统公开课笔记(2)

上期目录&#xff1a; NJU操作系统公开课笔记&#xff08;1&#xff09;https://blog.csdn.net/jsl123x/article/details/134431343?spm1001.2014.3001.5501 目录 一.处理器与寄存器 二.中断 三.中断系统 四.进程 五.线程与多线程技术概述 六.处理器调度算法 一.处理器…

Couldn‘t agree a key exchange algorithm(available:curve25519-sha256,curve25519-sha256@libssh.org解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

终于等到你!常用的组织架构图模板,高清图片一键导出

组织架构图是一种用来展示一个组织内部人员和职责关系的图表。通过组织架构图&#xff0c;我们可以清晰地了解一个组织的层级架构和各个部门之间的关系。在本文中&#xff0c;我们将向大家推荐8个常用的组织架构图模板&#xff0c;帮助你快速制作出专业的组织架构图。 1. 市场营…

java开发必备的Vue知识点和技能

vue介绍 什么是Vue&#xff1f;vue就是一款用于构建用户界面的渐进式的JavaScript框架。&#xff08;官方&#xff1a;https://cn.vuejs.org/&#xff09; 框架&#xff1a;就是一套完整的项目解决方案&#xff0c;用于快速构建项目。 优点&#xff1a;大大提升前端项目的开…

基于C#实现奇偶排序

这篇就从简单一点的一个“奇偶排序”说起吧&#xff0c;不过这个排序还是蛮有意思的&#xff0c;严格来说复杂度是 O(N2)&#xff0c;不过在多核的情况下&#xff0c;可以做到 N2 /(m/2)的效率&#xff0c;这里的 m 就是待排序的个数&#xff0c;当 m100&#xff0c;复杂度为 N…

牛客 算法题 【HJ102 字符统计】 golang实现

题目 HJ102 字符统计 golang代码实现 package mainimport ("bufio""fmt""os""sort" )func main() {// str_arry :make([]string, 0)str_map : make(map[rune]int)result_map : make(map[int][]string)scanner : bufio.NewScanner(os…

k8s中安装consul集群

一、准备知识 headless services一般结合StatefulSet来部署有状态的应用&#xff0c;比如kafka集群&#xff0c;mysql集群&#xff0c;zk集群等&#xff0c;也包括本文要部署的consul集群。 0、consul集群 consul集群的分布式协议算法采用的是raft协议&#xff0c;这意味着必…

2024重庆大学计算机考研分析

24计算机考研|上岸指南 重庆大学 重庆大学计算机考研招生学院是计算机学院和大数据与软件学院。目前均已出拟录取名单。 重庆大学计算机学院是我国高校最早开展计算机研究的基地之一&#xff0c;1978年和1986年获西南地区首个硕士和博士点&#xff0c;1998年成立计算机学院&a…

IIP3参数的含义

IIP3参数的含义 三阶交调频率分量 混频器的输入端的总输入信号通常由射频输入&#xff08;载波被调制信号&#xff09;和本振组成。以输入总信号由3个正弦信号为例&#xff0c;输入端的总输入信号为&#xff1a; u u 1 cos ⁡ ω 1 t u 2 cos ⁡ ω 2 t u 3 cos ⁡ ω 3 …

森林无人机高效解决巡查难题,林区防火掀新篇

山东省某市为了强化森林火灾防范&#xff0c;采用了一项新兴手段——复亚智能无人机森林火情监测系统。这套系统在AI飞行大脑的指挥下&#xff0c;让无人机在空中巡逻&#xff0c;实现了无人机森林防火系统的实施落地。 一、AI大脑如何引领森林无人机高空巡逻&#xff1f; 在山…