GetEntity和GetEntitys

  1. GetEntitys
    创建Odata Project
  2. 导入结构


选择需要的字段

设定Key

勾选字段的creatable、updatable、sortable、nullable、filterable属性值。

再依上述步骤创建ZPOITEM结构和实体集
3. 创建ZPOHEADER和ZPOITEM的Association

两个实体集的关联字段,关联字段依情况填写,完了下一步点完成

  1. 生成服务对象

    生成4个类,注册1个模型,1个服务
    ZCL_ZTEST_ODATA1_MPC_EXT 数据处理增强类
    接口逻辑主要处理类,在该类中重定义相应的方法来执行业务处理逻辑
    ZCL_ZTEST_ODATA1_DPC_EXT 模型处理增强类
    接口数据模型定义类,在该类中定义接口结构。

  2. 基于Odata对象生成相应服务
    注册服务并指定系统别名


    注意:别名不跨client,所以需要将别名放入定制请求中,通过scc1传输到开发系统的其他client。最后也需要传输到测试和生产系统。
    注意:odata接口服务传输到测试或生产系统后需要手动激活服务。可以点击下图中的Internet通信框架节点按钮再点击激活按钮,或者在SCIF下激活服务。

    点击定制进入到修改别名视图,点击修改按钮后,选中别名服务行,再点击标示图按钮,选则传输后会弹出选中请求输入框,指定需要放入的定制请求后,点击包含在请求中,最后点击保存按钮后则别名正式被包含在了请求中。


    然后将它包含到请求中再点击保存

    服务注册完成之后,点击SAP Gateway Client(T-Code:/IWFND/GW_CLIENT)按钮进入测试页面

  3. 实现GetEntitys方法(取多条数据)

    重定义Get_EntitySet方法,鼠标右键点击方法

    (注:GET_ENTITYSET后缀的表示取数方法取多条数据,GET_ENTITY后缀的表示取单条)

    IV_ENTITY_NAME区分大小写,与下面的保持一致

    都转成大写,保持一致

    实施重定义的方法

    DATA:lr_ebeln TYPE RANGE OF ekko-ebeln,ls_ebeln LIKE LINE OF lr_ebeln,lv_top   TYPE i,lv_skip  TYPE i.es_response_context-count = lines( et_entityset ).lv_top = io_tech_request_context->get_top( ).lv_skip = io_tech_request_context->get_skip( ).CASE translate_entity_name( iv_entity_name ).WHEN 'ZPOHEADER'."filter  操作符eq , ne, le, lt , ge, gtIF it_filter_select_options[] IS NOT INITIAL.READ TABLE it_filter_select_options INTO DATA(lw_filter) WITH KEY property = 'Ebeln'.IF  sy-subrc = 0.LOOP AT lw_filter-select_options INTO DATA(lw_range).MOVE-CORRESPONDING lw_range TO ls_ebeln.APPEND ls_ebeln TO lr_ebeln.ENDLOOP.ENDIF.ENDIF.SELECT * FROM ekkoWHERE ebeln IN @lr_ebelnORDER BY ebelnINTO CORRESPONDING FIELDS OF TABLE @et_entityset UP TO @lv_top ROWS OFFSET @lv_skip."sortIF it_order[] IS NOT INITIAL.READ TABLE it_order INTO DATA(lw_order) WITH KEY property = 'Ebeln'.IF sy-subrc = 0.CASE me->translate_entity_name( lw_order-order ).WHEN 'DESC'.SORT et_entityset BY ebeln DESCENDING.WHEN 'ASC'.SORT et_entityset BY ebeln ASCENDING.WHEN OTHERS.ENDCASE.ENDIF.ENDIF.WHEN OTHERS.ENDCASE.


Top,skip

Filter

Orderby

7. Get_entity

  METHOD zpoheaderset_get_entity.CASE  me->translate_entity_name( iv_entity_name ).WHEN  'ZPOHEADER'.READ TABLE it_key_tab INTO DATA(lw_key_tab) WITH KEY name = 'Ebeln'.IF sy-subrc = 0.DATA(lv_ebeln) = |{ lw_key_tab-value  ALPHA = IN WIDTH = 10 }|.SELECT SINGLE * FROM ekko INTO CORRESPONDING FIELDS OF @er_entity WHERE ebeln = @lv_ebeln.ENDIF.ENDCASE.ENDMETHOD.

