SAP创建ODATA服务-Structure

SAP创建ODATA服务-Structure

1、创建数据字典

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

SAP创建ODATA服务-Structure_第1张图片

2、创建OData service

  1. 首先创建Gateway service project,事务码:SEGW,点击Create Project 按钮

    SAP创建ODATA服务-Structure_第2张图片

    SAP创建ODATA服务-Structure_第3张图片

    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

      SAP创建ODATA服务-Structure_第4张图片

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

      SAP创建ODATA服务-Structure_第5张图片

      选中所有字段,点击next

      SAP创建ODATA服务-Structure_第6张图片

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

      SAP创建ODATA服务-Structure_第7张图片

      点击finish,如下图所示:

      SAP创建ODATA服务-Structure_第8张图片

      完成后查看Entity属性

      SAP创建ODATA服务-Structure_第9张图片

    2. 调整Entity Sets

      设置Entity集合可CRUD

      SAP创建ODATA服务-Structure_第10张图片

  3. 设置Entity集合可CRUD

    选中项目名,右键Generate Runtime

    SAP创建ODATA服务-Structure_第11张图片

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

    SAP创建ODATA服务-Structure_第12张图片

    系统生成Runtime objects

    SAP创建ODATA服务-Structure_第13张图片

  4. 服务注册

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

    SAP创建ODATA服务-Structure_第14张图片

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

    SAP创建ODATA服务-Structure_第15张图片

    选择系统别名LOCAL

    SAP创建ODATA服务-Structure_第16张图片

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

    SAP创建ODATA服务-Structure_第17张图片

  5. 测试OData Service

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

    SAP创建ODATA服务-Structure_第18张图片

    SAP创建ODATA服务-Structure_第19张图片

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

    SAP创建ODATA服务-Structure_第20张图片

    浏览器测试可能存在问题:

    A.点击 Call Browser 按钮,系统显示 host name 或 port 没有配置好,使用事务码 SMICM,然后通过菜单 Goto -> Services,看看主机和端口是否配置好,是否启用。

    B.如果服务器没有在 Internet 上公开,这个 host name 不能通过 Internet 网进行访问,则需要设置本机的 hosts 文件,让本机指向这个域名。hosts 文件的位置在 C:\Windows\System32\drivers\etc 文件夹中。

    Gateway客户端测试:

    SAP创建ODATA服务-Structure_第21张图片

    SAP创建ODATA服务-Structure_第22张图片

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

    SAP创建ODATA服务-Structure_第23张图片

  6. 服务实现

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

    在SEGW界面中展开Service Implementation:

SAP创建ODATA服务-Structure_第24张图片

需要编写具体的代码,这样外部才能实现对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.
  1. Query重定义

    首先我们开看看GetEntitySet方法的编写过程 。选中GetEntitySet(Query),右键,Go to Abap Workbench

    SAP创建ODATA服务-Structure_第25张图片

    系统提示:

    SAP创建ODATA服务-Structure_第26张图片

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

    SAP创建ODATA服务-Structure_第27张图片

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

    SAP创建ODATA服务-Structure_第28张图片

    改写里面的逻辑:

    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内表结构。

    SAP创建ODATA服务-Structure_第29张图片

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

    SAP创建ODATA服务-Structure_第30张图片

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

    SAP创建ODATA服务-Structure_第31张图片

  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:如下

    SAP创建ODATA服务-Structure_第32张图片

  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

    SAP创建ODATA服务-Structure_第33张图片

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

    SAP创建ODATA服务-Structure_第34张图片

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

    SAP创建ODATA服务-Structure_第35张图片

    调用Function imports相关参数:

    Return type Kind:Entity type Return type: ZUSER

    Return Cardinality:返回值为实体集合,则选择 0…n

    HTTP:Get方式

    在这里插入图片描述

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

    SAP创建ODATA服务-Structure_第36张图片

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

    SAP创建ODATA服务-Structure_第37张图片

    完成后保存

    然后可以在Postman或者调用浏览器测试,可获得类似的结果 SAP创建ODATA服务-Structure_第38张图片

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

    下一步重定义方法:

    SAP创建ODATA服务-Structure_第39张图片

    代码如下:

    SAP创建ODATA服务-Structure_第40张图片

    然后通过Postman测试:

    http://gXXX.XXXXX.com:8000/sap/opu/odata/sap/ZRICO_STRU_USR_SRV/UserByName?UsrName=‘12’

    SAP创建ODATA服务-Structure_第41张图片

你可能感兴趣的:(SAP,UI5,SAP)