作者:明光烁亮

出处: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数据到外部系统的更多相关文章

  1. SAP调用RestfulApi接口接收数据

    因为准备要做一个关于调用外部接口的需求,所以自己先练习一下. 程序说明:我已经在.net开发的系统里提供一个api接口,现在在sap访问这个接口,来接收数据. 这里涉及Restful Api知识,以后 ...

  2. java接口对接——别人调用我们接口获取数据

    java接口对接——别人调用我们接口获取数据,我们需要在我们系统中开发几个接口,给对方接口规范文档,包括访问我们的接口地址,以及入参名称和格式,还有我们的返回的状态的情况, 接口代码: package ...

  3. 分享自研实现的多数据源(支持同DB不同表、跨DB表、内存数据、外部系统数据等)分页查询工具类实现原理及使用

    思考: 提起分页查询,想必任何一个开发人员(不论是新手还是老手)都能快速编码实现,实现原理再简单不过,无非就是写一条SELECT查询的SQL语句,ORDER BY分页排序的字段, 再结合limit ( ...

  4. 调用REST接口获取数据

    /// <summary> /// 根据机构代码本机构下报警用户列表: /// </summary> /// <param name="org_code&quo ...

  5. 通过Spark Streaming的foreachRDD把处理后的数据写入外部存储系统中

    转载自:http://blog.csdn.net/erfucun/article/details/52312682 本博文主要内容包括: 技术实现foreachRDD与foreachPartition ...

  6. 【翻译】Flink Table Api & SQL —— 连接到外部系统

    本文翻译自官网:Connect to External Systems  https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev ...

  7. 新闻网大数据实时分析可视化系统项目——19、Spark Streaming实时数据分析

    1.Spark Streaming功能介绍 1)定义 Spark Streaming is an extension of the core Spark API that enables scalab ...

  8. thinkjs学习-this.assign传递数据和ajax调用后台接口

    在页面加载时,就需要显示在页面上的数据,可以在后台使用this.assign赋值,在前台通过ejs等模板获取:用户点击按钮,或者触发某些事件和后台进行交互时,就需要用到ajax调用后台接口.本文通过一 ...

  9. ABAP 程序/接口调用其他程序的数据

    在ABAP遇到的业务场景中,可能会遇到一种情况,需要调用其他报表的数据来发送或者二次加工,这个时候又不想对源程序做大的改动.有以下几种思路解决. 1.修改源程序,将需要展示的数据存储到DB中,然后主程 ...

随机推荐

  1. 使用Apache Hudi + Amazon S3 + Amazon EMR + AWS DMS构建数据湖

    1. 引入 数据湖使组织能够在更短的时间内利用多个源的数据,而不同角色用户可以以不同的方式协作和分析数据,从而实现更好.更快的决策.Amazon Simple Storage Service(amaz ...

  2. 【QT】继承QRunnable+QThreadPool实现多线程

    往期链接: <QThread源码浅析> <子类化QThread实现多线程> <子类化QObject+moveToThread实现多线程> 本文章实例的源码地址:ht ...

  3. 【SpringBoot】15. Spring Boot核心注解

    Spring Boot核心注解 1 @SpringBootApplication 代表是Spring Boot启动的类 2 @SpringBootConfiguration 通过bean对象来获取配置 ...

  4. SQL存储过程返回值

    1 SQL存储过程返回值有3种 1.1 直接return返回(例如 return 1): 1.2 通过参数output返回(例如字符串类型): 1.3 直接返回程序集(Dataset程序集). 2 用 ...

  5. leetcode146 longest-substring-without-repeating-character

    题目描述 给定一个字符串,找出最长的不具有重复字符的子串的长度.例如,"abcabcbb"不具有重复字符的最长子串是"abc",长度为3.对于"bbb ...

  6. javascript-闭包【面试必备】

    闭包 定义:内层函数可以访问外层函数作用域的变量 意义/用途: 1.封装细节 2.实现模块化 3.常用实战li列表 // querySelectorAll es5支持的一个类似于jq的复杂选择器选取d ...

  7. 搭建面向NET Framework的CI/CD持续集成环境(一)Windows服务器安装Jenkins

    前言 网上大多数都是针对主流的Spring Cloud.NET Core的CI/CD方案.但是目前国内绝大部分的公司因为一些历史原因无法简单的把项目从NET Framework切换升级到NET Cor ...

  8. CentOS 8.x 下尝试安装.Net 5 的运行时

    1.背景 看着不管是群里还是公众号里这几天最热闹就是.Net 5.0 正式版的发布.C#9. 当然要开发.net 5.0 的项目就需要把VisualStudio升级的v16.8.0版本了.升级后自带着 ...

  9. C语言I博客作业3

    这个作业属于哪个课程 <https://edu.cnblogs.com/campus/zswxy/SE2020-1 > 这个作业要求在哪里 https://edu.cnblogs.com/ ...

  10. 经典c程序100例==11--20

    [程序11] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1 ...