SAP EPIC 银企直连 回单查询(建设银行)

导语:SAP建行的接口没有标准的回单查询的类,这里参照了工行的标准类,套用建行的明细查询接口,来实现回单查询,写入SAP。

👉【EPIC_PROC银企直连 建设银行】

在这里插入图片描述


我发现建行的明细查询跟回单查询很像,所以复制了明细查询的类
标准类:CL_EPIC_EXAMPLE_CN_CCB_GHTD(建行明细查询)

一、创建类
复制SAP标准类创建:ZCL_EPIC_EXAMPLE_CN_CCB_GHTD2
在这里插入图片描述

方法:CREATE_REQUEST

  METHOD if_epic_bank_comm_impl~create_request.
    DATA ls_requ_mapping_source_data      TYPE ty_requ_mapping_source.
    DATA ls_message                       LIKE LINE OF et_messages.
    DATA lv_message_dummy.                                  "#EC NEEDED
    DATA ls_dialog_parameters             TYPE epic_s_ebr_bc_param.
    DATA lv_commuser                      TYPE epic_bc_ud-commuser.
    DATA lv_pwd                           TYPE rsecdata.

    DATA lr_transformation_error          TYPE REF TO cx_root.
    DATA lv_cust_id                       TYPE epic_example_ccb_cust_id.
    CLEAR ev_request_message_string.
    CLEAR ev_request_message_xstring.
    CLEAR ef_another_segment_required.
    CLEAR et_messages.

    CHECK is_bank_comm_key IS NOT INITIAL.
    CHECK iv_bank_comm_step IS NOT INITIAL.

    "建行使用6WY101,所以报文内容需要调整
    TYPES:
      BEGIN OF ty_requ_transaction_body2,
        accno1         TYPE string,
        startdate(8)   TYPE c,
        enddate(8)     TYPE c,
        page           TYPE i,
        poststr(40)    TYPE c,
        condition1(32) TYPE c,
        condition2(32) TYPE c,
      END OF ty_requ_transaction_body2 .
    TYPES:
      BEGIN OF ty_requ_transaction_header2,
        request_sn(16) TYPE c,
        cust_id(21)    TYPE c,
        user_id(6)     TYPE c,
        password(32)   TYPE c,
        tx_code(6)     TYPE c,
        language(2)    TYPE c,
      END OF ty_requ_transaction_header2 .
    TYPES:
      BEGIN OF ty_requ_mapping_source2,
        transaction_header TYPE ty_requ_transaction_header2,
        transaction_body   TYPE ty_requ_transaction_body2,
      END OF ty_requ_mapping_source2 .

    DATA : ls_request TYPE ty_requ_mapping_source2.


    ls_dialog_parameters = is_dialog_parameters.

    IF  ( ls_dialog_parameters-start_date IS INITIAL OR ls_dialog_parameters-start_date = space )
      OR ( ls_dialog_parameters-end_date   IS INITIAL OR ls_dialog_parameters-end_date   = space ).

      MESSAGE e009(epic_example_cn_impl)  INTO lv_message_dummy.
      CLEAR ls_message.
      MOVE-CORRESPONDING sy TO ls_message.
      APPEND ls_message TO et_messages.

      RAISE EXCEPTION TYPE cx_epic_bank_comm_impl
        EXPORTING
          impl_messages = et_messages.
    ENDIF.

    TRY.
        mo_ccb_service->s_get_logon_data(
          EXPORTING
            iv_bank_comm_step = iv_bank_comm_step
            is_bank_comm_key  = is_bank_comm_key
          IMPORTING
            ev_commuser       = lv_commuser
            ev_pwd            = lv_pwd
            et_messages       = et_messages
        ).

      CATCH cx_epic_bank_comm_impl.

        RAISE EXCEPTION TYPE cx_epic_bank_comm_impl
          EXPORTING
            impl_messages = et_messages.
    ENDTRY.

    DATA: lv_requst_sn          TYPE string.
    mo_ccb_service->get_request_sn( IMPORTING ev_reqsn = lv_requst_sn ).
