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函数的过程 大致可以总结为以下步骤: 连接至 ...
随机推荐
- 【托业】【新东方托业全真模拟】TEST09~10-----P5~6
at no time 绝不,从不 takeover 收购 startup n.启动; 新兴公司(尤指新兴网络公司); 新兴公司,新开张的企业; specific具体的,特定的:factual 事实的, ...
- vue的二维码生成器
vue项目开发的时候经常会遇到需要将一个网址链接转化为二维码的需求,方便用户扫描观看,以下就是我在寻找vue二维码生成器的时候踩过的坑. 不能用的二维码生成器 qrcode node-qr ...
- Linux命令之rpm安装命令
在 Linux 操作系统下,几乎所有的软件均通过RPM 进行安装.卸载及管理等操作.RPM 的全称为Redhat Package Manager ,是由Redhat 公司提出的,用于管理Linux 下 ...
- 一、iOS开发环境搭建
前置条件 1. 必要:一台装有Mac OS X操作系统的电脑:经济允许的话可以买一部Mac book:否则的话,可以试试黑苹果或虚拟机. 2.必要:一个有可用的Apple ID:免费,在Apple的官 ...
- Python基础(十) __init__与__new__区别
__init__与__new__区别: __init__在python,其实是,在实例化之后执行的,用来初始化一些属性,相当于构造函数,但是又不一样 细心一些,通过参数会有所发现,其实__init__ ...
- Java的反射机制的详细应用
package com.at221; import java.io.Serializable; import java.lang.reflect.*; import org.junit.Test; p ...
- VKD224B触摸芯片调试笔记
1.通过阅读datasheet了解芯片怎么使用,一般datasheet会提供参考电路.和相应的电气参数. 通过上面的表格可以知道芯片的供电,所需电流. 这个芯片可以通过引脚选择模式.通过上面的选项设置 ...
- Linux基础命令---lpstat查看打印任务
lpstat lpstat指令用来显示当前任务.打印机的状态.如果没有参数,那么就显示打印队列. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora.openSUSE. ...
- mysql日期操作
一.获取当前日期时间 1.1.获得当前日期+时间(date+time)函数:now() 1.2.获取当前日期+时间(date+time)函数:sysdate() 注:二者类拟,不同在于now()在执行 ...
- 普通文件的上传(表单上传和ajax文件异步上传)
一.表单上传: html客户端部分: <form action="upload.ashx" method="post" enctype="mul ...