当前位置: 首页 > news >正文

SAP ABAP Odata

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."AssociationNavigationREAD 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

GetEntity和GetEntitys GetEntitys 创建Odata Project 导入结构 选择需要的字段 设定Key 勾选字段的creatable、updatable、sortable、nullable、filterable属性值。 再依上述步骤创建ZPOITEM结构和实体集 3. 创建ZPOHEADER和ZPOITEM的Association 两个实体集的关联字段&…...

Android native ASAN 排查内存泄漏

一、概述 android 对native - c/c 的调试和排查是比较难受的一件事。我看周遭做window , linux 甚至ios的调试排查起c的代码都比较方便。习惯了app开发去熟悉native是各种痛苦,最主要是排查问题上。后续有时间打算整理下native 的错误排查使用&#xff…...

Django项目开发

一.认识NoSQL 1.SQL 关系型数据库 结构化: 定义主键,无符号型数据等关联的:结构化表和表之间的关系通过外键进行关联,节省存储空间SQL查询:语法固定 SELECT id,name,age FROM tb_user WHERE id1 ACID 2.NoSQL 非关系型数据库 Re…...

Debezium系列之:深入理解Debezium Server和Debezium Server实际应用案例详解

Debezium系列之:深入理解Debezium Server和Debezium Server实际应用案例详解 一、认识Debezium Server二、下载Debezium Server三、解压Debezium Server四、查看Debezium Server目录五、Debezium Server配置六、Debezium Server启动输出样式七、源配置八、格式配置九、Transfo…...

IDE2022源码编译tomcat

因为学习需要,我需要源码编译运行tomcat对其源码进行一个简单的追踪分析。由于先前并未接触过java相关的知识,安装阻力巨大。最后请教我的开发朋友才解决了最后的问题。将其整理出来,让大家能够快速完成相关的部署。本文仅解决tomcat-8.5.46版…...

214 情人节来袭,电视剧 《点燃我温暖你》李峋同款 Python爱心表白代码,赶紧拿去用吧

大家好,我是徐公,六年大厂程序员经验,今天为大家带来的是动态心形代码,电视剧 《点燃我温暖你》同款的,大家赶紧看看,拿去向你心仪的对象表白吧,下面说一下灵感来源。 灵感来源 今天&#xff…...

数据库范式

基本概念 函数依赖 x→yx\rightarrow yx→y,当确定xxx的时候,yyy也可以确定 例: 学号→\rightarrow→姓名,当知道了学号,就知道了学生姓名 学号,课程号→\rightarrow→成绩,当知道了学号和课程号&#xff…...

CUDA中的底层驱动API

文章目录CUDA底层驱动API1. Context2. Module3. Kernel Execution4. Interoperability between Runtime and Driver APIs5. Driver Entry Point Access5.1. Introduction5.2. Driver Function Typedefs5.3. Driver Function Retrieval5.3.1. Using the driver API5.3.2. Using …...

【博客616】prometheus staleness对PromQL查询的影响

prometheus staleness对PromQL查询的影响 1、prometheus staleness 官方文档的解释: 概括: 运行查询时,将独立于实际的当前时间序列数据选择采样数据的时间戳。这主要是为了支持聚合(sum、avg 等)等情况&#xff0c…...

多传感器融合定位十三-基于图优化的建图方法其二

多传感器融合定位十二-基于图优化的建图方法其二3.4 预积分方差计算3.4.1 核心思路3.4.2 连续时间下的微分方程3.4.3 离散时间下的传递方程3.5 预积分更新4. 典型方案介绍4.1 LIO-SAM介绍5. 融合编码器的优化方案5.1 整体思路介绍5.2 预积分模型设计Reference: 深蓝学院-多传感…...

linux 服务器线上问题故障排查

一 线上故障排查概述 1.1 概述 线上故障排查一般从cpu,磁盘,内存,网络这4个方面入手; 二 磁盘的排查 2.1 磁盘排查 1.使用 df -hl 命令来查看磁盘使用情况 2.从读写性能排查:iostat -d -k -x命令来进行分析 最后一列%util可以看到每块磁盘写入的程度,而rrqpm/s以及…...

Sandman:一款基于NTP协议的红队后门研究工具

关于Sandman Sandman是一款基于NTP的强大后门工具,该工具可以帮助广大研究人员在一个安全增强型网络系统中执行红队任务。 Sandman可以充当Stager使用,该工具利用了NTP(一个用于计算机时间/日期同步协议)从预定义的服务器获取并…...

【SSL/TLS】准备工作:HTTPS服务器部署:Nginx部署

HTTPS服务器部署:Nginx部署1. 准备工作2. Nginx服务器YUM部署2.1 直接安装2.2 验证3. Nginx服务器源码部署3.1 下载源码包3.2 部署过程4. Nginx基本操作4.1 nginx常用命令行4.2 nginx重要目录1. 准备工作 1. Linux版本 [rootlocalhost ~]# cat /proc/version Li…...

微搭低代码从入门到精通11-数据模型

学习微搭低代码,先学习基本操作,然后学习组件的基本使用。解决了前端的问题,我们就需要深入学习后端的功能。后端一般包括两部分,第一部分是常规的数据库的操作,包括增删改查。第二部分是业务逻辑的编写,在…...

【算法基础】前缀和与差分

