导语:交易明细查询,SAP自带的建行接口代码是6W0300,但是这边建行建议使用6WY101,所以报文内容需要调整,就需要重新构造XML进行传输。
标准类:CL_EPIC_EXAMPLE_CN_CCB_GHTD 
方法: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_example_cn_ccb_ghtd_dp.
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,
total_record TYPE char3,
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-startdate IS INITIAL OR ls_dialog_parameters-startdate = space )
OR ( ls_dialog_parameters-enddate IS INITIAL OR ls_dialog_parameters-enddate = 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-startdate.
ls_request-transaction_body-enddate = ls_dialog_parameters-enddate.
ls_request-transaction_body-page = gv_current_page.
ls_request-transaction_body-poststr = gv_poststr.
ls_request-transaction_body-total_record = '200'.
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.
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.
"建行使用6WY101而不是6W0300查询明细,所以这里要修改XML内容
TRY.
* CALL TRANSFORMATION epic_example_cn_ccb_ghtd_rsp
* SOURCE XML iv_response_message_xstring
* RESULT output_data = ls_resp_mapping_result_data.
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 .
ls_resp_mapping_result_data-transaction_header-cust_id = ls_respons-transaction_header-cust_id .
ls_resp_mapping_result_data-transaction_header-tx_code = ls_respons-transaction_header-tx_code .
ls_resp_mapping_result_data-transaction_header-return_code = ls_respons-transaction_header-return_code .
ls_resp_mapping_result_data-transaction_header-return_msg = ls_respons-transaction_header-return_msg .
ls_resp_mapping_result_data-transaction_header-language = ls_respons-transaction_header-language .
ls_resp_mapping_result_data-transaction_body-acc_no = ls_respons-transaction_body-accno1 .
SELECT SINGLE waers INTO ls_resp_mapping_result_data-transaction_body-cur_type FROM ztepic_cny WHERE zlx = ls_respons-transaction_body-curr_cod .
* ls_resp_mapping_result_data-transaction_body-cur_type = ls_respons-transaction_body-curr_cod .
ls_resp_mapping_result_data-transaction_body-acc_name = ls_respons-transaction_body-acc_name .
* ls_resp_mapping_result_data-transaction_body-acc_dept = ls_respons-transaction_body-language .
ls_resp_mapping_result_data-transaction_body-acc_status = ls_respons-transaction_body-acc_state .
* ls_resp_mapping_result_data-transaction_body-interest_rate = ls_respons-transaction_body-language .
ls_resp_mapping_result_data-transaction_body-cur_page = ls_respons-transaction_body-page .
ls_resp_mapping_result_data-transaction_body-page_count = ls_respons-transaction_body-total_page .
* ls_resp_mapping_result_data-transaction_body-individual_name1 = ls_respons-transaction_body-language .
* ls_resp_mapping_result_data-transaction_body-individual_name2 = ls_respons-transaction_body-language .
* ls_resp_mapping_result_data-transaction_body-rem1 = ls_respons-transaction_body-language .
* ls_resp_mapping_result_data-transaction_body-rem2 = ls_respons-transaction_body-language .
* ls_resp_mapping_result_data-transaction_body-details = ls_respons-transaction_body-language .
LOOP AT ls_respons-transaction_body-detaillist INTO DATA(ls_list).
ls_items-credit_type = ls_list-cre_typ.
ls_items-credit_no = ls_list-cre_no.
ls_items-tran_date = ls_list-trandate.
ls_items-tran_time = ls_list-trantime(2) && ls_list-trantime+3(2) && ls_list-trantime+6(2) .
ls_items-abstract = ls_list-message.
ls_items-amount = ls_list-amt.
ls_items-balance = ls_list-amt1.
ls_items-dorc = ls_list-flag1.
ls_items-acc_no1 = ls_list-accno2.
ls_items-acc_name1 = ls_list-acc_name1.
ls_items-individual1 = ls_list-det.
ls_items-individual2 = ls_list-det_no.
APPEND ls_items TO lt_items.
CLEAR ls_items.
ENDLOOP.
ls_resp_mapping_result_data-transaction_body-details = lt_items.
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 ).
"判断页码进行翻页查询
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.
ENDMETHOD. "if_epic_bank_comm_impl~process_response
CALL TRANSFORMATION :ZEPIC_EXAMPLE_CN_CCB_GHTD_RSP
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" version="1.0">
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<OUTPUT_DATA>
<TRANSACTION_HEADER>
<REQUEST_SN>
<xsl:value-of select="TX/REQUEST_SN"/>
</REQUEST_SN>
<CUST_ID>
<xsl:value-of select="TX/CUST_ID"/>
</CUST_ID>
<TX_CODE>
<xsl:value-of select="TX/TX_CODE"/>
</TX_CODE>
<RETURN_CODE>
<xsl:value-of select="TX/RETURN_CODE"/>
</RETURN_CODE>
<RETURN_MSG>
<xsl:value-of select="TX/RETURN_MSG"/>
</RETURN_MSG>
<LANGUAGE>
<xsl:value-of select="TX/LANGUAGE"/>
</LANGUAGE>
</TRANSACTION_HEADER>
<TRANSACTION_BODY>
<ACCNO1>
<xsl:value-of select="TX/TX_INFO/ACCNO1"/>
</ACCNO1>
<CURR_COD>
<xsl:value-of select="TX/TX_INFO/CURR_COD"/>
</CURR_COD>
<ACC_NAME>
<xsl:value-of select="TX/TX_INFO/ACC_NAME"/>
</ACC_NAME>
<ACC_ORGAN>
<xsl:value-of select="TX/TX_INFO/ACC_ORGAN"/>
</ACC_ORGAN>
<ACC_STATE>
<xsl:value-of select="TX/TX_INFO/ACC_STATE"/>
</ACC_STATE>
<INTR>
<xsl:value-of select="TX/TX_INFO/INTR"/>
</INTR>
<TOTAL_PAGE>
<xsl:value-of select="TX/TX_INFO/TOTAL_PAGE"/>
</TOTAL_PAGE>
<PAGE>
<xsl:value-of select="TX/TX_INFO/PAGE"/>
</PAGE>
<POSTSTR>
<xsl:value-of select="TX/TX_INFO/POSTSTR"/>
</POSTSTR>
<FLAG>
<xsl:value-of select="TX/TX_INFO/FLAG"/>
</FLAG>
<FILE_LOCSTR>
<xsl:value-of select="TX/TX_INFO/FILE_LOCSTR"/>
</FILE_LOCSTR>
<DETAILLIST>
<xsl:for-each select="TX/TX_INFO/DETAILLIST/DETAILINFO">
<LIST>
<TRANDATE>
<xsl:value-of select="TRANDATE"/>
</TRANDATE>
<TRANTIME>
<xsl:value-of select="TRANTIME"/>
</TRANTIME>
<CRE_TYP>
<xsl:value-of select="CRE_TYP"/>
</CRE_TYP>
<CRE_NO>
<xsl:value-of select="CRE_NO"/>
</CRE_NO>
<MESSAGE>
<xsl:value-of select="MESSAGE"/>
</MESSAGE>
<AMT>
<xsl:value-of select="AMT"/>
</AMT>
<AMT1>
<xsl:value-of select="AMT1"/>
</AMT1>
<FLAG1>
<xsl:value-of select="FLAG1"/>
</FLAG1>
<ACCNO2>
<xsl:value-of select="ACCNO2"/>
</ACCNO2>
<ACC_NAME1>
<xsl:value-of select="ACC_NAME1"/>
</ACC_NAME1>
<FLAG2>
<xsl:value-of select="FLAG2"/>
</FLAG2>
<TRAN_FLOW>
<xsl:value-of select="TRAN_FLOW"/>
</TRAN_FLOW>
<BFLOW>
<xsl:value-of select="BFLOW"/>
</BFLOW>
<DET_NO>
<xsl:value-of select="DET_NO"/>
</DET_NO>
<DET>
<xsl:value-of select="DET"/>
</DET>
<REAL_TRANDATE>
<xsl:value-of select="REAL_TRANDATE"/>
</REAL_TRANDATE>
<RLTV_ACCNO>
<xsl:value-of select="RLTV_ACCNO"/>
</RLTV_ACCNO>
<CADBANK_NM>
<xsl:value-of select="CADBank_Nm"/>
</CADBANK_NM>
<OVRLSTTN_TRCK_NO>
<xsl:value-of select="Ovrlsttn_Trck_No"/>
</OVRLSTTN_TRCK_NO>
<EXOSTM_PY_RMRK>
<xsl:value-of select="ExoStm_Py_Rmrk"/>
</EXOSTM_PY_RMRK>
</LIST>
</xsl:for-each>
</DETAILLIST>
</TRANSACTION_BODY>
</OUTPUT_DATA>
</asx:values>
</asx:abap>
</xsl:template>
</xsl:transform>
备注:明细查询有较大的改动,建行的接口代码跟SAP预留的标准的不一致,有点麻烦
作者:小飞猪猪猪猪猪猪猪–CSDN