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 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

    系统提示:

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

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

    改写里面的逻辑:

    html 复制代码
    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:代码如下

    HTML 复制代码
     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重定义,代码如下:

    html 复制代码
      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重定义,代码如下:

    html 复制代码
      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重定义,代码如下:

    html 复制代码
      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'

相关推荐
数字化转型20258 天前
Alternative Reconciliation Accounts 备选统驭科目
sap
小九不懂SAP19 天前
6、定义字段状态变式
sap·s4
lu_rong_qq1 个月前
SAP B1 三大基本表单标准功能介绍-物料主数据(下)
数据库·sap·erp
仁,义1 个月前
其它特殊库存
sap·库存管理·特殊库存
李安迪是大神1 个月前
上传PDF、DOC文件到SAP HCM系统中案例
pdf·word·sap·abap·sap erp
集信通2 个月前
SAP和致远OA系统集成案例
人工智能·自动化·区块链·sap
数字化转型20252 个月前
SAP BRIM用于应收账款AR收入中台
大数据·microsoft·sap
荀彧原名苟或2 个月前
SAP MIGO屏幕增强的具体实施步骤介绍(SE19:MB_MIGO_BADI) <转载>
java·数据库·缓存·sap·abap
LilySesy2 个月前
ABAP小白开发操作手册+(九)ABAP调用http
开发语言·网络·网络协议·http·sap·abap
集信通2 个月前
某MDM主数据管理系统与微软Dynamic CRM系统(新加坡节点)集成案例
microsoft·中间件·自动化·sap