SAP ABAP 使用SICF发布HTTP API接口

news/2024/4/25 20:05:34/文章来源:https://blog.csdn.net/qq_42080586/article/details/130289094

一、SE24创建类:Z_HCX_HTTP

1、创建类:

2、切换到接口(interface)页签,输入IF_HTTP_EXTENSION ,回车。切换到方法(method)页签,双击IF_HTTP_EXTENSION~HANDLE_REQUEST进入代码编辑界面。

 

3、在IF_HTTP_EXTENSION~HANDLE_REQUEST方法中编写代码:(注:文末附另一种写法)

   METHOD if_http_extension~handle_request.DATA: BEGIN OF ls_data,matnr TYPE matnr,maktx TYPE maktx,END OF ls_data.DATA: lt_data LIKE TABLE OF ls_data.DATA: lt_fields TYPE tihttpnvp.FIELD-SYMBOLS: <fs_field> LIKE LINE OF lt_fields.DATA: lv_method TYPE string. "获取GET/POST方式DATA: lv_json  TYPE string,  "返回参数lv_json1 TYPE string,  "获取传回值数据lv_json2 TYPE string.  "获取传回值数据*    获取JSON抬头数据server->request->get_header_fields(CHANGINGfields = lt_fields).lv_method = server->request->get_header_field( name = '~request_method' )."获取GET/POST方式CALL METHOD server->response->if_http_entity~set_content_typeEXPORTINGcontent_type = 'application/json'.CASE lv_method.WHEN 'GET'.
*        获取数据SELECT matnr maktx INTO CORRESPONDING FIELDS OF TABLE lt_dataFROM maktUP TO 20 ROWS.*        内表转换JSONCALL METHOD /ui2/cl_json=>serializeEXPORTINGdata   = lt_dataRECEIVINGr_json = lv_json.*        将行数据JSON返回给调用端server->response->set_cdata(EXPORTINGdata   = lv_json).server->response->set_status( code = 200 reason = 'OK' ).WHEN 'POST'.
*        获取JSON行数据lv_json1 = server->request->if_http_entity~get_cdata( ).
*        解析json至内表方法1/ui2/cl_json=>deserialize( EXPORTING json = lv_json1CHANGING data = ls_data ).IF NOT lv_json1 IS INITIAL.
*          获取数据SELECT matnr maktx INTO CORRESPONDING FIELDS OF TABLE lt_dataFROM maktUP TO 20 ROWSwhere matnr = ls_data-matnr.
*         内表转换jsonCALL METHOD /ui2/cl_json=>serializeEXPORTINGdata   = lt_dataRECEIVINGr_json = lv_json.
*        将行数据JSON返回给调用端server->response->set_cdata(EXPORTINGdata   = lv_json).ENDIF.LOOP AT lt_fields INTO DATA(ls_fields).CASE ls_fields-name.WHEN 'lt_data'.lv_json2 = ls_fields-value.ENDCASE.ENDLOOP.
*        解析json至内表方法1/ui2/cl_json=>deserialize( EXPORTING json = lv_json2CHANGING data = lt_data ).IF NOT lv_json2 IS INITIAL.
*        将行数据JSON返回给调用端server->response->set_cdata(EXPORTINGdata   = 'SoapUi传参已收到').ENDIF.server->response->set_status( code = 200 reason = 'OK' ).ENDCASE.ENDMETHOD.

二、使用事务码 SICF 在 default_host/sap/bc 节点下面创建子节点,用 Z_HCX_HTTP 类并激活方法: 

1、创建子元素:

 

 之后点击保存。

2、在default_host/sap中找到刚刚创建的子元素:Z_HCX_HTTP激活服务:

 3、获取URL调用地址:

直接打开默认是GET请求:

 在Postman 中测试post请求:

在SoapUI 中测试post请求:

 

文末附:上文步骤3提到的另一种写法。

