SAP 银企直连交易明细查询的分页与FTP读取
前言
SAP 银企直连交易明细查询常见的有 分页多次查询 和 返回前置机文件名,下面详细介绍:
一、分页多次查询
分页多次查询可以参考建设银行的示例类:CL_EPIC_EXAMPLE_CN_CCB_GHTD
在CREATE_REQUEST方法中设置定位字符串,起始页,记录开始条数等分页参数,
在PROCESS_RESPONSE方法中设置 cf_another_segment_required = 'X',代表要执行下一页查询,最后一页 cf_another_segment_required = ''
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.
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.
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 = '6W0300'.
ls_requ_mapping_source_data-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.
TRY.
CALL TRANSFORMATION epic_example_cn_ccb_ghtd_rqst
SOURCE parameters = ls_requ_mapping_source_data
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
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.
TRY.
CALL TRANSFORMATION epic_example_cn_ccb_ghtd_rsp
SOURCE XML iv_response_message_xstring
RESULT output_data = ls_resp_mapping_result_data.
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
二、通过FTP读取银行前置机交易明细文件
1.SAP示例 FTP 程序
下面示例代码可以测试FTP服务器的连通性也可以直接运行FTP命令。比如 ls 列出前置机上面的银行交易明细文件名,大小,修改日期等。
FTP_SERVER_TO_R3 读取FTP服务器文件二进制流到ABAP内表。
报表名称 | 报告标题 |
RSFTP001 | SAPFTP 版本 |
RSFTP002 | 执行 FTP 命令 |
RSFTP003 | FTP 放置/获取测试 |
RSFTP004 | FTP 复制 |
RSFTP005 | SAPFTP 检查 |
RSFTP006 | FTP 命令列表 |
RSFTP007 | 测试函数模块:FTP_SERVER_TO_R3/FTP_R3_TO_SERVER |
RSFTP008 | 测试函数模块:FTP_CLIENT_TO_R3/FTP_R3_TO_CLIENT |
RSFTP009 | 通过验证测试 FTP 放置 |
RSFTP011 | FTP 复制 |
RSFTP012 | 拆分 SAPFTP_SERVERS 中的主机名和端口号 |
2.读入数据
注意使用二进制模式读取,以免中文乱码等问题。
FORM frm_server_to_r3 USING lv_hdl
lv_docid
lv_character_mode
CHANGING lv_blength
lt_binary_tab TYPE btc_t_xmlxtab.
DATA: lv_fname TYPE c LENGTH 60.
lv_fname = lv_docid.
REFRESH: lt_binary_tab.
CALL FUNCTION 'FTP_SERVER_TO_R3'
EXPORTING
handle = lv_hdl
fname = lv_fname
character_mode = lv_character_mode
IMPORTING
blob_length = lv_blength
TABLES
blob = lt_binary_tab
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3
OTHERS = 4.
ENDFORM.
SPLIT lv_text_buffer AT cl_abap_char_utilities=>cr_lf+1(1) INTO TABLE DATA(itab).
LOOP AT itab INTO lv_string1.
SPLIT lv_string1 AT '|' INTO TABLE DATA(itab2).
lv_col = 4.
CLEAR: lw_details.
LOOP AT itab2 INTO lv_string2.
lv_col = lv_col + 1.
ASSIGN COMPONENT lv_col OF STRUCTURE lw_details TO <fs_s1>.
<fs_s1> = lv_string2.
ENDLOOP.
lw_details-cctranscode = cctranscode.
lw_details-respsource = respsource.
lw_details-respdate = respdate.
lw_details-resptime = resptime.
APPEND lw_details TO details.
ENDLOOP.
总结
如果无法读取FTP,可能是因为SAP服务器不能访问FTP服务器。
免费FTP软件 FileZilla
既有客户端,又有服务器端,简单好用。
另外需要SM30维护视图 SAPFTP_SERVERS_V ,把FTP服务器IP和端口维护好。
post SAP-Garson
原文链接:https://blog.csdn.net/dwjnhkbc123/article/details/119901254文章来自于网络,如果侵犯了您的权益,请联系站长删除!