*    lv_cust_id = gv_cust_id.
    lv_cust_id = 'GD442000000123096#02'.

*    ls_requ_mapping_source_data-transaction_header-request_sn = lv_requst_sn.
*    ls_requ_mapping_source_data-transaction_header-user_id    = lv_commuser.
*    ls_requ_mapping_source_data-transaction_header-password   = lv_pwd.
*    ls_requ_mapping_source_data-transaction_header-cust_id    = lv_cust_id.
*    ls_requ_mapping_source_data-transaction_header-tx_code    = '6WY101'.
*    ls_requ_mapping_source_data-transaction_header-language   = 'CN'.


    ls_request-transaction_header-request_sn = lv_requst_sn.
    ls_request-transaction_header-user_id    = lv_commuser.
    ls_request-transaction_header-password   = lv_pwd.
    ls_request-transaction_header-cust_id    = lv_cust_id.
    ls_request-transaction_header-tx_code    = '6WY101'.
    ls_request-transaction_header-language   = 'CN'.


    "begin note  2116270
    DATA lo_bank_comm_service TYPE REF TO if_epic_bank_comm_service.
    CREATE OBJECT lo_bank_comm_service TYPE cl_epic_cn_bank_comm_service.
    "end note 2116270

    lo_bank_comm_service->get_housebank_account_info(
      EXPORTING
        is_bank_comm_key = is_bank_comm_key
      IMPORTING
        ev_account_num   =  ls_requ_mapping_source_data-transaction_body-acc_no
    ).
    "end note 2116270

*    ls_requ_mapping_source_data-transaction_body-start_date = ls_dialog_parameters-startdate.
*    ls_requ_mapping_source_data-transaction_body-end_date   = ls_dialog_parameters-enddate.
*    ls_requ_mapping_source_data-transaction_body-start_page = gv_current_page.
*    ls_requ_mapping_source_data-transaction_body-poststr    = gv_poststr.

    ls_request-transaction_body-accno1     = ls_requ_mapping_source_data-transaction_body-acc_no.
    ls_request-transaction_body-startdate  = ls_dialog_parameters-start_date.
    ls_request-transaction_body-enddate    = ls_dialog_parameters-end_date.
    ls_request-transaction_body-page       = gv_current_page.
    ls_request-transaction_body-poststr    = gv_poststr.


    TRY.
*        CALL TRANSFORMATION zepic_example_cn_ccb_ghtd_rqst
*          SOURCE parameters = ls_requ_mapping_source_data
*          RESULT XML ev_request_message_xstring.
        CALL TRANSFORMATION zepic_example_cn_ccb_ghtd_rqst
         SOURCE parameters = ls_request
         RESULT XML ev_request_message_xstring.
      CATCH cx_transformation_error INTO lr_transformation_error.

        MESSAGE e008(epic_example_cn_impl) WITH 'CCB_GAB =>CREATE_REQUEST' INTO lv_message_dummy.
        CLEAR ls_message.
        MOVE-CORRESPONDING sy TO ls_message.
        APPEND ls_message TO et_messages.

        RAISE EXCEPTION TYPE cx_epic_bank_comm_impl
          EXPORTING
            impl_messages = et_messages
            previous      = lr_transformation_error.
    ENDTRY.


  ENDMETHOD.                    "if_epic_bank_comm_impl~create_request

方法:PROCESS_RESPONSE

  METHOD if_epic_bank_comm_impl~process_response.
    DATA: ls_resp_mapping_result_data TYPE ty_resp_mapping_result,
          lr_transformation_error     TYPE REF TO cx_transformation_error,
          ls_message                  LIKE LINE OF et_messages,
