当前位置: 首页 > news >正文

SAP HTTP接口获取文件应用

云盘附件获取  token获取 文档解析应用

电子附件地址存储表

tables:t001,ztfi1013_04.
data:gt_data type standard table of ztfi1013_05,
     gt_tab  type standard table of ztfi1013_04,
     gt_log  type standard table of ztfi1013_06,
     wa_data type ztfi1013_05,
     wa_tab  type ztfi1013_04,
     wa_log  type ztfi1013_06.

data:gs_json     type zsdoc003,
     gs_docs     type zsdoc001,
     gt_docs     type ztdoc010,
     gv_guid(36).
form frm_get_data .

  check s_datum[] is not initial.
  if rb_1 is initial..
    select * into corresponding fields of table gt_tab from ztfi1013_04
      where bukrs in s_bukrs
      and   datum in s_datum
      and   zjxzt = ''.
  else.
    select * into corresponding fields of table gt_tab from ztfi1013_04
      where bukrs in s_bukrs
      and   datum in s_datum.
  endif.

endform.

*&---------------------------------------------------------------------*
*&      Form  FRM_ANALYZE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form frm_analyze_data .

  data:lv_docid    type string,
       ls_json     type zsdoc003,
       ls_docs     type zsdoc001,
       lt_docs     type ztdoc010,
       lt_rows     type standard table of string,
       wa_rows     type string,
       content     type string,
       conv        type ref to cl_abap_conv_in_ce,
       count       type i,
       field01(50),
       field02(50),
       field03(50),
       field04(50),
       field05(50),
       field06(50),
       field07(50),
       field08(50),
       field09(50),
       field10(50),
       field11(50),
       field12(50),
       field13(50),
       field14(50),
       field15(50),
       field16(50),
       field17(50),
       field18(50).
  loop at gt_tab into wa_tab.
    ls_docs-docid = wa_tab-docid_txt.
    lv_docid      = wa_tab-docid_txt.
    append ls_docs to lt_docs.

    perform frm_get_guid changing gv_guid.

    "获取file attr
    zcl_wd_json=>get_files(
      exporting
        it_docs = lt_docs " 文档结构表类型
      importing
        ev_msg  = data(lv_msg)
        es_json = ls_json ).

    "获取token
    zcl_wd_json=>get_docid_token(
          exporting
             iv_docid = lv_docid                            "|14563|
          receiving
             ev_token = data(lv_token) ).

    data(ls_rows) = ls_json-rows[ 1 ].

    data(lv_url) = ls_rows-downloadurl && '&f_token=' && lv_token.

    "getting doc for bin
    zcl_wd_docx=>get(
         exporting
*        iv_type    = 'X'
           iv_url     = lv_url
         importing
           ev_xstring = data(lv_xstring)
           ev_msg     = lv_msg ).

    if lv_xstring is not initial.
      conv = cl_abap_conv_in_ce=>create( input = lv_xstring ).
      conv->read( importing data = content ).
      split content at cl_abap_char_utilities=>cr_lf into table lt_rows .

      loop at lt_rows into wa_rows .
        split wa_rows at cl_abap_char_utilities=>horizontal_tab
        into
        field01
        field02
        field03
        field04
        field05
        field06
        field07
        field08
        field09
        field10
        field11
        field12
        field13
        field14
        field15
        field16
        field17
        field18.

        wa_data-posnm   = field01.
        wa_data-skjlid  = field02.
        wa_data-zskje   = field03.
        wa_data-jylnm   = field04.
        wa_data-zshbm   = field05.
        wa_data-shddh   = field06.
        wa_data-dzriq   = field07.
        wa_data-jyshj   = field08.
        wa_data-jyjin   = field09.
        wa_data-shoux   = field10.
        wa_data-zjies   = field11.
        wa_data-zpici   = field12.
        wa_data-belnr   = field13.
        wa_data-zcank   = field14.
        wa_data-zsdhh   = field15.
        wa_data-qdshh   = field16.
        wa_data-qdzdh   = field17.
        wa_data-possn   = field18.
        wa_data-bukrs   = wa_tab-bukrs.
        wa_data-cname   = sy-uname.
        wa_data-datum   = sy-datum.
        wa_data-uzeit   = sy-uzeit.
        call function 'CIF_GEN4_CONVERT_DATETIME'
          exporting
            iv_date                = sy-datum
            iv_time                = sy-uzeit
            iv_timezone            = sy-zonlo
          importing
            ev_timestamp           = wa_data-timestamp
          exceptions
            time_conversion_failed = 1
            others                 = 2.
        append wa_data to gt_data.
        clear: wa_data.
      endloop .
      count = lines( gt_data ).
      perform frm_add_successful_msg using gv_guid wa_tab-guiid count.
    else.
      perform frm_add_error_msg using gv_guid wa_tab-guiid lv_msg.
    endif.

    clear:lt_docs,ls_json,lv_docid,lv_url,lv_msg,lv_xstring,
          field01,field02,field03,field04,field05,field06,
          field07,field08,field09,field10,field11,field12,
          field13,field14,field15,field16,field17,field18,
          count.
  endloop.