Association和Navigation

Association 和 Navigation主要是用来关联两个entity,比如先前例子中的header和item,我们想在获取header数据的同时,还获取其item的数据。
只需要在ITEM的GET_ENTITYSET方法实现即可。

  1. 重定义ITEM的方法
    DATA:lr_ebeln TYPE RANGE OF ekko-ebeln,ls_ebeln LIKE LINE OF lr_ebeln,lr_ebelp TYPE RANGE OF ekpo-ebelp,ls_ebelp LIKE LINE OF lr_ebelp.CASE translate_entity_name( iv_entity_name ).WHEN 'ZPOITEM'.IF it_filter_select_options[] IS NOT INITIAL.READ TABLE it_filter_select_options INTO DATA(lw_filter) WITH KEY property = 'Ebeln'.IF  sy-subrc = 0.LOOP AT lw_filter-select_options INTO DATA(lw_range).MOVE-CORRESPONDING lw_range TO ls_ebeln.APPEND ls_ebeln TO lr_ebeln.ENDLOOP.ENDIF.READ TABLE it_filter_select_options INTO lw_filter WITH KEY property = 'Ebelp'.IF  sy-subrc = 0.LOOP AT lw_filter-select_options INTO lw_range.MOVE-CORRESPONDING lw_range TO ls_ebelp.APPEND ls_ebeln TO lr_ebelp[].ENDLOOP.ENDIF.ENDIF."Association和NavigationREAD TABLE it_key_tab INTO DATA(lw_key_tab) WITH KEY name = 'Ebeln'.IF sy-subrc = 0.DATA(lv_ebeln) = |{ lw_key_tab-value  ALPHA = IN WIDTH = 10 }|.ENDIF.IF lv_ebeln IS NOT  INITIAL.SELECT * FROM ekpo INTO CORRESPONDING FIELDS OF TABLE @et_entityset UP TO 500 ROWSWHERE ebeln = @lv_ebeln.ELSE.SELECT * FROM ekpo INTO CORRESPONDING FIELDS OF TABLE @et_entityset UP TO 500 ROWSWHERE ebeln IN @lr_ebeln AND ebelp IN @lr_ebelp.ENDIF.IF it_order[] IS NOT INITIAL.READ TABLE it_order INTO DATA(lw_order) WITH KEY property = 'Ebeln'.READ TABLE it_order INTO lw_order WITH KEY property = 'Ebelp'.IF sy-subrc = 0.CASE me->translate_entity_name( lw_order-order ).WHEN 'DESC'.SORT et_entityset BY ebeln DESCENDING.WHEN 'ASC'.SORT et_entityset BY ebeln ASCENDING.WHEN OTHERS.ENDCASE.ENDIF.ENDIF.WHEN OTHERS.ENDCASE.

  1. Expand实现
    需重定义/IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_EXPANDED_ENTITY方法
    "GET po itemTYPES: ty_item TYPE TABLE OF zcl_ztest_po_mpc_ext=>ts_zpoitem WITH DEFAULT KEY.TYPES: BEGIN OF ty_po_data.INCLUDE TYPE zcl_ztest_po_mpc_ext=>ts_zpoheader.TYPES: zpoitemset TYPE ty_item,END OF ty_po_data.DATA:ls_po_data TYPE ty_po_data,ls_header  TYPE zcl_ztest_po_mpc_ext=>ts_zpoheader,lt_item    TYPE ty_item.TYPES: ty_header TYPE TABLE OF zcl_ztest_po_mpc_ext=>ts_zpoheader WITH DEFAULT KEY.CASE translate_entity_name( io_tech_request_context->get_entity_set_name( ) ).WHEN 'ZPOHEADERSET'.READ TABLE it_key_tab INTO DATA(ls_key) WITH KEY name = 'Ebeln'.IF sy-subrc = 0.DATA(lv_ebeln) = |{ ls_key-value ALPHA = IN WIDTH = 10 }|.SELECT SINGLE * FROM ekko INTO CORRESPONDING FIELDS OF @ls_headerWHERE ebeln = @lv_ebeln.SELECT * FROM ekpo INTO CORRESPONDING FIELDS OF TABLE @lt_itemWHERE ebeln = @lv_ebeln.MOVE-CORRESPONDING ls_header TO ls_po_data.MOVE-CORRESPONDING lt_item[] TO ls_po_data-zpoitemset[].copy_data_to_ref( EXPORTING is_data = ls_po_dataCHANGING cr_data = er_entity ).ENDIF.WHEN OTHERS.ENDCASE.

