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’

    在这里插入图片描述

  • 23
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值