endform.
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_GUIID
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_ENDIF  text
*----------------------------------------------------------------------*
form frm_get_guid  changing cv_guid.

  call function 'RS_DME_MG_GENERATE_GUID'
    importing
      e_guid_32 = cv_guid.

endform.

通过HTTP接口获取云盘附件

  METHOD get_files.

    DATA : ls_c010 TYPE zsdoc001.
    DATA : lv_docs TYPE string.

    DATA : lr_client       TYPE REF TO if_http_client,
           lv_url          TYPE string,
           lv_content_type TYPE string VALUE 'application/x-www-form-urlencoded',
           ev_xstring      TYPE xstring,
           ex_string       TYPE string.

    IF lines( it_docs ) = 0.
      ev_msg = '文档ID不能为空!'.
      RETURN .
    ENDIF.

    "文件ID集
    LOOP AT it_docs INTO ls_c010.
      lv_docs = lv_docs && ls_c010-docid && ','.
    ENDLOOP.

    "get url
    lv_url = zcl_wd_json=>get_system_url(
             iv_system = 'DMS'
             iv_action = 'GET_FILES2' ).

    IF lv_url IS INITIAL.
      ev_msg = '未获取到URL!'.
      RETURN .
    ENDIF.

    "get APIKEY
    DATA(lv_apikey) = zcl_wd_json=>get_system_url(
             iv_system = 'DMS'
             iv_action = 'APIKEY' ).

    lv_url = lv_url && |?fileId=| && lv_docs && |&{ lv_apikey }| .

    TRY .

        "创建http对象
        cl_http_client=>create_by_url(
          EXPORTING
          url                = lv_url
          IMPORTING
          client             = lr_client
           EXCEPTIONS
           argument_not_found = 1
           plugin_not_active  = 2
           internal_error     = 3
           OTHERS             = 4 ).

* set protocol version
        CALL METHOD lr_client->request->set_header_field
          EXPORTING
            name  = '~server_protocol'
            value = 'HTTP/1.1'.
* 提交方式
        CALL METHOD lr_client->request->set_header_field
          EXPORTING
            name  = '~request_method'
            value = 'GET'.
* 传参方式: application/json,application/x-www-form-urlencoded
        CALL METHOD lr_client->request->set_header_field
          EXPORTING
            name  = 'Content-Type'
            value = lv_content_type.


* 发送
        CALL METHOD lr_client->send
          EXPORTING
            timeout                    = 200
          EXCEPTIONS
            http_communication_failure = 1
            http_invalid_state         = 2
            http_processing_failed     = 3
            OTHERS                     = 4.

        IF sy-subrc NE 0.
          lr_client->get_last_error(
            IMPORTING
              message = ev_msg
          ).
          RETURN.
        ENDIF.

* 获取返回
        CALL METHOD lr_client->receive
          EXCEPTIONS
            http_communication_failure = 1
            http_invalid_state         = 2
            http_processing_failed     = 3.
        IF sy-subrc NE 0.
          lr_client->get_last_error(
            IMPORTING
              message = ev_msg
          ).
          RETURN.
        ENDIF.

