导语:SAP建行的接口没有标准的回单查询的类,这里参照了工行的标准类,套用建行的明细查询接口,来实现回单查询,写入SAP。
我发现建行的明细查询跟回单查询很像,所以复制了明细查询的类
标准类: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