SAP接口--宜搭与SAP对接

文章描述了一个过程,使用宜搭平台传输表单数据到SAP系统,包括数据解析、错误检查和文档信息的创建。函数`z_acc_document_id_post`负责接收、验证和保存信息,同时记录日志操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

宜搭传输表单基础信息,SAP接收信息并保存

log 信息表

在这里插入图片描述

INCLUDE zhs_log_*. 可以删掉
FUNCTION z_acc_document_id_post.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_REQUEST) TYPE  STRING OPTIONAL
*"  EXPORTING
*"     VALUE(E_RESPONSE) TYPE  STRING
*"----------------------------------------------------------------------

  TABLES :Zoas_log.

  TYPES:BEGIN OF Freturnid_data,
          success TYPE string,
          content TYPE string,
        END OF Freturnid_data.

*  TYPES:BEGIN OF Base_data,
*          i_status TYPE char01,
*          i_oaid   TYPE string,
*          i_type1  TYPE string,
*          i_type2  TYPE string,
*          i_type3  TYPE string,
*        END OF Base_data.
*  DATA  :lt_data type TABLE OF Base_data,
*        ls_data type Base_data.

  DATA:lv_time     TYPE string,
       str_in      TYPE string,
       lt_oalog    TYPE TABLE OF  zoas_log,
       ls_oalog    TYPE zoas_log,
       lt_Freturn  TYPE TABLE OF  Freturnid_data,
       ls_oachange TYPE  zstru_acc_document_post_output,
       lW_RETURN   TYPE  zstru_acc_document_post_output,
       ls_Freturn  TYPE Freturnid_data.

  TYPES:BEGIN OF  baseinfo,
          type1      TYPE char10,
          type2      TYPE char20,
          type3      TYPE char20,
          username   TYPE char20,
          useracount TYPE char20,
          id         TYPE char40,
          status     TYPE char1,
        END OF baseinfo.


  DATA : lv_taskname  TYPE char30,
         i_type1      TYPE char10,
         i_type2      TYPE char20,
         i_type3      TYPE char20,
         i_username   TYPE char20,
         i_useracount TYPE char20,
         i_oaid       TYPE char40,
         i_status     TYPE char1.
  DATA : l_encoding(20),
         lt_base        TYPE TABLE OF baseinfo,
         ls_base        TYPE baseinfo.


  IF i_request IS INITIAL  .
    STOP.
  ENDIF.

  *INCLUDE zhs_log_start.

  CALL METHOD cl_http_utility=>unescape_url
    EXPORTING
      escaped   = i_request
    RECEIVING
      unescaped = str_in.

  REPLACE ALL OCCURRENCES  OF 'type3' IN str_in WITH '"type3"' .
  REPLACE ALL OCCURRENCES  OF 'type2' IN str_in WITH '"type2"' .
  REPLACE ALL OCCURRENCES  OF 'id' IN str_in WITH '"id"' .
  REPLACE ALL OCCURRENCES  OF 'type1' IN str_in WITH '"type1"'.
  REPLACE ALL OCCURRENCES  OF 'username' IN str_in WITH '"username"' .
  REPLACE ALL OCCURRENCES  OF 'useracount' IN str_in WITH '"useracount"' .
  REPLACE ALL OCCURRENCES  OF 'status' IN str_in WITH '"status"' .
  REPLACE ALL OCCURRENCES  OF '&' IN str_in WITH ',' .
  REPLACE ALL OCCURRENCES  OF '=' IN str_in WITH ':'.
  str_in = '[{' && str_in && '}]' .


  /ui2/cl_json=>deserialize( EXPORTING json = str_in
                                        pretty_name = /ui2/cl_json=>pretty_mode-camel_case
                              CHANGING data = lt_base ).

  LOOP AT lt_base INTO ls_base.

    i_type1  =  ls_base-type1.
    i_type2  =  ls_base-type2.
    i_type3  =  ls_base-type3.
    i_username  =  ls_base-username.
    i_useracount  =  ls_base-useracount.
    i_oaid     =  ls_base-id.
    i_status =  ls_base-status.

*  SEARCH str_in FOR '{'.
*  IF sy-subrc = 0.
*    DATA(str1) =  sy-fdpos.
*  ENDIF.
*  SEARCH str_in FOR '}'.
*  IF sy-subrc = 0.
*    DATA(str2) =  sy-fdpos.
*  ENDIF.
*  DATA(str3) = str2 - str1.
*  str_in = str_in+str1(str3).
*
*  str_in = '[' && str_in+5 && ']'.

