首页 > 其他分享 >SAP ABAP调用REST服务

SAP ABAP调用REST服务

时间:2023-11-16 15:34:52浏览次数:26  
标签:http accesstoken REST ABAP client call SAP type method

就是调用为外部HTTP接口 

zcl_json=>deserialize 因为版本问题  自定义的json转换函数  根据自己的版本使用对应函数就好

report ztest25.

data: url             type        string, "接口地址
      gv_json_in      type        string, "输入参数(账号密码啥的)
      json_data      type        string, "需要对接传输的数据
      http_client     type ref to if_http_client, "http客户端
      gv_accesstoken  type        string, "密钥
      apptoken_result type        string.

data l_sysubrc like sy-subrc. "错误信息
data l_error_text type string.
"获取的返回参数  字段根据实际自己的需求来
types:begin of gs_data2,
        access_token type string,
        success      type string,
        error_desc   type string,
        expire_time  type string,
        error_code   type string,
      end of gs_data2.
data:begin of gs_get_accesstoken,
       data   type gs_data2,
       state  type string,
       status type string,
     end of gs_get_accesstoken.


start-of-selection.
*  perform zf_k3c_001. "需要传输的数据 json_data 
  perform get_accesstoken. ""获取密钥
  if gv_accesstoken <> ''.
    perform pr_save_voucher using gv_accesstoken. "调用业务逻辑
  endif.

form get_accesstoken.
*获取密钥接口地址
  url = 'http://192.168.90.110:8022/ierp/api/login.do'.   

*accessToken接口数据

  gv_json_in = '{"user":"18905908070","tenantid":"2303","accountId":"1557314466603859968","usertype":"Mobile"}'.  

*创建http客户端
  call method cl_http_client=>create_by_url
    exporting
      url                = url
    importing
      client             = http_client
    exceptions
      argument_not_found = 1
      plugin_not_active  = 2
      internal_error     = 3
      others             = 4.

*设置调用方法 对应自己的方法
  call method http_client->request->set_header_field
    exporting
      name  = 'login'
      value = 'POST'.

*设置传入字符串
  call method http_client->request->set_cdata
    exporting
      data = gv_json_in.

*发送
  call method http_client->send
    exceptions
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3
      http_invalid_timeout       = 4
      others                     = 5.

*接收
  call method http_client->receive
    exceptions
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3.

  if sy-subrc = 0.
    apptoken_result = http_client->response->get_cdata( )."提取返回的JSON数据

*解析JSON 转换为结构数据
    call method zcl_json=>deserialize
      exporting
        json        = apptoken_result
        pretty_name = 'X'
      changing
        data        = gs_get_accesstoken.
    if gs_get_accesstoken-state = 'success'.
      gv_accesstoken = gs_get_accesstoken-data-access_token.  "获取密钥 
    endif.

  else.
    call method http_client->get_last_error   "错误信息
      importing
        code    = l_sysubrc
        message = l_error_text.
  endif.
endform.
form pr_save_voucher  using p_accesstoken.
  clear:url,apptoken_result.

  url = 'http://192.168.90.110:8022/ierp/kapi/v2/twh/gl/gl_voucher/savesap'.


*创建http客户端
  call method cl_http_client=>create_by_url
    exporting
      url                = url
    importing
      client             = http_client
    exceptions
      argument_not_found = 1
      plugin_not_active  = 2
      internal_error     = 3
      others             = 4.

  http_client->request->set_content_type( content_type = 'application/json;charset=utf-8' ).  "其他的一些格式text/html  text/json
*设置http method 为post 
  http_client->request->set_method( if_http_request=>co_request_method_post ).

*  设置token
  call method http_client->request->set_header_field
    exporting
      name  = 'accesstoken'
      value = p_accesstoken.      "传Token

*设置调用方法(根据自己的方法来)
  call method http_client->request->set_header_field
    exporting
      name  = 'savesap'   "调用的接口方法
      value = 'POST'.

*设置传入字符串
  call method http_client->request->set_cdata
    exporting
      data = json_data.

*发送
  call method 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.
    break-point.
  endif.

*接收
  call method http_client->receive
    exceptions
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3.

  if sy-subrc = 0.
    apptoken_result = http_client->response->get_cdata( )."提取返回的JSON数据
    cl_demo_output=>display_json( apptoken_result ).  "用来显示结果 之后可以去掉
  else.
    call method http_client->get_last_error
      importing
        code    = l_sysubrc
        message = l_error_text.
  endif.
