SAP ABAP Odata

news2024/9/30 13:17:56

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, gt
        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.
        ENDIF.
        SELECT * FROM ekko
                 WHERE ebeln IN @lr_ebeln
                 ORDER BY ebeln
                 INTO CORRESPONDING FIELDS OF TABLE @et_entityset UP TO @lv_top ROWS OFFSET @lv_skip.

        "sort
        IF 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.
        "AssociationNavigation
        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 }|.
        ENDIF.
        IF lv_ebeln IS NOT  INITIAL.
          SELECT * FROM ekpo INTO CORRESPONDING FIELDS OF TABLE @et_entityset UP TO 500 ROWS
             WHERE ebeln = @lv_ebeln.
        ELSE.
          SELECT * FROM ekpo INTO CORRESPONDING FIELDS OF TABLE @et_entityset UP TO 500 ROWS
             WHERE 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 item
    TYPES: 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_header
                WHERE ebeln = @lv_ebeln.
          SELECT * FROM ekpo INTO CORRESPONDING FIELDS OF TABLE @lt_item
                WHERE 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_data
                            CHANGING 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_exception
        EXPORTING
          textid = 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 DEFINITION
  PUBLIC
  INHERITING FROM zcl_ztest_odata1_mpc
  CREATE 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_po
                        CHANGING cr_data  = er_deep_entity ).
    ENDIF.

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/338621.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RocketMQ-消息消费模式 顺序消费

RocketMQ-消息消费模式 顺序消费RocketMQ-消息消费模式集群模式集群模式的演示(本身就默认)Rocketmq存储队列广播模式顺序消费如何改实现顺序消费RocketMQ-消息消费模式 集群模式 在消费模式为集群的情况下,如果机器是集群的,消息只会给集群中的其中一台机器消费到 集群模…

【数据结构】双向链表的模拟实现(无头)

目录 前言: 1、认识双向链表中的结点 2、认识并创建无头双向链表 3、实现双向链表当中的一些方法 3.1、遍历输出方法(display) 3.2、得到链表的长度(size) 3.3、查找关键字key是否包含在双链表中(contains) 3.…

基于I2S通讯MAX98357模块的JetsonNano声音外放

前言有很多方法可以为 Jetson 设备添加音频功能。USB 扬声器和USB 麦克风是一种简单的解决方案,但它们确实占用了宝贵的 USB 插槽,这些插槽可能更适合用于键盘、蓝牙功能、Internet Keys 和其他配件。在 Jetson 设备上,NVIDIA 通过 40 针 GPI…

微软发布会精华回顾:“台式电脑”抢了风头

Lightbot北京时间2016年10月26日晚10点,微软在纽约发布了名为 Surface Studio 的一体机、名为 Surface Dial 的配件以及外观未变的顶配版 Surface Book。同时,微软宣布了 Windows 10 下一个重要版本——“Creators Update”的数项新功能,包括…

【Linux】冯诺依曼体系结构和操作系统概念

文章目录🎪 冯诺依曼体系结构🚀1.体系概述🚀2.CPU和内存的数据交换🚀3.体系结构中数据的流动🎪 操作系统概念理解🚀1.简述🚀2.设计目的🚀3.定位🚀4.理解🚀5.管…

AOP面向切面编程思想。

目录 一、AOP工作流程 1、基本概念 2、AOP工作流程 二、AOP核心配置 1、AOP切入点表达式 2、AOP通知类型 三、AOP通知获取数据 1、获取参数 2、获取返回值 3、获取异常 四、AOP事务管理 1、Spring事务简介 2、Spring事务角色 3、事务属性 一、AOP工作流程 1、…

Linux内核启动(理论,0.11版本)分段与分页

为什么要虚拟内存 我们知道,在之前上微机原理时,我们的程序是可以直接访问内存的,而且访问的是直接的物理内存,在实模式下,寄存器是16位的,数组总线(data bus)是16位的,…

设计模式-值类型与引用类型、深拷贝与浅拷贝、原型模式详解

一. 值类型和引用类型 1. 前言 (1). 分类 值类型包括:布尔类型、浮点类型(float、double、decimal、byte)、字符类型(char)、整型(int、long、short等)、枚举(entum)、结构体(struct)。 引用类型:数组、字符串(string)、类、接口…

DamiCMS SQL注入分析