*  CALL METHOD /ui2/cl_json=>deserialize
*    EXPORTING
*      json = str_in
*    CHANGING
*      data = lt_base[].
*  IF lt_base[] IS NOT INITIAL.
*    READ TABLE lt_base INTO ls_base INDEX 2.
*    i_oaid  = ls_base-id.
*    i_status = ls_base-status.
*    i_type1 = ls_base-type.
*    i_type2 = ls_base-type2.
*    i_type3 = ls_base-type3.
*  ENDIF.

    SELECT oaid,status INTO TABLE @DATA(lt_oaid) FROM zoas_log WHERE oaid EQ @i_oaid AND status EQ '0' AND resultcode EQ 'S' .

    lv_time = sy-datum && sy-uzeit.
    ls_oalog-mandt = sy-mandt.
    ls_oalog-oaid = i_oaid.
    ls_oalog-trantime = lv_time.
    ls_oalog-status = i_status.
    ls_oalog-username = i_USERNAME.
    ls_oalog-useracount = i_useracount.
    ls_oalog-type1 = i_TYPE1.
    ls_oalog-type2 = i_TYPE2.
    ls_oalog-type3 = i_TYPE3.

    IF lt_oaid IS INITIAL.
      APPEND ls_oalog TO lt_oalog.
      CLEAR ls_oalog.
      CLEAR ls_Freturn.
      IF  lt_oalog IS NOT INITIAL.
        MODIFY  zoas_log  FROM TABLE lt_oalog.
        COMMIT WORK AND WAIT.
        ls_Freturn-success = 'true'.  "abap_true .
        ls_Freturn-content = '传入ID='&& i_oaid.
      ELSE.
        ROLLBACK WORK.
        ls_Freturn-success = 'false'."abap_false .
        ls_Freturn-content = '接收失败,请检查ID重试'.
      ENDIF.

      DATA(has_entries) = xsdbool( lt_oalog IS NOT INITIAL ).

      CLEAR lt_oalog.
      e_response = /ui2/cl_json=>serialize( ls_Freturn ).

      lv_taskname = sy-uname && sy-datum && sy-uzeit.

      CALL FUNCTION 'Z_ACC_DOCUMENT_INFO_POST' STARTING NEW TASK lv_taskname
        EXPORTING
          lv_oaid       = i_oaid
          lv_status     = i_status
          lv_username   = i_username
          lv_useracount = i_useracount
          lv_type1      = i_type1
          lv_type2      = i_type2
          lv_type3      = i_type3
*     TABLES
*         ET_RETURN     =
        .

    ELSE.
      LOOP AT lt_oaid INTO DATA(ls_oas).

        " oaid1 = ls_oas-oaid.
        "status1 = ls_oas-status.
        IF i_status EQ '0'.
          ls_Freturn-success = 'false'."abap_false .
          ls_Freturn-content = '该id已成功制定凭证,请勿重复'.
          e_response = /ui2/cl_json=>serialize( ls_Freturn ).
        ELSE .
          APPEND ls_oalog TO lt_oalog.
          CLEAR ls_oalog.
          IF  lt_oalog IS NOT INITIAL.
            MODIFY  zoas_log  FROM TABLE lt_oalog.
            COMMIT WORK AND WAIT.

            lv_taskname = sy-uname && sy-datum && sy-uzeit.
            CALL FUNCTION 'Z_ACC_DOCUMENT_INFO_POST' STARTING NEW TASK lv_taskname
              EXPORTING
                lv_oaid     = i_oaid
                lv_status   = i_status
                lv_username = i_username
                lv_useracount   = i_useracount
                lv_type1    = i_type1
                lv_type2    = i_type2
                lv_type3    = i_type3.
            .
          ENDIF.
        ENDIF.

      ENDLOOP.


    ENDIF.

  ENDLOOP.
   IF ls_Freturn-success = 'false'.
*-- rfc log - last phase
*    INCLUDE zhs_log_end_e.

  ELSE.
*-- rfc log - last phase
*    INCLUDE zhs_log_end_s.
  ENDIF.

ENDFUNCTION.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值