* 返回
        ev_xstring = lr_client->response->get_data( ).

* XSTRING to STRING
        CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING'
          EXPORTING
            im_xstring  = ev_xstring
            im_encoding = 'UTF-8'
          IMPORTING
            ex_string   = ex_string.

        CALL TRANSFORMATION id
                         SOURCE XML ex_string
                         RESULT status = es_json-status
                                rows = es_json-rows
                                msg = es_json-msg.
      CATCH cx_root .
        ev_msg = '异常'.
    ENDTRY.

    lr_client->close( ).


  ENDMETHOD.
 

 获取token 

  METHOD get_docid_token.
    DATA : lr_client       TYPE REF TO if_http_client,
           lv_url          TYPE string,
           lv_content_type TYPE string VALUE 'application/x-www-form-urlencoded',
           ev_xstring      TYPE xstring,
           ex_string       TYPE string.

    DATA : ev_msg TYPE string.

    "获取token地址
*    lv_url = gv_get_token1 && gv_get_token2 && iv_docid.

    IF iv_docid IS INITIAL.
      ev_msg = '文档ID不能为空!'.
      RETURN.
    ENDIF.

    "get url
    lv_url = zcl_wd_json=>get_system_url(
             iv_system = 'DMS'
             iv_action = 'GET_TOKEN' ).

    IF lv_url IS INITIAL.
      ev_msg = '未获取到URL!'.
      RETURN.
    ENDIF.

    DATA(lv_apikey) = zcl_wd_json=>get_system_url(
             iv_system = 'DMS'
             iv_action = 'APIKEY' ).

    lv_url = lv_url && iv_docid && |&{ lv_apikey }|.

    TRY .

        "创建http对象
        cl_http_client=>create_by_url(
          EXPORTING
          url                = lv_url
          IMPORTING
          client             = lr_client
           EXCEPTIONS
           argument_not_found = 1
           plugin_not_active  = 2
           internal_error     = 3
           OTHERS             = 4 ).

* set protocol version
        CALL METHOD lr_client->request->set_header_field
          EXPORTING
            name  = '~server_protocol'
            value = 'HTTP/1.1'.
* 提交方式
        CALL METHOD lr_client->request->set_header_field
          EXPORTING
            name  = '~request_method'
            value = 'GET'.
* 传参方式: application/json,application/x-www-form-urlencoded
        CALL METHOD lr_client->request->set_header_field
          EXPORTING
            name  = 'Content-Type'
            value = lv_content_type.

* 发送
        CALL METHOD lr_client->send
          EXPORTING
            timeout                    = 200
          EXCEPTIONS
            http_communication_failure = 1
            http_invalid_state         = 2
            http_processing_failed     = 3
            OTHERS                     = 4.

        IF sy-subrc NE 0.
          lr_client->get_last_error(
            IMPORTING
              message = ev_msg
          ).
          RETURN.
        ENDIF.

* 获取返回
        CALL METHOD lr_client->receive
          EXCEPTIONS
            http_communication_failure = 1
            http_invalid_state         = 2
            http_processing_failed     = 3.
        IF sy-subrc NE 0.
          lr_client->get_last_error(
            IMPORTING
              message = ev_msg
          ).
          RETURN.
        ENDIF.

* 返回
        ev_xstring = lr_client->response->get_data( ).

