SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

SAP EPIC 建行回单查询:从标准类到自定义类的5个关键改造点

在SAP EPIC框架下进行银行接口开发时,经常会遇到标准功能无法满足特定业务需求的情况。本文将以建设银行回单查询功能为例,详细解析如何将标准交易明细查询类(CL_EPIC_EXAMPLE_CN_CCB_GHTD)改造为支持回单查询的自定义类(ZCL_EPIC_EXAMPLE_CN_CCB_GHTD2)。我们将通过代码对比的方式,重点分析5个必须修改的关键点,帮助ABAP工程师理解银行接口适配的本质。

1. 交易码与报文结构的调整

标准交易明细查询使用的交易码为'6WY100',而回单查询需要使用'6WY101'。这一差异直接影响请求报文的整体结构:

" 标准类中的交易码定义 ls_requ_mapping_source_data-transaction_header-tx_code = '6WY100'. " 自定义类中修改为回单查询交易码 ls_request-transaction_header-tx_code = '6WY101'.

同时需要调整请求报文的数据结构:

" 标准交易明细查询的数据结构 TYPES: BEGIN OF ty_requ_transaction_body, acc_no TYPE string, start_date TYPE string, end_date TYPE string, start_page TYPE i, poststr TYPE string, END OF ty_requ_transaction_body. " 回单查询需要的数据结构 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.

注意:字段长度和格式必须严格按照银行接口规范定义,否则会导致报文解析失败。

2. 响应数据结构的映射调整

回单查询的响应数据结构与交易明细查询有显著差异,需要重新定义映射关系:

" 标准交易明细的响应项结构 TYPES: BEGIN OF ty_resp_item, trandate TYPE string, trantime TYPE string, abstract TYPE string, amount TYPE string, balance TYPE string, END OF ty_resp_item. " 回单查询特有的响应项结构 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.

3. 重复数据过滤逻辑的实现

回单查询需要特别处理重复数据,避免同一笔交易的多次查询结果重复入库:

" 在process_response方法中添加重复检查逻辑 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. ENDIF. ENDIF.

4. 特殊字段的转换处理

回单查询返回的部分字段需要特殊转换才能存入SAP系统:

" 日期格式转换 ls_qhid_result_item-bank_date = ls_list-trandate(4) && ls_list-trandate+5(2) && ls_list-trandate+8(2). " 借贷方向标识转换 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 waers FROM ztepic_cny INTO ls_qhid_result_item-currency WHERE zlx = ls_respons-transaction_body-curr_cod.

5. 分页查询机制的实现

回单查询通常数据量较大,需要实现分页查询逻辑:

" 在process_response方法中处理分页信息 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.

实际开发中的经验分享

在实现建行回单查询功能时,发现标准交易明细查询类与回单查询类有高度相似性,这为我们的改造提供了便利。通过分析银行接口文档,确定了5个关键差异点后,实际编码过程相对顺利。最耗时的部分其实是测试环节 - 需要模拟各种边界条件,如超大结果集分页、异常数据格式等。