*          lt_list_result              TYPE tty_list_result,
          lv_message_dummy.

    DATA lt_list_result TYPE  epic_t_ebr_bc_rslt.
    DATA ls_list_item TYPE epic_s_ebr_bc_rslt.
    DATA ls_qhid_result_item LIKE LINE OF mt_qhid_list_result  .
    DATA ls_qhid_item LIKE LINE OF mt_qhid_list_result.
    DATA lv_lines TYPE i .

    DATA : lv_page_count TYPE i.
    DATA : lv_page TYPE i.

    TYPES:
      BEGIN OF ty_resp_transaction_header2,
        request_sn  TYPE string,
        cust_id     TYPE string,
        tx_code     TYPE string,
        return_code TYPE string,
        return_msg  TYPE string,
        language    TYPE string,
      END OF ty_resp_transaction_header2 .
    TYPES:
      BEGIN OF ty_resp_item2,
        trandate         TYPE string,
        trantime         TYPE string,
        cre_typ          TYPE string,
        cre_no           TYPE string,
        message          TYPE string,
        amt              TYPE string,
        amt1             TYPE string,
        flag1            TYPE string,
        accno2           TYPE string,
        acc_name1        TYPE string,
        flag2            TYPE string,
        tran_flow        TYPE string,
        bflow            TYPE string,
        det_no           TYPE string,
        det              TYPE string,
        real_trandate    TYPE string,
        rltv_accno       TYPE string,
        cadbank_nm       TYPE string,
        ovrlsttn_trck_no TYPE string,
        exostm_py_rmrk   TYPE string,
      END OF ty_resp_item2 .
    TYPES:
      tty_resp_items2  TYPE STANDARD TABLE OF ty_resp_item2
          WITH NON-UNIQUE KEY accno2 .
    TYPES:
      BEGIN OF ty_resp_transaction_body2,
        accno1      TYPE string,
        curr_cod    TYPE string,
        acc_name    TYPE string,
        acc_organ   TYPE string,
        acc_state   TYPE string,
        intr        TYPE string,
        total_page  TYPE string,
        page        TYPE string,
        poststr     TYPE string,
        flag        TYPE string,
        file_locstr TYPE string,
        detaillist  TYPE tty_resp_items2,
      END OF ty_resp_transaction_body2 .
    TYPES:
      BEGIN OF ty_resp_mapping_result2,
        transaction_header TYPE ty_resp_transaction_header2,
        transaction_body   TYPE ty_resp_transaction_body2,
      END OF ty_resp_mapping_result2 .

    DATA : ls_respons TYPE ty_resp_mapping_result2.
    DATA : ls_items TYPE ty_resp_item.
    DATA : lt_items TYPE tty_resp_items.

    "建行回单,但是建行SAP没有回单接口,这里套用ICBC的回单接口,用建行交易明细进行查询数据
    TRY.

        CALL TRANSFORMATION zepic_example_cn_ccb_ghtd_rsp
        SOURCE XML iv_response_message_xstring
        RESULT output_data = ls_respons.




*        ls_resp_mapping_result_data-transaction_header-request_sn  =  ls_respons-transaction_header-request_sn  .
        LOOP AT ls_respons-transaction_body-detaillist INTO DATA(ls_list).
          ls_qhid_result_item-bank_acct_no        = ls_respons-transaction_body-accno1.
          ls_qhid_result_item-bank_date           = ls_list-trandate(4) && ls_list-trandate+5(2) && ls_list-trandate+8(2) .
          ls_qhid_result_item-bank_time           = ls_list-trantime(2) && ls_list-trantime+3(2) && ls_list-trantime+6(2) .
          ls_qhid_result_item-amount              = ls_list-amt.
          ls_qhid_result_item-balance             = ls_list-amt1.
          ls_qhid_result_item-part_bank_name      = ls_list-cadbank_nm.
          ls_qhid_result_item-part_bank_acct_no   = ls_list-accno2.
          ls_qhid_result_item-part_bank_acct_name = ls_list-acc_name1.
          ls_qhid_result_item-ebr_use             = ls_list-message.
          ls_qhid_result_item-bank_remark         = ls_list-det.
          ls_qhid_result_item-transac_type        = '默认交易'.
          ls_qhid_result_item-source = 'M'. "电子回单模式不能修改,不能删除,改为手动模式
          ls_qhid_result_item-srl_no              = ls_list-tran_flow.
          ls_qhid_result_item-ebr_no              = ls_list-tran_flow.

          "如果找到信息,不保存(特殊定制)
          IF ls_list-bflow IS NOT INITIAL and strlen( ls_list-bflow ) >= 16.
            SELECT COUNT(*) FROM fprl_item
              WHERE bukrs     = @ls_list-bflow(4)
                AND vblnr_pay = @ls_list-bflow+4(10)
                AND substring( laufd_pay,3,2 ) = @ls_list-bflow+14(2).
            IF sy-subrc = 0.
              CLEAR ls_qhid_result_item.
              CONTINUE.