* XSTRING to STRING
        CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING'
          EXPORTING
            im_xstring  = ev_xstring
            im_encoding = 'UTF-8'
          IMPORTING
            ex_string   = ex_string.

        CALL TRANSFORMATION id
                         SOURCE XML ex_string
                         RESULT token = ev_token.
      CATCH cx_root .
        ev_msg = '异常'.
    ENDTRY.

    lr_client->close( ).
  ENDMETHOD.
 

  getting doc for bin文档内容转换成BIN二进制

  METHOD get.

    DATA : lr_client       TYPE REF TO if_http_client,
           lv_url          TYPE string,
           lv_content_type TYPE string VALUE 'application/x-www-form-urlencoded',

           ex_string       TYPE string,
           lv_ip           TYPE string.

    TRY .

        IF iv_url IS INITIAL.
          lv_url = 'http://xxx/api.action?acmod=downloadcommfile&id=445&revision=0&apikey=9b11127a9701975c734b8aee81ee3526&usid=fbd672e88c900f26a0221af266cd22ba-fe1b9a223ba095ff-attachment'.
        ELSE.

          IF iv_type EQ 'X'.
            lv_url =   iv_url.
          ELSE.
            lv_ip = get_ip( ).
            lv_url = lv_ip && iv_url.
          ENDIF.

        ENDIF.

        "创建http对象
        cl_http_client=>create_by_url(
          EXPORTING
          url                =  lv_url
          IMPORTING
          client             = lr_client
           EXCEPTIONS
           argument_not_found = 1
           plugin_not_active  = 2
           internal_error     = 3
           OTHERS             = 4 ).


* set protocol version
        CALL METHOD lr_client->request->set_header_field
          EXPORTING
            name  = '~server_protocol'
            value = 'HTTP/1.1'.
* 提交方式
        CALL METHOD lr_client->request->set_header_field
          EXPORTING
            name  = '~request_method'
            value = 'GET'.
* 传参方式: application/json,application/x-www-form-urlencoded
        CALL METHOD lr_client->request->set_header_field
          EXPORTING
            name  = 'Content-Type'
            value = lv_content_type.

*        CALL METHOD lr_client->request->set_header_field
*          EXPORTING
*            name  = 'Charset'
*            value = 'utf-16'.


* 发送
        CALL METHOD lr_client->send
          EXPORTING
            timeout                    = 200
          EXCEPTIONS
            http_communication_failure = 1
            http_invalid_state         = 2
            http_processing_failed     = 3
            OTHERS                     = 4.

        IF sy-subrc NE 0.
          lr_client->get_last_error(
            IMPORTING
              message = ev_msg
          ).

          RETURN.
        ENDIF.

* 获取返回
        CALL METHOD lr_client->receive
          EXCEPTIONS
            http_communication_failure = 1
            http_invalid_state         = 2
            http_processing_failed     = 3.
        IF sy-subrc NE 0.
          lr_client->get_last_error(
            IMPORTING
              message = ev_msg
          ).

          RETURN.
        ENDIF.

        ev_xstring = lr_client->response->get_data( ).

      CATCH cx_abapcg_exception  .
        ev_msg = '异常'.

        RETURN.
    ENDTRY.

* 关闭链接ie
    lr_client->close( ).


  ENDMETHOD.
 

相关文章:

  • 医院人事科室病区管理系统基于Spring Boot-SSM
  • 点击劫持详细透析
  • 3D点云数据处理中的聚类算法总结
  • 【视频】H.264的码率和图像质量
  • docker利用ollama +Open WebGUI在本地搭建部署一套Deepseek-r1模型
  • 【UE5 PuerTS笔记】PuerTS安装
  • GetX 路由管理详解
  • 【USTC 计算机网络】第二章:应用层 - DNS
  • WebSocket 中的条件竞争漏洞 -- UTCTF Chat
  • 掌握XXL-JOB:快速搭建高效任务调度系统
  • 【Linux】基于阻塞队列和循环队列的生产者消费者模型
  • 深入理解 TypeScript 中的迭代器(Iterators)与生成器(Generators)
  • 使用Java爬虫根据关键词获取Shopee商品列表?
  • Matrix-breakout-2-morpheus靶机实战攻略
  • Dify - 配置 vllm 模型
  • MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 高级篇 part 9
  • 校园论坛系统Selenium自动化测试
  • 程序化广告行业(28/89):基于用户旅程的广告策略解析
  • 差分 异或
  • 网络编程之客户端聊天(服务器加客户端共三种方式)
  • 首日5金!中国队夺得跳水世界杯总决赛混合团体冠军
  • 解放日报:人形机器人新赛道正积蓄澎湃动能
  • 王受文已任中华全国工商业联合会领导班子成员
  • 不准打小孩:童年逆境经历视角下的生育友好社会
  • 南部战区位南海海域进行例行巡航
  • 被算法重塑的世界,人与技术如何和谐共处