Create方法实现

Create方法同上面一样,直接重定义对应的Create_Entity方法即可。

  1. 先定义结构,获取传来的参数

  2. 检查主键

  METHOD check_ebeln.IF is_header-ebeln IS INITIAL.is_message = VALUE #( msgid = 'SY' msgno = '002' attr1 = '采购单为空' ).ENDIF.ENDMETHOD.
  1. 方法实施
    io_data_provider->read_entry_data( IMPORTING es_data  = gs_header ).gs_message = check_ebeln( gs_header ).IF gs_message IS  INITIAL.MOVE-CORRESPONDING gs_header TO er_entity."返回数据ELSE.RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exceptionEXPORTINGtextid = gs_message.ENDIF.


主键为空,需报错

Update和Delete方法实现与Create一样

Create_Deep_Entity

重定义实现CREATE_DEEP_ENTITY方法,我们可以实现一起更新Navigation属性。比如前台创建PO 抬头和相应的行项目,传到后台可以通过此方法将抬头和行项目一起创建。

  1. 重定义/IWBEP/IF_MGW_APPL_SRV_RUNTIME~CREATE_DEEP_ENTITY方法

  2. 定义模型增强类(zcl_ztest_odata1_mpc_ext)中的类型

CLASS zcl_ztest_odata1_mpc_ext DEFINITIONPUBLICINHERITING FROM zcl_ztest_odata1_mpcCREATE PUBLIC .PUBLIC SECTION.TYPES:ty_t_po_data TYPE STANDARD TABLE OF zcl_ztest_odata1_mpc_ext=>ts_zpoitem WITH DEFAULT KEY .TYPES:BEGIN OF ty_po_data.INCLUDE TYPE zcl_ztest_odata1_mpc_ext=>ts_zpoheader.TYPES: toitem TYPE ty_t_po_data,END OF ty_po_data .PROTECTED SECTION.PRIVATE SECTION.
ENDCLASS.
  1. 实现方法Create_deep_entity
    DATA:lv_compare_result TYPE /iwbep/if_mgw_odata_expand=>ty_e_compare_result.DATA:ls_po     TYPE zcl_ztest_po_mpc_ext=>ty_po_data,ls_header TYPE ekko,lt_item   TYPE TABLE OF ekpo,ls_item   TYPE ekpo.CONSTANTS:lc_toitem TYPE string VALUE 'ToItem'."判断传入数据是否包含ITEM数据lv_compare_result = io_expand->compare_to_tech_names( lc_toitem ).IF lv_compare_result EQ /iwbep/if_mgw_odata_expand=>gcs_compare_result-match_no.io_data_provider->read_entry_data(  IMPORTING es_data = ls_po ).MOVE-CORRESPONDING ls_po TO ls_header.MOVE-CORRESPONDING ls_po-toitem[] TO lt_item.copy_data_to_ref( EXPORTING is_data = ls_poCHANGING cr_data  = er_deep_entity ).ENDIF.

