SAP发布REST/HTTP接口
1.SE24新建类:ZCL_REST_QUERY

激活,然后添加interface:IF_HTTP_EXTENSION并激活。
2.实现IF_HTTP_EXTENSION~HANDLE_REQUEST:
METHOD IF_HTTP_EXTENSION~HANDLE_REQUEST.
DATA: LT_FIELDS TYPE TIHTTPNVP,
LV_HEADER_QUERY TYPE STRING,
LV_DATA TYPE STRING,
LV_HTML TYPE STRING. FIELD-SYMBOLS: <FS_FIELD> LIKE LINE OF LT_FIELDS. *" get HEADER fields
SERVER->REQUEST->GET_HEADER_FIELDS(
CHANGING
FIELDS = LT_FIELDS " Header fields
).
LV_DATA = SERVER->REQUEST->IF_HTTP_ENTITY~GET_CDATA( ). " Read the fields table and look for name "~query_string" -- this will contain the URL query
READ TABLE LT_FIELDS
WITH KEY NAME = '~query_string'
ASSIGNING <FS_FIELD>.
IF SY-SUBRC EQ .
CONCATENATE '{"message": "You have entered'
<FS_FIELD>-VALUE
'as query parameter."}'
INTO LV_HTML SEPARATED BY SPACE. *" Output to HTML
SERVER->RESPONSE->SET_CDATA(
EXPORTING
DATA = LV_HTML " Character data
* offset = 0 " Offset into character data
* length = -1 " Length of character data
).
ENDIF.
ENDMETHOD.
3.事务代码SICF定义REST服务:

设置服务的用户名密码:

添加处理类:

保存激活.测试服务:

SAP调用测试:
创建程序:ZLYTEST_REST
REPORT zlytest_rest.
DATA: lo_http_client TYPE REF TO if_http_client,
lv_service TYPE string,
lv_request TYPE string,
lv_len TYPE i,
lv_result TYPE string,
lx_result TYPE xstring,
lo_ixml TYPE REF TO if_ixml,
lo_streamfactory TYPE REF TO if_ixml_stream_factory,
lo_istream TYPE REF TO if_ixml_istream,
lo_document TYPE REF TO if_ixml_document,
conv TYPE REF TO cl_abap_conv_in_ce,
lo_parser TYPE REF TO if_ixml_parser.
lv_service = 'http://gjyxcrmdev.crm.hisense.com:8000/sap/zrest'. lv_request = '<Request><Id>2912744</Id><Notes>testaskldjasd123</Notes><FaultSource>consumer</FaultSource>' &&
'<FaultBattery>no</FaultBattery>' &&
'<FaultScreen>no</FaultScreen>' &&
'<FaultFirmware>no</FaultFirmware>' &&
'<FaultLogicboard>no</FaultLogicboard>' &&
'<FaultKeyboard>no</FaultKeyboard>' &&
'<FaultSpeaker>no</FaultSpeaker>' &&
'<FaultHdd>no</FaultHdd>' &&
'<FaultPowersupply>no</FaultPowersupply>' &&
'<FaultOtherDescription>123</FaultOtherDescription>'
&& '</Request>'.
lv_len = strlen( lv_request ). cl_http_client=>create_by_url(
EXPORTING
url = lv_service
IMPORTING
client = lo_http_client
EXCEPTIONS
argument_not_found =
plugin_not_active =
internal_error =
OTHERS = ). *lo_http_client->authenticate(
* username = 'service@hisenseinhome.com.au'
* password = 'pass' ). CALL METHOD lo_http_client->request->set_cdata
EXPORTING
data = lv_request
offset =
length = lv_len. lo_http_client->send(
EXCEPTIONS
http_communication_failure =
http_invalid_state = ). lo_http_client->receive(
EXCEPTIONS
http_communication_failure =
http_invalid_state =
http_processing_failed = ). CLEAR lv_result .
lx_result = lo_http_client->response->get_data( ).
CALL METHOD lo_http_client->close.
CHECK = .
在REST处理类中添加断点,执行测试程序,测试结果如下:

数据已经传递过来了。
返回JSON数据格式例子:
DATA: lo_json_ser TYPE REF TO cl_trex_json_serializer,
lo_json_des TYPE REF TO cl_trex_json_deserializer.
DATA: json_string TYPE string.
DATA:gt_t005u TYPE TABLE OF t005u.
"设置返回数据格式
CALL METHOD server->response->if_http_entity~set_content_type
EXPORTING
content_type = 'application/json'.
SELECT * INTO TABLE gt_t005u FROM t005u UP TO ROWS WHERE spras = '' AND land1 = 'CN'. CREATE OBJECT lo_json_ser
EXPORTING
data = gt_t005u[]. CALL METHOD lo_json_ser->serialize.
CALL METHOD lo_json_ser->get_data
RECEIVING
rval = json_string.
server->response->set_cdata(
EXPORTING
data = json_string " Character data
).
返回结果:

参考别人的:
METHOD IF_HTTP_EXTENSION~HANDLE_REQUEST.
DATA: LO_JSON_SER TYPE REF TO CL_TREX_JSON_SERIALIZER,
LO_JSON_DES TYPE REF TO CL_TREX_JSON_DESERIALIZER.
DATA: JSON_STRING TYPE STRING.
DATA:GT_T005U TYPE TABLE OF T005U.
DATA:GW_T005U TYPE T005U.
DATA:LV_METHOD TYPE STRING. LV_METHOD = SERVER->REQUEST->GET_HEADER_FIELD( NAME = '~request_method' ). CASE LV_METHOD.
WHEN 'GET'.
SELECT * INTO TABLE GT_T005U FROM T005U UP TO ROWS WHERE SPRAS = '' AND LAND1 = 'CN'. CREATE OBJECT LO_JSON_SER
EXPORTING
DATA = GT_T005U[]. CALL METHOD LO_JSON_SER->SERIALIZE. CALL METHOD LO_JSON_SER->GET_DATA
RECEIVING
RVAL = JSON_STRING. CALL METHOD SERVER->RESPONSE->SET_CDATA(
EXPORTING
DATA = JSON_STRING ).
SERVER->RESPONSE->SET_STATUS( CODE = REASON = 'OK' ).
WHEN 'POST' OR 'PUT'.
JSON_STRING = SERVER->REQUEST->IF_HTTP_ENTITY~GET_CDATA( ).
CREATE OBJECT LO_JSON_DES.
CALL METHOD LO_JSON_DES->DESERIALIZE(
EXPORTING
JSON = JSON_STRING
IMPORTING
ABAP = GW_T005U ).
SERVER->RESPONSE->SET_STATUS( CODE = REASON = 'OK' ). * MODIFY GT_T005U FROM GW_T005U. WHEN 'DELETE'.
WHEN OTHERS.
ENDCASE. CALL METHOD SERVER->RESPONSE->IF_HTTP_ENTITY~SET_CONTENT_TYPE
EXPORTING
CONTENT_TYPE = 'application/json'. ENDMETHOD.
SAP发布REST/HTTP接口的更多相关文章
- 火车头wordpress免费万能发布模块和接口
火车头wordpress免费万能发布模块和接口实测可以用 http://www.ggfenxiang8.com/?p=263
- IGS_学习笔记06_IREP发布客户化集成接口为Web Service(案例)
2015-01-03 Created By BaoXinjian
- SAP FICO 凭证导入接口 数据xml格式
接口传入参数说明 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xm ...
- 033.SAP上查看IDOC接口,PI接口查不到的日志记录,可能在IDOC接口日志里面
01. SAP系统发料之后,数据没有传输到条码系统,同事也没有任何bc01的日志,这是就要考虑是不是在IDOC接口了,输入事务代码WE02或者WE05 02.双击查看内容 03.点开就能看到详细内容了 ...
- 2019年6月SAP发布的未来ABAP平台的发展方向
未来ABAP平台将始终是这些产品的技术平台: S/4HANA On-Premises和Cloud将基于一个统一的ABAP codeline: SAP云平台上的ABAP编程环境: 什么是SAP Clou ...
- SAP发布wbservice,如果有权限管控的话,需要给这个webservice加权限
1. PFCG床架角色 2.在角色菜单上,添加其他,选中Authorization Default Values for Services 如下图 3.选中发布的webservice 后保存,如下图: ...
- SAP PM:通过接口获取设备资产基本信息
在SAP工厂维护模块中,给设备贴二维码标签是现在越来越流行的做法.因此通过扫描二维码获取设备资产信息是个非常基本的需求. 以下实例简单实现了,给SAP RFC传入设备编码获取设备资产基本信息的需求. ...
- java对接c++发布的webservice接口,其中参数类型有base64Binary格式(无需将图片数据转化为c++中的结构体)
接口名称: std::string SendVehiclePass(std::string VehiclePassInfo, struct xsd__base64Binary PlatePicData ...
- SAP接口编程 之 JCo3.0系列(02) : JCo Client Programming
SAP接口编程 之 JCo3.0系列(02) : JCo Client Programming 字数545 阅读52 评论0 喜欢1 JCo3.0调用SAP函数的过程 大致可以总结为以下步骤: 连接至 ...
随机推荐
- axios实现拦截器
项目中通常使用token进行用户权限认证,需要在请求的header中添加token信息进行验证,拦截返回的状态码进行跳转或重新登陆,在全局配置这些不妥,所以新建一个axios实例进行项目的配置. // ...
- VUE 全局变量的几种实现方式
最近在学习VUE.js 中间涉及到JS全局变量,与其说是VUE的全局变量,不如说是模块化JS开发的全局变量. 1.全局变量专用模块 就是以一个特定模块来组织管理这些全局量,需要引用的地方导入该模块便好 ...
- java 和 c++ 实现的各种基础数据结构和算法
https://github.com/phishman3579/java-algorithms-implementation https://github.com/xorz57/forest
- [LeetCode] 62. Unique Paths_ Medium tag: Dynamic Programming
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...
- 经验分享 | 如何拿到自己满意的offer?
本文阅读时间约16分钟 最近两年,人工智能(AI)就像一个点石成金的神器,所有的行业,创业公司,或是求职,只要沾着这个词,多少有点脚踩五彩祥云的感觉,故事来了,融资来了,高薪来了. 于是,越来越多的人 ...
- [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:建立一个EF数据模型
英文渣水平,大伙凑合着看吧…… 这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第一篇: ...
- One VS Rest
简单来说就是分类的类别有多个,不再是二分,比如根据某些特征,什么温度.湿度.空气流动情况来预测天气,天气的label不能说是好天气和坏天气两种,而是分晴天.雨天.阴天,雪天等等,对于决策树或者从计算机 ...
- #WEB安全基础 : HTTP协议 | 0x1 TCP/IP通信
TCP/IP是如何通信的呢? 请看图 用TCP/IP协议族通信时,会通过分层顺序与对方进行通信.发送端从应用层往下走,接受层从链路层往上走. 客户端为了浏览界面在应用层发送请求,为了方便传输在传输层的 ...
- Quick Union
Quick Union quick union就是快速连接 和quick find相同,也是构建一个数组id[],不过存的值换一种理解: 每个数组内的元素看做一个结点,结点内的值即id[i]看做i的前 ...
- SVN更新的时候前面的子母的意思(A C D M G U R I)
U:update 表示从服务器收到文件更新了 G:表示本地文件以及服务器文件都已更新,而且成功的合并了 其他的如下: A:add 表示有文件或者目录添加到工作目录 R:replace,从服务器替换,表 ...