当前位置: 首页 > article >正文

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’

    在这里插入图片描述


http://www.kler.cn/a/146974.html

相关文章:

  • python语言基础-5 进阶语法-5.2 装饰器-5.2.2 简单装饰器
  • 无人机动力系统测试-实测数据与CFD模拟仿真数据关联对比分析
  • JS的学习与使用
  • 2.STM32之通信接口《精讲》之USART通信
  • AWTK-WIDGET-WEB-VIEW 实现笔记 (4) - Ubuntu
  • Shell基础(4)
  • 什么是面向对象编程及面向过程编程,它们的异同和优缺点
  • 快速开发出一个公司网站
  • ES开启安全认证
  • 初识前后端数据交互(新手篇)
  • Nginx如何配置负载均衡
  • 《100 Java Mistakes and How to Avoid Them》笔记 2
  • 2023 极术通讯-Arm 发布合作产品Cortex-M52,专为AIoT应用设计
  • 利用STM32和蓝牙模块构建智能物联网设备的开发指南
  • laravel 重写批量添加,自动维护时间戳
  • 关于torch.backends.deterministic和torch.backends.cudnn.benchmark
  • 解决git与huggingface项目下载速度慢或者失败的问题
  • 70-76-堆、贪心算法
  • java设计模式学习之【单例模式】
  • Spark升级中对log4j中的一些思考
  • 移动安全威胁:今天和明天的危险
  • C++类与对象(5)—流运算符重载、const、取地址
  • 《微信小程序从入门到精通》---笔记1
  • 【Github】git安装
  • 【Python】使用execute(sql)执行insert之后没有插入数据
  • 贪吃蛇小游戏基本简单布局