在ABAP中调用POST Rest API

2020-08-20 07:29发布

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

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


嗨,我怎么知道要传递给post方法的字符串内容? Rest API是ABAP系统中的ODATA,我正尝试从ABAP程序的另一个SAP系统中调用它。 我传递的是与我从GET方法收到的内容完全相同的内容,因为我知道它应该可以工作,因此我以这种方式编写了API。 我在lv_reponse中的以下代码中收到415错误。 我应该如何填充wf_string1在这里调用post方法? lo_rest_client-> if_rest_resource〜post(lo_request)。

 SPAN {
 字体家族:" Courier New";
 字体大小:10pt;
 颜色:#000000;
 背景:#FFFFFF;
 }
 .L0S31 {
 字体样式:斜体;
 颜色:#808080;
 }
 .L0S32 {
 颜色:#3399FF;
 }
 .L0S33 {
 颜色:#4DA619;
 }
 .L0S52 {
 颜色:#0000FF;
 }
 .L0S55 {
 颜色:#800080;
 }
 .L0S70 {
 颜色:#808080;
 }

 报告yrest_zgw_po_post_api_token2。

 数据:wf_user类型字符串。
 数据:wf_password类型字符串。
 数据:rlength类型i,
       txlen类型的字符串。
 数据:lo_http_client类型ref到if_http_client。
 数据:wf_string类型string。
 数据:wf_string1类型string。
 数据:wf_proxy类型字符串,
       wf_port类型字符串,
       lv_url类型的字符串,
       lv_token类型字符串。
 数据:lo_rest_client类型为cl_rest_http_client的引用,
       lo_response类型参考到if_rest_entity,
       lv_http_status类型i。
 选择开始。
   lv_url ='http://xxxxxxxx.xx.xxxxx.com:8000/sap/opu/odata/sap/ZGW_PO_SRV/zekkoekpoSet'。

   cl_http_client => create_by_url(
        出口
          网址= lv_url
        输入
          客户端= lo_http_client
        例外情况
          arguments_not_found = 1
          plugin_not_active = 2
          internal_error = 3
          其他= 4)。

 *-其余客户端获取令牌

   创建对象lo_rest_client导出io_http_client = lo_http_client。

   lo_rest_client-> if_rest_client〜set_request_header(导出iv_name ='X-CSRF-Token'iv_value ='Fetch')。

   lo_http_client-> propertytype_accept_cookie = if_http_client => co_enabled。

   lo_http_client-> propertytype_logon_popup = lo_http_client-> co_disabled。

   调用方法lo_http_client-> send
     例外情况
       http_communication_failure = 1
       http_invalid_state = 2。

   调用方法lo_http_client-> receive
     例外情况
       http_communication_failure = 1
       http_invalid_state = 2
       http_processing_failed = 3。
   如果sy-subrc <> 0。
     消息e000(oo)带有"处理失败!"。
   万一。

   wf_string1 = lo_http_client-> response-> get_cdata()。

 *-其余客户端获取令牌

   lo_rest_client-> if_rest_client〜get(其他= 1除外)。

   lo_response = lo_rest_client-> if_rest_client〜get_response_entity()。

   lv_http_status = lo_response-> get_header_field('〜status_code')。

   lv_token = lo_response-> get_header_field('X-CSRF-Token')。


 * -------调用PUt方法,使用令牌。 代码2。

 *免费:lo_http_client,lo_rest_client。

   数据lo_request类型参考if_rest_entity。

   数据lv_response类型字符串。

 * cl_http_client => create_by_url(
 *导出网址= lv_url
 *导入客户端= lo_http_client
 *例外= 1)。

 * lo_http_client-> request-> set_content_type('application/json')。

 *创建对象lo_rest_client导出io_http_client = lo_http_client。

   lo_request = lo_rest_client-> if_rest_client〜create_request_entity()。

   lo_request-> set_header_field(iv_name ='X-CSRF-Token'iv_value = lv_token)。

   lo_request-> set_header_field(iv_name ='X-Requested-With'iv_value ='X')。

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

   lo_request-> set_string_data(wf_string1)。

   lo_rest_client-> if_rest_resource〜post(lo_request)。

   lo_response = lo_rest_client-> if_rest_client〜get_response_entity()。

   lv_http_status = lo_response-> get_header_field('〜status_code')。

   lv_response = lo_response-> get_string_data()。

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

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