1、手动再依次添加GET和POST方法,再依次选中,点击参数,添加参数SERVER - 类型Importing - 键入方法Type Ref To - 关联类型IF_HTTP_SERVER

 2、双击IF_HTTP_EXTENSION~HANDLE_REQUEST编写代码

  method IF_HTTP_EXTENSION~HANDLE_REQUEST.DATA(LV_METHOD) = SERVER->REQUEST->GET_METHOD( )."查看调用方法GET OR POSTCASE LV_METHOD.WHEN 'GET'.ME->GET( SERVER ).WHEN 'POST'.ME->POST( SERVER ).WHEN OTHERS."Sets current HTTP status codeSERVER->RESPONSE->SET_STATUS( CODE = 405 REASON = '请求方法不支持,请联系管理员!' ).ENDCASE.endmethod.

3、根据业务需求情况,选择GET或POST编写代码,以GET为例: 

  method GET.TYPES:BEGIN OF TY_TAB,AUFNR TYPE AFPO-AUFNR, "生产订单号
*      WERKS TYPE MARC-WERKS, "工厂
*      MATNR TYPE AFPO-MATNR, "物料号END OF TY_TAB.DATA:GT_TAB TYPE TABLE OF TY_TAB,GS_TAB TYPE TY_TAB.TYPES:BEGIN OF TY_OUT,MATNR TYPE AFPO-MATNR, "物料号LGORT TYPE AFPO-LGORT, "库存地点PSMNG TYPE AFPO-PSMNG, "总数量END OF TY_OUT.DATA:GT_OUT TYPE TABLE OF TY_OUT,GS_OUT TYPE TY_OUT.DATA:BEGIN OF LS_REQUEST,ACTION TYPE STRING,           " 可以用来区分具体对应的处理类DATA   TYPE TABLE OF TY_TAB, " 表结构END OF LS_REQUEST,LV_JSON         TYPE STRING,LV_CONTENT_TYPE TYPE STRING,LV_JSON_OUT     TYPE STRING,LT_RETURN TYPE STANDARD TABLE OF BAPIRETURN,LS_RETURN TYPE BAPIRETURN." DELIVERS THE HTTP BODY OF THIS ENTITY AS CHARACTER DATALV_JSON  = SERVER->REQUEST->GET_CDATA( ).IF LV_JSON IS INITIAL.SERVER->RESPONSE->SET_STATUS( CODE = 404 REASON = '未解析到BODY参数,请检查' ).RETURN.ENDIF." 将JSON转换成内表/UI2/CL_JSON=>DESERIALIZE( EXPORTING JSON = LV_JSON CHANGING DATA = LS_REQUEST ).CASE LS_REQUEST-ACTION.WHEN 'ZGETPRINT'.WHEN OTHERS.SERVER->RESPONSE->SET_STATUS( CODE = 404 REASON = '未解析到对应ACTION,请检查' ).RETURN.ENDCASE.IF LS_REQUEST-DATA IS NOT INITIAL.GT_TAB = LS_REQUEST-DATA.ENDIF.LOOP AT GT_TAB INTO GS_TAB."补全生产订单号的前导0.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGINPUT  = GS_TAB-AUFNRIMPORTINGOUTPUT = GS_TAB-AUFNR.MODIFY GT_TAB FROM GS_TAB.ENDLOOP.*   获取打印数据SELECT MATNR LGORT PSMNG INTO CORRESPONDING FIELDS OF TABLE GT_OUTFROM AFPO FOR ALL ENTRIES IN GT_TABWHERE AUFNR = GT_TAB-AUFNR.IF GT_OUT IS INITIAL.SERVER->RESPONSE->SET_CDATA( /UI2/CL_JSON=>SERIALIZE( DATA = 'CODE:500, SAP API SELECT ERROR' ) ).RETURN.ENDIF.LOOP AT GT_OUT INTO GS_OUT."去除物料号的前导0.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'EXPORTINGINPUT  = GS_OUT-MATNRIMPORTINGOUTPUT = GS_OUT-MATNR.MODIFY GT_OUT FROM GS_OUT.ENDLOOP.*    内表转换JSONCALL METHOD /UI2/CL_JSON=>SERIALIZEEXPORTINGDATA   = GT_OUTRECEIVINGR_JSON = LV_JSON_OUT.*   将行数据JSON返回给调用端SERVER->RESPONSE->SET_CDATA(EXPORTINGDATA   = LV_JSON_OUT ).endmethod.

4、请求示例