*              ls_qhid_result_item-belnr = ls_list-bflow+4(10).
*              ls_qhid_result_item-status = '040'.
            ENDIF.
          ENDIF.

          "货币码对应关系
          SELECT SINGLE waers FROM ztepic_cny INTO ls_qhid_result_item-currency WHERE zlx = ls_respons-transaction_body-curr_cod.
          "借贷关系
          IF ls_list-flag1 = 0.
            ls_qhid_result_item-direction           = 'S'.
          ELSEIF  ls_list-flag1 = 1.
            ls_qhid_result_item-direction           = 'H'.
          ENDIF.

          "获取公司代码等
          SELECT SINGLE bukrs hbkid hktid FROM t012k INTO ( ls_qhid_result_item-bukrs,ls_qhid_result_item-hbkid,ls_qhid_result_item-hktid )
            WHERE bankn = ls_qhid_result_item-bank_acct_no(18)
              AND refzl = ls_qhid_result_item-bank_acct_no+18(16).

          APPEND ls_qhid_result_item TO mt_qhid_list_result.
        ENDLOOP.

*        perform_post_resp_xslt_proc(
*          EXPORTING
*            is_bank_comm_key            =  is_bank_comm_key
*            is_resp_mapping_result_data =  ls_resp_mapping_result_data
*          IMPORTING
*            et_list_result              =  et_list_result
*            et_messages                 =  et_messages ).

        gv_current_page = ls_respons-transaction_body-page.
        gv_page_count   = ls_respons-transaction_body-total_page.

        IF gv_current_page < gv_page_count.
          cf_another_segment_required = 'X'.
          gv_current_page = gv_current_page + 1.
        ELSE.
          clear_comm_flags( ).
          CLEAR gt_list_result.
        ENDIF.

      CATCH cx_transformation_error INTO lr_transformation_error.

        MESSAGE e008(epic_example_cn_impl) WITH 'CCB_GHTD=>PROCESS_RESPONESE' INTO lv_message_dummy.
        CLEAR ls_message.
        MOVE-CORRESPONDING sy TO ls_message.
        APPEND ls_message TO et_messages.

        RAISE EXCEPTION TYPE cx_epic_bank_comm_impl
          EXPORTING
            impl_messages = et_messages
            previous      = lr_transformation_error.
    ENDTRY.

    IF  ls_respons-transaction_header-return_msg IS INITIAL.
      LOOP AT mt_qhid_list_result INTO ls_qhid_item.
        CLEAR ls_list_item.
        MOVE-CORRESPONDING ls_qhid_item TO ls_list_item.
        APPEND ls_list_item TO lt_list_result.
      ENDLOOP.
      MOVE lt_list_result TO et_list_result.
*      IF et_list_result IS NOT INITIAL .
*        lv_lines =  lines( et_list_result ).
*        MESSAGE i015(epic_example_cn_impl) WITH lv_lines INTO lv_message_dummy.
*        mo_bank_service->append_message( IMPORTING et_messages = et_messages ).
*      ENDIF.
    ENDIF.

  ENDMETHOD.                    "if_epic_bank_comm_impl~process_response

备注:回单查询属于用了工行的框架,建行明细查询的内容,属于新创造了一个接口,需要花点时间研究,由于前面没有银企直连经验,经历了无数次尝试和DUMP才搞出来这个接口。

作者:小飞猪猪猪猪猪猪猪–CSDN

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小飞猪猪猪猪猪猪猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值