嗨,我怎么知道要传递给post方法的字符串内容? Rest API是ABAP系统中的ODATA,我正尝试从ABAP程序的另一个SAP系统中调用它。 我传递的是与我从GET方法收到的内容完全相同的内容,因为我知道它应该可以工作,因此我以这种方式编写了API。 我在lv_reponse中的以下代码中收到415错误。 我应该如何填充wf_string1在这里调用post方法? lo_rest_client-> if_rest_resource〜post(lo_request)。

 SPAN {
 字体家族:" Courier New";
 字体大小:10pt;
 颜色:#000000;
 背景:#FFFFFF;
 }
 .L0S31 {
 字体样式:斜体;
 颜色:#808080;
 }
 .L0S32 {
 颜色:#3399FF;
 }
 .L0S33 {
 颜色:#4DA619;
 }
 .L0S52 {
 颜色:#0000FF;
 }
 .L0S55 {
 颜色:#800080;
 }
 .L0S70 {
 颜色:#808080;
 }

 报告yrest_zgw_po_post_api_token2。

 数据:wf_user类型字符串。
 数据:wf_password类型字符串。
 数据:rlength类型i,
       txlen类型的字符串。
 数据:lo_http_client类型ref到if_http_client。
 数据:wf_string类型string。
 数据:wf_string1类型string。
 数据:wf_proxy类型字符串,
       wf_port类型字符串,
       lv_url类型的字符串,
       lv_token类型字符串。
 数据:lo_rest_client类型为cl_rest_http_client的引用,
       lo_response类型参考到if_rest_entity,
       lv_http_status类型i。
 选择开始。
   lv_url ='http://xxxxxxxx.xx.xxxxx.com:8000/sap/opu/odata/sap/ZGW_PO_SRV/zekkoekpoSet'。

   cl_http_client => create_by_url(
        出口
          网址= lv_url
        输入
          客户端= lo_http_client
        例外情况
          arguments_not_found = 1
          plugin_not_active = 2
          internal_error = 3
          其他= 4)。

 *-其余客户端获取令牌

   创建对象lo_rest_client导出io_http_client = lo_http_client。

   lo_rest_client-> if_rest_client〜set_request_header(导出iv_name ='X-CSRF-Token'iv_value ='Fetch')。

   lo_http_client-> propertytype_accept_cookie = if_http_client => co_enabled。

   lo_http_client-> propertytype_logon_popup = lo_http_client-> co_disabled。

   调用方法lo_http_client-> send
     例外情况
       http_communication_failure = 1
       http_invalid_state = 2。

   调用方法lo_http_client-> receive
     例外情况
       http_communication_failure = 1
       http_invalid_state = 2
       http_processing_failed = 3。
   如果sy-subrc <> 0。
     消息e000(oo)带有"处理失败!"。
   万一。

   wf_string1 = lo_http_client-> response-> get_cdata()。

 *-其余客户端获取令牌

   lo_rest_client-> if_rest_client〜get(其他= 1除外)。

   lo_response = lo_rest_client-> if_rest_client〜get_response_entity()。

   lv_http_status = lo_response-> get_header_field('〜status_code')。

   lv_token = lo_response-> get_header_field('X-CSRF-Token')。


 * -------调用PUt方法,使用令牌。 代码2。

 *免费:lo_http_client,lo_rest_client。

   数据lo_request类型参考if_rest_entity。

   数据lv_response类型字符串。

 * cl_http_client => create_by_url(
 *导出网址= lv_url
 *导入客户端= lo_http_client
 *例外= 1)。

 * lo_http_client-> request-> set_content_type('application/json')。

 *创建对象lo_rest_client导出io_http_client = lo_http_client。

   lo_request = lo_rest_client-> if_rest_client〜create_request_entity()。

   lo_request-> set_header_field(iv_name ='X-CSRF-Token'iv_value = lv_token)。

   lo_request-> set_header_field(iv_name ='X-Requested-With'iv_value ='X')。

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

   lo_request-> set_string_data(wf_string1)。

   lo_rest_client-> if_rest_resource〜post(lo_request)。

   lo_response = lo_rest_client-> if_rest_client〜get_response_entity()。

   lv_http_status = lo_response-> get_header_field('〜status_code')。

   lv_response = lo_response-> get_string_data()。
付费偷看设置
发送
4条回答
SAP砖家
1楼-- · 2020-08-20 08:04

Jose Jaimes,你好

我简单地将有效负载串联在一起。 我首先使其在GW客户端中工作,然后从GW客户端复制了有效负载的结构。 请让我知道您是否有疑问。

串联'{" d":{" __metadata":{" id":" http ://xxxxxxxx.xx.xxxxxx.COM :8000/sap/opu/odata/sap/ZXX_PO_SRV/zekkoekpoSet(Ebeln =''4500097814'',Ebelp =''00030'')",'
'" uri":" http://xxxxxxxx.xx.xxxxxx.COM :8000/sap/opu/odata/sap/ZXX_PO_SRV/zekkoekpoSet(Ebeln =''4500097814'',Ebelp =''00030'')"," type":" ZXX_PO_SRV.zekkoekpo"},'
'" Ebeln":" 4500097814"," Ebelp":" 00030"," Bukrs":" 1111"," Bsart":" AN"," Matnr":" B-4000001"," Werks":" XXXX"," Meins":" EA"," Menge":" 0.000"," Loekz":""}}'
放入lv_gtwy_payload。

d56caomao
2楼-- · 2020-08-20 07:57

请提供任何帮助。 谢谢。

暮风yp
3楼-- · 2020-08-20 08:15

您好 Bhakti joshi

我想写信给我我有解决方法,但是我有同样的问题。

您能解决这个问题吗? 知道这一点真是太棒了。

此致

JoséJaimes

浮生未央
4楼-- · 2020-08-20 08:11

Bhakti,

我有相同的要求。 但就我而言,结果始终是200。

您能提供适合您的最终代码吗?

谢谢

信德省

一周热门 更多>