{

  "ACTION""ZGETPRINT",

  "DATA": [

      {

            "AUFNR":"1000003"

        }

  ]

}

5、响应示例​​​

A[{"MATNR":"11000042","LGORT":"4071","PSMNG":1620.000}]

B"CODE:500, SAP API SELECT ERROR"  注:未获取到数据

 

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32 产生随机数方式

STM32 产生随机数方式 C语言的stdlib.h库里的srand(unsigned seed)和rand(void)函数&#xff0c;可以配合产生伪随机数。其中srand(seed)产生算法种子&#xff0c;再由rand()通过算法产生随机数&#xff0c;产生的随机数在宏定义RAND_MAX范围内。如果seed不变&#xff0c;则产…

URL 转为QR code(二维码)

推荐一个良心的网站&#xff0c;能够免费地将url、text编码为二维码&#xff0c;而且还能设计logo、颜色等。 https://www.the-qrcode-generator.com/ 如下图&#xff1a; 可以自己定义logo、颜色&#xff1a; 还能查看扫描历史等统计信息&#xff1a; 上述所有功能都是免…

【虚拟仿真】Unity3D打包WEBGL后播放视频(VideoPlayer组件)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 本篇文章实现Unity3D打包WEBGL后播放视频&#xff0c;如下图所…

VGG网络与中间层特征提取

1. 背景 VGG是常见的用于大型图片识别的极深度卷积网络&#xff0c; 这里主要介绍VGG网络预测在ImageNet数据集上的训练及预测。 2. ImageNet图像数据集简介 ImageNet包含了145W张224*224像素的三通道彩色图像数据集&#xff0c;图像划分为1000个种类。其中训练集130W张&…

Observability:添加免费和开放的 Elastic APM 作为 Elastic 可观察性部署的一部分 - 8.x

作者&#xff1a;David Hope 在最近的一篇博文中&#xff0c;我们向你展示了如何开始使用 Elastic 可观察性的免费开放层。 下面&#xff0c;我们将介绍你需要做些什么来扩展你的部署&#xff0c;这样你就可以开始免费从应用程序性能监控&#xff08;APM&#xff09;或跟踪集群…

可算是熬出头了,测试4年,费时8个月,入职阿里,涨薪14K

前言 你的努力&#xff0c;终将成就无可替代的自己。 本科毕业后就一直从事测试的工作&#xff0c;和多数人一样&#xff0c;最开始从事点点点的工作&#xff0c;看着自己的同学一步一步往上走&#xff0c;自己还是在原地踏步&#xff0c;说实话这不是自己想要的状态。 一年半…

为什么你永远不应该在CSS中使用px来设置字体大小

代码部署后可能存在的BUG没法实时知道&#xff0c;事后为了解决这些BUG&#xff0c;花了大量的时间进行log 调试&#xff0c;这边顺便给大家推荐一个好用的BUG监控工具 Fundebug。 在Josh Collinsworth的博客文章“永远不要用px作为字体大小”中&#xff0c;作者讨论了为什么不…

Ceph入门到精通-Ceph 编排器简介

第 1 章 Ceph 编排器简介 作为存储管理员&#xff0c;您可以将 Ceph 编排器与 Cephadm 实用程序搭配使用&#xff0c;能够发现设备并在 Red Hat Ceph Storage 集群中创建服务。 1.1. 使用 Ceph Orchestrator Red Hat Ceph Storage Orchestrators 是经理模块&#xff0c;主要…

C语言函数大全-- o 开头的函数

C语言函数大全 本篇介绍C语言函数大全-- o 开头的函数 1. obstack_init&#xff0c;obstack_free&#xff0c;obstack_alloc&#xff0c;obstack_blank&#xff0c;obstack_grow 1.1 函数说明 函数声明函数功能void obstack_init(struct obstack *obstack_ptr);它是 POSIX …

TypeScript自学笔记

目录 1.什么是Ts? 1.1 设计公司&#xff1a;微软 1.2 TS概述 1.3 TS是静态类型 JS是动态类型 1.4 TS是强类型语言 JS是弱类型语言 2.TypeScript编译器 2.1 安装 2.2 TS自动编译和编译选项设置 3.TS的数据类型 3.1 基础数据类型number、string、boolean 3.2 Arrays&a…

