SAP调用RestfulApi接口POST数据到外部系统
作者:明光烁亮
出处:http://www.cnblogs.com/hezhongxun/
微信号:HEme922 欢迎加好友一起交流SAP! 视频资料共享。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
之前只写了get外部接口的数据,今天刚好做了个post的接口就随便记录下。
详细的业务就不多讲了,直接上方法和代码吧。
外部已经提供了一个post地址,而且要求参数也添加到地址后面,地址如下:
'http://192.168.0.XX:XXX/XXX/fileAction.do?funid=erp_ws&eventcode=syncData&nousercheck=1&user_id=SAP&type=2&data='
数据是以json的方式写入地址的。
使用RESTFUL接口post数据的方法顺序是:
1.创建http服务
2.设置http request的参数
3.把数据转换成json
4.发送http请求
5.接收返回的数据。
代码如下:
FUNCTION z_wms_delete_dn.
*"----------------------------------------------------------------------
*"*"本地接口:
*" EXPORTING
*" VALUE(RETURN) TYPE ZSTRU_WMS_RETURN
*" TABLES
*" VLDATA STRUCTURE ZTSD002 OPTIONAL
*"---------------------------------------------------------------------- DATA: lc_http_client TYPE REF TO if_http_client,
l_url TYPE string,
l_json_data TYPE string,
l_result_string TYPE string,
l_result TYPE zstru_wms_return. DATA: BEGIN OF ls_vldata.
INCLUDE STRUCTURE ztsd002.
DATA: loekz TYPE char1,
END OF ls_vldata. DATA: lt_vldata LIKE TABLE OF ls_vldata. DATA lc_json TYPE REF TO cl_fdt_json_serializer. "json格式转换 DATA: lt_zwms_dn_delete TYPE TABLE OF zwms_dn_delete."记录数据 INCLUDE fbgenmac.
fbgenmac 'Z_WMS_DELETE_DN'. LOOP AT vldata.
ls_vldata-vbeln = vldata-vbeln.
ls_vldata-posnr = vldata-posnr.
ls_vldata-loekz = 'L'.
APPEND ls_vldata TO lt_vldata.
CLEAR: ls_vldata. APPEND INITIAL LINE TO lt_zwms_dn_delete ASSIGNING FIELD-SYMBOL(<fs_wms>).
<fs_wms>-vbeln = vldata-vbeln.
<fs_wms>-posnr = vldata-posnr.
<fs_wms>-erdat = sy-datum.
<fs_wms>-erzet = sy-uzeit.
ENDLOOP. CASE sy-mandt.
WHEN '100'.
l_url = 'http://xxx.xxx.xxx.xxx/xx/fileAction.do?funid=erp_ws' &&
'&eventcode=syncData&nousercheck=1&user_id=SAP&type=2&data='.
WHEN '800'.
l_url = 'http://xxx.xxx.xxx.xxx/xx/fileAction.do?funid=erp_ws' &&
'&eventcode=syncData&nousercheck=1&user_id=SAP&type=2&data='.
ENDCASE. *****转换json格式
CREATE OBJECT lc_json. CALL METHOD lc_json->serialize_int
EXPORTING
data = lt_vldata
RECEIVING
r_json = l_json_data. TRANSLATE l_json_data TO LOWER CASE.CONCATENATE l_url l_json_data INTO l_url. *****创建http服务
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = l_url
IMPORTING
client = lc_http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4. IF sy-subrc <> 0.
EXIT.
ENDIF. CALL METHOD lc_http_client->request->set_header_field
EXPORTING
name = 'Content-Type'
value = 'application/JSON; charset=utf-8'. CALL METHOD lc_http_client->request->set_method( 'POST' ). *****发送http服务
CALL METHOD lc_http_client->send
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
http_invalid_timeout = 4
OTHERS = 5. IF sy-subrc <> 0.
EXIT.
ENDIF. *****接收返回数据
CALL METHOD lc_http_client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
OTHERS = 4. l_result_string = lc_http_client->response->get_cdata( ).
*****解析JSON数据
CALL METHOD lc_json->deserialize_int
EXPORTING
json = l_result_string
CHANGING
data = l_result. return = l_result. LOOP AT lt_zwms_dn_delete ASSIGNING FIELD-SYMBOL(<fs_dn>).
<fs_dn>-success = l_result-success.
<fs_dn>-message = l_result-message.
ENDLOOP. MODIFY zwms_dn_delete FROM TABLE lt_zwms_dn_delete.
IF sy-subrc = 0.
COMMIT WORK.
ELSE.
ROLLBACK WORK.
ENDIF. ENDFUNCTION.
其实HTTP还是挺复杂的,只是sap都封装了很多方法,以后有时间可以研究下http方面的知识。
作者:明光烁亮
出处:http://www.cnblogs.com/hezhongxun/
微信号:HEme922 欢迎加好友一起交流SAP! 视频资料共享。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
SAP调用RestfulApi接口POST数据到外部系统的更多相关文章
- SAP调用RestfulApi接口接收数据
因为准备要做一个关于调用外部接口的需求,所以自己先练习一下. 程序说明:我已经在.net开发的系统里提供一个api接口,现在在sap访问这个接口,来接收数据. 这里涉及Restful Api知识,以后 ...
- java接口对接——别人调用我们接口获取数据
java接口对接——别人调用我们接口获取数据,我们需要在我们系统中开发几个接口,给对方接口规范文档,包括访问我们的接口地址,以及入参名称和格式,还有我们的返回的状态的情况, 接口代码: package ...
- 分享自研实现的多数据源(支持同DB不同表、跨DB表、内存数据、外部系统数据等)分页查询工具类实现原理及使用
思考: 提起分页查询,想必任何一个开发人员(不论是新手还是老手)都能快速编码实现,实现原理再简单不过,无非就是写一条SELECT查询的SQL语句,ORDER BY分页排序的字段, 再结合limit ( ...
- 调用REST接口获取数据
/// <summary> /// 根据机构代码本机构下报警用户列表: /// </summary> /// <param name="org_code&quo ...
- 通过Spark Streaming的foreachRDD把处理后的数据写入外部存储系统中
转载自:http://blog.csdn.net/erfucun/article/details/52312682 本博文主要内容包括: 技术实现foreachRDD与foreachPartition ...
- 【翻译】Flink Table Api & SQL —— 连接到外部系统
本文翻译自官网:Connect to External Systems https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev ...
- 新闻网大数据实时分析可视化系统项目——19、Spark Streaming实时数据分析
1.Spark Streaming功能介绍 1)定义 Spark Streaming is an extension of the core Spark API that enables scalab ...
- thinkjs学习-this.assign传递数据和ajax调用后台接口
在页面加载时,就需要显示在页面上的数据,可以在后台使用this.assign赋值,在前台通过ejs等模板获取:用户点击按钮,或者触发某些事件和后台进行交互时,就需要用到ajax调用后台接口.本文通过一 ...
- ABAP 程序/接口调用其他程序的数据
在ABAP遇到的业务场景中,可能会遇到一种情况,需要调用其他报表的数据来发送或者二次加工,这个时候又不想对源程序做大的改动.有以下几种思路解决. 1.修改源程序,将需要展示的数据存储到DB中,然后主程 ...
随机推荐
- Java才是世界上最好的语言,Java在高频交易中替代C++
高频交易 高频交易是指从那些人们无法利用的极为短暂的市场变化中寻求获利的计算机化交易,比如,某种证券买入价和卖出价差价的微小变化,或者某只股票在不同交易所之间的微小价差.在高频交易中,自动化应用程序每 ...
- NOI2020D1T1美食家
传送门:QAQQAQ 完了完了NOI签到题全班打不出来,真就全部成为时代的眼泪了... 首先$O(mT)$的$dp$显然,然后因为$T$很大$w$很小矩阵快速幂显然,但是有$k=200$卡不过去. 然 ...
- sdasd
create PROCEDURE v4(in c_year int) BEGIN declare num int(10) default 0; declare num1 int(10); select ...
- 论文阅读:Learning Attention-based Embeddings for Relation Prediction in Knowledge Graphs(2019 ACL)
基于Attention的知识图谱关系预测 论文地址 Abstract 关于知识库完成的研究(也称为关系预测)的任务越来越受关注.多项最新研究表明,基于卷积神经网络(CNN)的模型会生成更丰富,更具表达 ...
- JS超酷时钟的制作
通过补充代码,实现时钟实时显示当前时间:年.月.日.时.分.秒.日期. <!DOCTYPE html> <html> <head lang="zh-CN&quo ...
- jupyter使用自动补全和切换默认浏览器
自动补全 可以做conda环境中执行以下命令.linux下打开conda环境的命令是: conda activate 退出conda环境的命令是: conda deactivate 安装插件: pip ...
- http代理阅读3 发送mem处理
每次客户端有可读数据触发时,优先检测是否还有数据没有发送,如果有则发送数据,然后在读取client数据 //向后端发送请求的调用过程 //ngx_http_upstream_send_request_ ...
- GSO和TSO
http://www.cnhalo.net/2016/09/13/linux-tcp-gso-tso/ TSO(TCP Segmentation Offload): 是一种利用网卡来对大数据包进行自动 ...
- Android自定控件基础(一)——几何图形绘制
虽然本人有几年开发经验,但是自定义控件这一块儿,研究的很少,惭愧--用到的时候就是百度查找,复制粘贴.工时紧,总是想的快点完工就好.(都是借口啦,想学总会有时间哒) 作为一个Android开发 要说自 ...
- showengineinnodbstatus的解读
如何查看innodb的相关信息 ---------------------- BUFFER POOL AND MEMORY ---------------------- Total memory al ...