从ABAP程序中使用post方法调用Odata服务

2020-08-20 07:57发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我需要调用Odata服务,并使用post方法将数据更新到Custom表中。

我使用了以下代码,但结果状态始终为200。 我已调试,但未达到创建实体方法。 请让我知道丢失了什么或出了什么问题。

数据:lo_http_client类型参考if_http_client,
lo_rest_client类型参考cl_rest_http_client,
lv_url类型字符串,
http_status类型字符串,
lv_body类型字符串。


数据:lo_json类型参考到cl_clb_parse_json,
lo_response类型参考到if_rest_entity,
lo_request类型参考到if_rest_entity,
lo_sql类型参考到cx_sy_open_sql_db,
状态类型字符串,
原因类型 br>响应TYPE字符串,
content_length TYPE字符串,
位置TYPE字符串,
content_type TYPE字符串,


lv_status TYPE i。

lv_url ='< rel =" nofollow" hraf=" http://XXXXXXXXX.solutions.glbsnet.com" target =" _blank"> http://XXXXXXXXX.solutions.glbsnet.com :XXXX/sap/opu/odata/sap/ZTEST_PO_DET_SRV/UPD_EXT_DATASet('')'。
*
cl_http_client => create_by_url(
EXPORTING
url = lv_url
IMPORTING
client = lo_http_client
EXCEPTIONS
arguments_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4)。

*如果您 e使用cl_http_client => create_by_url使用此代码抑制并传递您的

创建对象lo_rest_client
导出
io_http_client = lo_http_client。
lo_http_client-> request-> set_version(if_http_request => co_protocol_version__1

如果lo_http_client被绑定。



lv_body ='{" Docnum":" 193345678"," ReturnMsg":"更新成功"," Ebeln":" 11212466"," Lifnr":" 100010"}'。
*设置有效负载或主体(JSON或XML)
lo_request = lo_rest_client-> if_rest_client〜create_request_entity()。


lo_request-> set_content_type (iv_media_type = if_rest_media_type => gc_appl_json)。

lo_request-> set_string_data(lv_body)。 调用方法lo_rest_client-> if_rest_client〜set_request_header
*导出
* iv_name ='auth-token'
* iv_value ='VQ_caQ5WsE2uj7dZnk4aHQ =='。 "设置标题。
* POST
lo_rest_client-> if_rest_resource〜post(lo_request)。

*收集响应
lo_response = lo_rest_client-> if_rest_client〜get_response_entity()。
http_status = lv_status = lo_response-> get_header_field('〜status_code')。
原因= lo_response-> get_header_field('〜status_reason')。
content_length = lo_response-> get_header_field('content-length')。
location = lo_response-> get_header_field('location')。
content_type = lo_response-> get_header_field('content-type')。
response = lo_response-> get_string_data()。

我已经参考了以下链接

https://answers.sap。 com/questions/750105/calling-post-rest-api-in-abap.html

https://blogs.sap.com/2014/11/09/calling-an-external-restful-service-from-abap-http-method-post /

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我需要调用Odata服务,并使用post方法将数据更新到Custom表中。

我使用了以下代码,但结果状态始终为200。 我已调试,但未达到创建实体方法。 请让我知道丢失了什么或出了什么问题。

数据:lo_http_client类型参考if_http_client,
lo_rest_client类型参考cl_rest_http_client,
lv_url类型字符串,
http_status类型字符串,
lv_body类型字符串。


数据:lo_json类型参考到cl_clb_parse_json,
lo_response类型参考到if_rest_entity,
lo_request类型参考到if_rest_entity,
lo_sql类型参考到cx_sy_open_sql_db,
状态类型字符串,
原因类型 br>响应TYPE字符串,
content_length TYPE字符串,
位置TYPE字符串,
content_type TYPE字符串,


lv_status TYPE i。

lv_url ='< rel =" nofollow" hraf=" http://XXXXXXXXX.solutions.glbsnet.com" target =" _blank"> http://XXXXXXXXX.solutions.glbsnet.com :XXXX/sap/opu/odata/sap/ZTEST_PO_DET_SRV/UPD_EXT_DATASet('')'。
*
cl_http_client => create_by_url(
EXPORTING
url = lv_url
IMPORTING
client = lo_http_client
EXCEPTIONS
arguments_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4)。

*如果您 e使用cl_http_client => create_by_url使用此代码抑制并传递您的

创建对象lo_rest_client
导出
io_http_client = lo_http_client。
lo_http_client-> request-> set_version(if_http_request => co_protocol_version__1

如果lo_http_client被绑定。



lv_body ='{" Docnum":" 193345678"," ReturnMsg":"更新成功"," Ebeln":" 11212466"," Lifnr":" 100010"}'。
*设置有效负载或主体(JSON或XML)
lo_request = lo_rest_client-> if_rest_client〜create_request_entity()。


lo_request-> set_content_type (iv_media_type = if_rest_media_type => gc_appl_json)。

lo_request-> set_string_data(lv_body)。 调用方法lo_rest_client-> if_rest_client〜set_request_header
*导出
* iv_name ='auth-token'
* iv_value ='VQ_caQ5WsE2uj7dZnk4aHQ =='。 "设置标题。
* POST
lo_rest_client-> if_rest_resource〜post(lo_request)。

*收集响应
lo_response = lo_rest_client-> if_rest_client〜get_response_entity()。
http_status = lv_status = lo_response-> get_header_field('〜status_code')。
原因= lo_response-> get_header_field('〜status_reason')。
content_length = lo_response-> get_header_field('content-length')。
location = lo_response-> get_header_field('location')。
content_type = lo_response-> get_header_field('content-type')。
response = lo_response-> get_string_data()。

我已经参考了以下链接

https://answers.sap。 com/questions/750105/calling-post-rest-api-in-abap.html

https://blogs.sap.com/2014/11/09/calling-an-external-restful-service-from-abap-http-method-post /

付费偷看设置
发送
3条回答
南山jay
1楼-- · 2020-08-20 08:30

嗨,

您没有调用http_client的send和receive方法。 第一个链接( https://answers.sap .com/questions/750105/calling-post-rest-api-in-abap.html )。

最诚挚的问候,

Geert-Jan Klaps

哎,真难
2楼-- · 2020-08-20 08:42

响应码200成功

您正在面对什么问题?

绿领巾童鞋
3楼-- · 2020-08-20 08:34

嗨,吉尔特,

感谢您的回答。

语句lo_rest_client-> if_rest_resource〜post(lo_request)实际上在其中调用了send和receive,但是我显式地调用了send和receive并且仍然是相同的输出。

是否有问题,因为我正在调用Odata服务来发布数据?

一周热门 更多>