美颜sdk开发实践:如何构建美颜sdk功能?

美颜功能是现今很多应用中必不可少的一项功能。而要实现美颜功能&#xff0c;除了自己编写美颜算法外&#xff0c;还可以使用美颜sdk来实现。本文将介绍如何从零开始构建美颜功能&#xff0c;利用美颜sdk实现美颜效果。 一、简介 美颜sdk可以向用户提供多种美颜效果&#xff…

大学生用什么蓝牙耳机好?2023好用的蓝牙耳机推荐

近几年&#xff0c;蓝牙耳机市场不断扩大&#xff0c;逐渐取代有线耳机成为最受人欢迎的数码产品之一。作为蓝牙耳机主要受众群的大学生&#xff0c;用什么蓝牙耳机比较好呢&#xff1f;下面&#xff0c;我来给大家推荐几款便宜好用的蓝牙耳机&#xff0c;一起来看看吧。 一、…

stm32读写内部Flash

stm32内部flash地址架构映射 因为我的stm32f407的内部flash是1M的所以块2不存在&#xff0c;但他的地址仍然存在&#xff0c;只是没有作用&#xff0c;这是stm32的整体框架。 主存储器 一般我们说 STM32 内部 FLASH 的时候&#xff0c;都是指这个主存储器区域&#xff0c;它…

生成树协议三姐妹:STP、RSTP 和 MSTP,附思科和华为双厂商命令示例

在计算机网络中&#xff0c;为了保证网络拓扑结构的稳定性和可靠性&#xff0c;需要采用一些协议进行网络的管理和控制。其中&#xff0c;STP、RSTP 和 MSTP 是三种常用的网络管理协议。本文将分别介绍这三种协议&#xff0c;并且使用华为、思科两家厂商作为案例给出相应的命令…

数据库之约束、索引和事务

一、约束 约束,顾名思义就是数据库对数据库中的数据所给出的一组检验规则.负责判断元素是否符合数据库要求.其目的就是为了提高效率以及准确性. 1.not null - > 数据元素非空 表示如果插入数据,则当前数据不能为空. //创建一张学生表,其班级id和年级id不为空 create …

【嵌入式笔/面试】嵌入式软件基础题和真题总结——网络相关

在学习的时候找到几个十分好的工程和个人博客&#xff0c;先码一下&#xff0c;内容都摘自其中&#xff0c;有些重难点做了补充&#xff01; 才鲸 / 嵌入式软件笔试题汇总 嵌入式与Linux那些事 阿秀的学习笔记 小林coding 百问网linux 嵌入式软件面试合集 2022年春招实习十四面…

unity3d---物体加点击事件

目录 1.给需要点击点物体加collider 2.层级面板加EventSystem 3. 相机加Physics Raycaster 4.物体单独响应点击事件 5.控制脚本实现各物体的点击事件 6.点击ui时屏蔽 物体点击事件 1.给需要点击点物体加collider 2.层级面板加EventSystem 3. 相机加Physics Raycaster 2d…

6. 树的入门

6. 树的入门 之前我们实现的符号表中&#xff0c;不难看出&#xff0c;符号表的增删查操作&#xff0c;随着元素个数N的增多&#xff0c;其耗时也是线性增多的&#xff0c;时间复杂度都是O(n),为了提高运算效率&#xff0c;接下来我们学习树这种数据结构。 6.1 树的基本定义 …

PerformanceTest, monitoring command

PerformanceTest, monitoring command 1、数据库 #查看最大连接数 show variables like max_connections; #例如:查看mysql连接数 show status like Threads%; 说明: threads_cached //查看线程缓存内的线程的数量 threads_connected //查看当前打开的连接的数量(打开的…

Pytorch的几种常用优化器

文章目录 AdagradSGDRMSpropAdamAdamW Adagrad Adagrad是一种可以自动调节每个参数更新的梯度的优化器&#xff0c;也可以做到在梯度平缓时走的步长大&#xff0c;在梯度小时走的步长小&#xff0c;从而防止loss出现剧烈震荡的情况。这里默认你已知道了他的原理了&#xff0c;…