SAP ABAP Odata相关推荐

  1. 17. 如何通过 SAP ABAP OData $expand 操作在同一个 HTTP 请求中返回多个节点的数据

    本教程前一篇文章,我们已经完成了为了支持 OData 协议定义的 $expand 操作,而必须进行的 OData 模型层面的增强: 16. 如何修改 SAP ABAP OData 模型,使其支持 $e ...

  2. 26. SAP ABAP OData Gateway 框架里 /IWFND, /IWBEP 这些缩写代表了什么含义?

    文章目录 GW FND BEP 本文参考链接 本教程前一篇文章 - 25. 答疑 - SAP OData 框架处理 Metadata 元数据请求的实现细节,前后端组件部署在同一台物理服务器,我们深入了 ...

  3. 6. 使用 Postman 工具高效管理和测试 SAP ABAP OData 服务

    序言 本文介绍了 Postman 这个强大的 API 测试工具.当我们待测试的 SAP ABAP OData 服务需要通过 user Authentication 验证才能使用时,可以通过手动在 Po ...

  4. 如何通过 SAP ABAP OData $expand 操作在同一个 HTTP 请求中返回多个节点的数据试读版

    正如本教程的开篇介绍文章SAP OData 开发教程 - 从入门到提高(包含 SEGW, RAP 和 CDP)所提到的,SAP OData 服务开发,从实现技术上来说,可以分为三大类.因此本教程也分为 ...

  5. 如何修改 SAP ABAP OData 模型,使其支持 $expand 操作试读版

    正如本教程的开篇介绍文章SAP OData 开发教程 - 从入门到提高(包含 SEGW, RAP 和 CDP)所提到的,SAP OData 服务开发,从实现技术上来说,可以分为三大类.因此本教程也分为 ...

  6. 18. SAP ABAP OData 服务嵌套创建功能的实现步骤(Create Deep)

    什么是 SAP ABAP OData 服务的嵌套创建功能?在很多 SAP 帮助文档里,这个功能的英文描述是 Create Deep,或者 Deep Insert. 我们通过一个现实的例子来讲解.下图是 ...

  7. 19. 如何使用 ABAP 程序消费 SAP ABAP OData 服务

    本教程到目前为止,我们已经创建了一个支持增删改查的图书管理 OData 服务.本步骤介绍如何使用 ABAP 程序,来消费这个 OData 服务. 假设我们开发 OData 服务的 SAP ABAP 系 ...

  8. 16. 如何修改 SAP ABAP OData 模型,使其支持 $expand 操作

    文章目录 OData 服务里 $expand 操作的应用场景 步骤1:创建一个新的 Entity Type Author 步骤2:创建一对 EntitySet 步骤3:创建一个新的 Associati ...

  9. SAP ABAP OData uri type为metadata的请求处理逻辑

    Created by Jerry Wang, last modified on Oct 22, 2014 metadata请求入口: metadata只支持xml格式: 在metadata的读取操作中 ...

最新文章

  1. mysql英文版怎么调中文_MYSQL 5.6安装设置中英文翻译
  2. 关于Juniper ScreenOS MIP/VIP地址说明
  3. AIRec个性化推荐召回模型调参实战
  4. 电脑硬件:磁盘、RAID知识,网卡概念与主流硬件产品知识介绍
  5. 事业单位考试题库计算机网络,2015年事业单位计算机基础知识试题及答案
  6. es xxx_by_query
  7. 隐藏windows任务栏中的窗口显示
  8. android短信模板,短信服务 · Android – Bmob后端云
  9. sqlserver 操作技巧
  10. CS 系统框架二[增加默认启动以及代码打开窗体]
  11. python实现将文件夹/子文件夹中内容清空
  12. js实现相册翻页,滚动,切换,轮播功能
  13. mysql忘记密码时如何修改root用户密码
  14. mac电脑如何配置mysql环境变量
  15. 原生ajax上传获取进度,ajax上传图片获取进度
  16. excel 某个单元格不是等于空值,Excel返回第一个与所有非空单元格及统计数量,把空单元格替换为0...
  17. java动效_前端实现炫酷动效_Lottie-前端实现AE动效
  18. #中秋节#迅镭激光第四届中秋游园会活动精彩回顾
  19. 获取Windows操作系统版本和位数
  20. MT7687芯片资料MT7687原理图资料

热门文章

  1. CV领域Transformer之Self-Attention浅薄理解
  2. navicat for mysql 10.1.7注册码
  3. sqlmap总出现missing a mandatory option的解决方法
  4. 路由交换的Serial,BRI,AUX,AUI等端口的区别和作用
  5. 脑波艺术DAO·dream lab
  6. 图(Graph)-图的存储
  7. Sputtr--万能搜索引擎
  8. 2019年中国自动驾驶行业报告:互联网企业与整车厂商互有优势
  9. Maven deploy配置方法
  10. AI Chip(一)