2023年将会持续于B站、CSDN等各大平台更新,可加入粉丝群与博主交流:838681355,为了老板大G共同努力。 一、入口文件(单入口文件模式) 看一下Index.php文件代码:引入了php_safe.php文件 查看一下php_safe.php防御文件: 对变量e…

2019_41 考研408

2019年(单链表)41.(13分)设线性表采用带头结点的单链表保存,链表中的结点定义如下:typedef struct node {int data;struct node* next;}NODE;请设计一个空间复杂度为O(1)且时间上尽可能高效的算法,重新排列L中的各结点,得到线性表L(q,a,,a,an…

【正则表达式】获取html代码文本内所有<script>标签内容

文章目录一. 背景二. 思路与过程1. 正则表达式中需要限定<script>开头与结尾2. 增加标签格式的限定3. 不限制<script>首尾的内部内容4. 中间的内容不能出现闭合的情况三. 结果与代码四. 正则辅助工具一. 背景 之前要对学生提交的html代码进行检查&#xff0c;在获…

牛客小白月赛66

牛客小白月赛66_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com)冒着期末挂科的风险打了打&#xff0c;缓解了一下网瘾&#xff0c;感觉还行最近为了期末鸽了很多期的div3&#xff0c;一学期末就手痒想训&#xff0c;感觉再不打人要没了&#xff0c;结果…

linux性能优化-内存回收

linux文件页、脏页、匿名页 缓存和缓冲区&#xff0c;就属于可回收内存。它们在内存管理中&#xff0c;通常被叫做文件页&#xff08;File-backed Page&#xff09;。通过内存映射获取的文件映射页&#xff0c;也是一种常见的文件页。它也可以被释放掉&#xff0c;下次再访问的…

DOM编程-显示网页时钟

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>显示网页时钟</title> </head> <body bgcolor"antiquewhite"> <script type"text/javascrip…

剑指offer(中等)

目录 二维数组中的查找 重建二叉树 矩阵中的路径 剪绳子 剪绳子② 数值的整数次方 表示数值的字符串 树的子结构 栈的压入、弹出序列 从上到下打印二叉树① 从上到下打印二叉树③ 二叉搜索树的后序遍历序列 二叉树中和为某一值的路径 复杂链表的复制 二叉搜索树与…

C++复习笔记8

泛型编程&#xff1a;编写的是与类型无关的通用代码&#xff0c;是代码复用的一种手段&#xff0c;模板是泛型编程的基础。 1.函数模板&#xff1a;类型参数化&#xff0c;增加代码复用性。例如对于swap函数&#xff0c;不同类型之间进行交换都需要进行重载&#xff0c;但是函数…

K_A12_003 基于STM32等单片机采集光敏二极管模块参数 串口与OLED0.96双显示

K_A12_003 基于STM32等单片机采集光敏二极管模块参数 串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RC光敏二极管模块1.2、STM32F103C8T6光敏二极管模块五、基础知识…

面向 3DoF+的虚拟视图合成算法研究(陈 莹)

面向 3DoF的虚拟视图合成算法研究&#xff08;陈 莹&#xff09;论文贡献多视点联合的虚拟视图合成算法视图合成中多视点伪影消除算法面向虚拟视图合成算法的 3DoF系统基于深度的虚拟视图合成算法视点映射&#xff08;3D-Warping&#xff09;三维空间映射变换&#xff08;3D-Wa…

TYPE-C 手机/电脑同时充电直播 视频采集卡方案

Type-C音视频采集卡有什么作用&#xff1f; ​能够帮助专业用户和游戏玩家迅速搭建简单、高性价比的音视频解决方案。可将新闻联播、体育竞赛、视频教学课程、网络视频等&#xff0c;通过HDMI高清视频信号分段或整体录制在本地计算机共享使用。支持多种带HDMI接口的游戏机设备…

生物素-琥珀酰亚胺酯Biotin-NHS;CAS号:35013-72-0;可对溶液中的抗体,蛋白质和任何其他含伯胺的大分子进行简单有效的生物素标记。

结构式&#xff1a; ​ 生物素-琥珀酰亚胺酯Biotin NHS CAS号&#xff1a;35013-72-0 英文名称&#xff1a;Biotin-NHS 中文名称&#xff1a;D-生物素 N-羟基琥珀酰亚胺酯&#xff1b;生物素&#xff0d;琥珀酰亚胺酯 CAS号&#xff1a;35013-72-0 密度&#xff1a;1.50.1 …