😽PREFACE🎁欢迎各位→点赞👍 收藏⭐ 评论📝📢系列专栏:算法💪种一棵树最好是十年前其次是现在1.什么是前缀和前缀和指一个数组的某下标之前的所有数组元素的和(包含其自身&#x…...

LTD212次升级 | 官网社区支持PC端展示 • 官网新增证件查询应用,支持条形码扫码查询

1、新增证件查询应用,支持条形码扫码查询; 2、新增用户社区PC端功能; 01证件查询应用 1、新增证件查询应用功能 支持证件信息录入、打印功能,支持条形码扫码识别。 后台管理操作路径:官微中心 - 应用 - 证件查询 …...

【安全】nginx反向代理+负载均衡上传webshell

目录 一、负载均衡反向代理下上传webshell Ⅰ、环境搭建 ①下载蚁剑,于github获取官方版: ②下载docker&docker-compose ③结合前面启动环境 ④验证 负载均衡下webshell上传 一、负载均衡反向代理下上传webshell 什么是反向代理? 通常的代…...

线程池框架

这是之前有做的一个可以接受用户传入任意类型的任务函数和任意参数,并且能拿到任务对应返回值的一个线程池框架,可以链接成动态库,用在相关项目里面。一共实现了两版,都是支持fixed和cached模式的,半同步半异步的&…...

【TCP的拥塞控制】基于窗口的拥塞控制

TCP的拥塞窗口CWND大小和传输轮次n的关系如下所示。(本题10分) cwnd12481632333435363738394041422122232425261248N1234567891011121314151617181920212223242526 问题: (1)慢开始阶段的时间间隔?&#…...

STP协议基础

STP协议技术来源二层环路及危害二层交换机网络的冗余性与环路人为错误导致的二层环路二层环路带来的问题STP生成树协议STP概述STP基本概念桥ID根桥COSTRPC(Root Path Cost)根路径开销PORT ID端口IDBPDU桥协议数据单元STP的计算过程(1&#xf…...

基于MCP协议与Playwright构建AI浏览器自动化服务器

1. 项目概述:当AI助手学会“动手”,一个浏览器自动化MCP服务器的诞生如果你和我一样,日常重度依赖Claude、Cursor这类AI编程助手,那你肯定遇到过这样的场景:你正和AI热烈地讨论一个技术方案,突然需要它帮你…...

Elasticsearch 查询日志:每个查询一行协调器级别日志,适用于 ES|QL、DSL、SQL 和 EQL

作者:来自 Elastic Najwa Harif 及 Valentin Crettaz 通过 Elasticsearch 查询日志,可以轻松理解查询对集群性能的影响。每个请求由一条协调器级别日志记录,覆盖 ES|QL、DSL、SQL 和 EQL,并提供完整的查询文本、追踪信息、可选用户…...

3步构建个人知识库:微信读书笔记智能同步终极方案

3步构建个人知识库:微信读书笔记智能同步终极方案 【免费下载链接】obsidian-weread-plugin Obsidian Weread Plugin is a plugin to sync Weread(微信读书) hightlights and annotations into your Obsidian Vault. 项目地址: https://gitcode.com/gh_mirrors/ob…...

从DICOM到NIfTI:3D Slicer中医学图像坐标转换的完整避坑指南(附Python代码片段)

从DICOM到NIfTI:3D Slicer中医学图像坐标转换的完整避坑指南(附Python代码片段) 医学影像处理中,数据格式和坐标系的差异常常成为工程师和研究员们的"隐形杀手"。想象一下,你花了三天三夜训练的深度学习模型…...

HS2-HF_Patch:让Honey Select 2体验全面升级的智能补丁

HS2-HF_Patch:让Honey Select 2体验全面升级的智能补丁 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 你是否曾经因为语言障碍而无法完全享受Honey…...

第八部分-企业级实践——39. 私有镜像仓库

39. 私有镜像仓库 1. 私有镜像仓库概述 私有镜像仓库用于存储和管理企业内部 Docker 镜像,提供镜像存储、分发、安全扫描、访问控制等功能。 ┌────────────────────────────────────────────────────────…...

契约驱动开发:用AI守护代码质量,告别技术债

1. 项目概述:从“技术债”到“可持续开发”的范式转变 如果你和我一样,长期在技术一线摸爬滚打,那你一定对“技术债”这个词又爱又恨。爱它,是因为它给了我们一个快速交付的借口;恨它,是因为它总在项目最脆…...

STM32F103C8T6驱动MAX30102:从CubeMX配置到心率可视化,一个LED灯带你看懂心跳

STM32F103C8T6驱动MAX30102:从硬件交互到心跳可视化实战 当你第一次看到LED灯随着自己的心跳节奏闪烁时,那种将生物信号转化为物理反馈的奇妙体验,正是嵌入式开发的魅力所在。本文将带你用STM32F103C8T6和MAX30102血氧传感器,打造…...

【Zotero-Perplexity协同系统白皮书】:基于127个真实科研场景验证的整合失败率下降91.6%的工程化方案

更多请点击: https://intelliparadigm.com 第一章:Zotero-Perplexity协同系统白皮书概览 Zotero-Perplexity协同系统是一个面向学术研究者的智能文献工作流增强框架,它将Zotero本地文献管理能力与Perplexity AI的实时语义检索、上下文感知问…...

ComfyUI-WanVideoWrapper:AI视频生成的全新创作革命

ComfyUI-WanVideoWrapper:AI视频生成的全新创作革命 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 在AI技术飞速发展的今天,ComfyUI-WanVideoWrapper作为一款强大的AI视…...