endform.                    " PR_SAVE_VOUCHER

 

标签:http,accesstoken,REST,ABAP,client,call,SAP,type,method
From: https://www.cnblogs.com/freeandeasy/p/17836360.html

相关文章

  • SAP调用外部的REST服务 http_communication_failure Connection to partner timed
    SAP中主动调用外部的REST服务时候, 因为传输的数据量比较大, 所以报Connectiontopartnertimedoutafter60 这一错误,原因之一可能是Tcode-SMICM ->转到->服务设置保活和处理超时时间,秒为单位,可以更具自己的需求进行设置。......
  • ABAP 内表转CSV文件推送SAP服务器和SFTP到对方服务器
    1、内表转CSV文件,老ECC个别版本该函数有BUG,I类型字段会dumpDATA:lt_csv_vbak TYPE ztruxs_t_text_data,"ztruxs_t_text_data长度为8192CALLFUNCTION'ZSAP_CONVERT_TO_CSV_FORMAT'TABLESi_tab_sap_data=lt_vbakCHANGINGi_tab_conve......
  • 如何用SaleSmartly集成WhatsApp账号(内含WhatsApp个人号、商业号、API号对比图)
    用SaleSmartly集成WhatsApp账号如果企业有多个WhatsApp账号,无论是个人账号还是工作账号,员工操作起来可能会觉得难以管理和切换。SaleSmartly就可以解决这个问题,让员工在一个平台上同时使用多个WhatsApp账号,不需要频繁地登录和退出,方便客服查看和回复所有的消息和通话。在SaleSmartl......
  • ABAP使用异步远程RFC实现并行处理
    1、使用场景当开发复杂报表,需要处理大量数据,不管怎么优化计算和查询语句,程序的运行效率还是达不到用户要求,怎么办?为了解决这个问题,就需要程序实现并行处理。本文档就是通过异步调用远程RFC的办法,实现对大量数据的计算,以并行的方式,更快的计算出最终结果。2、代码实现在实现并......
  • 随机森林(Random Forest)
    随机森林(RandomForest)是一种强大的集成学习算法,通过构建多个决策树,并结合它们的预测结果来提高整体模型的性能和鲁棒性。以下是随机森林的详细解释:随机森林的构建过程:Bootstrap抽样:对于给定的包含N个样本的原始数据集,进行有放回的随机抽样,构造一个新的样本集,大小也为N。......
  • WhatsApp个人号、Business号、API号到底有什么区别
    WhatsApp作为全球苹果应用商店中用户下载量最多的社交网络应用,在全球有25亿的用户,每日活跃人数超过5亿人。很多人都以为WhatsApp就是一个软件,但是其实它是个家族,里面共有三个成员,分别是WhatsApp Messenger,WhatsApp Business和WhatsApp Business API。按照它们推出市场的时间来......
  • 关于SAP ABAP ALV开发的吐槽
    我认为ALV开发时ABAPer第二无聊的工作,非必要千万别做,浪费青春;实在要做也要提高效率少花时间在ALV展示上,集中精力处理后台逻辑。常见的callFM或者OO+Dialog的实现方式,都要手动设置fieldcat、layout,挺烦人的。我比较喜欢用SAP标准的SALV类来做,或者使用国外大神封装的FastAL......
  • SAP查询列名
    使用SE16N可以在查询条件框中,根据列名查看, 在结果表中,双击某行,可以清晰的看到英文的字段名 ......
  • RESTFul 是不是必须的?
    ![[Pastedimage20231114211549.png|600]]问题1:RESTFul是不是必须的,是不是设计API的最优解?RESTFul只是一个风格,作者都承认这只是一种风格,风格就是“可选择的”,“可插拔替换的”,在强度上远远弱于“协议”。凡是上升到协议的东西必须要多方达成一致共识,共同维护且必须遵守,有......
  • Rest Client作为替代Postman的方案使用
    因为postman现在默认把账号下的API相关信息自动后台上传到POSTMAN官网,所以会发生严重的信息泄露事件。 RestClient作为替代Postman的方案使用。参考链接VSCode小鸡汤第01期-RESTClient简单好用的接口测试辅助工具https://zhuanlan.zhihu.com/p/56174598插件安装......