示例的SAP报表程序,在选择屏幕界面上,提供了一个按钮. 用户点击按钮,就下载到一个excel的文件模板,本文介绍这个功能时如何实现的:
把xls作为二进制数据传入SAP服务器的事务代码:SMW0
输入对应的报表名称:
新建文件对象:
导入xls文件到SAP系统中:
可以使用的代码:
*&---------------------------------------------------------------------*
*& Report ZPPU0063
*&---------------------------------------------------------------------*
*& james_lx 2023.4.14
*&---------------------------------------------------------------------*
REPORT ZPPU0063.
selection-screen begin of block bk with frame title text-b02.
parameter:p_path like rlgrap-filename modif id md1.
selection-screen end of block bk.
DATA: functxt TYPE smp_dyntxt.
TABLES: sscrfields.
SELECTION-SCREEN: FUNCTION KEY 1,FUNCTION KEY 2."download template.
initialization.
functxt-icon_id = icon_xxl.
functxt-icon_text = text-002.
sscrfields-functxt_01 = functxt.
functxt-icon_id = ICON_SPOOL_REQUEST.
functxt-icon_text = text-003.
sscrfields-functxt_02 = functxt.
AT SELECTION-SCREEN.
CASE sscrfields-ucomm.
WHEN 'FC01'.
PERFORM frm_download_template.
WHEN 'FC02'.
SUBMIT ZSDR0026 VIA SELECTION-SCREEN.
ENDCASE.
at selection-screen on value-request for p_path.
perform frm_sel_file changing p_path.
start-of-selection.
" perform frm_excel_import.
FORM frm_download_template.
CONSTANTS:
c_save TYPE gui_code VALUE 'SAVE',
c_template TYPE w3objid VALUE 'ZPPU0063'.
DATA:
lv_template_name TYPE string,
lv_temp_dir TYPE string,
lv_fname TYPE rlgrap-filename,
ls_objdata TYPE wwwdatatab,
lv_file TYPE string,
lv_result TYPE abap_bool,
lv_sucess TYPE char01,
lv_filename TYPE string,
lv_path TYPE string,
lv_fullpath TYPE string,
lv_result_save TYPE i.
CALL METHOD cl_gui_frontend_services=>get_desktop_directory
CHANGING
desktop_directory = lv_temp_dir
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
CHECK sy-subrc = 0.
CALL METHOD cl_gui_cfw=>flush
EXCEPTIONS
cntl_system_error = 1
cntl_error = 2
OTHERS = 3.
CHECK sy-subrc = 0.
SELECT SINGLE text INTO lv_template_name FROM wwwdata WHERE relid = 'MI' AND objid = c_template AND srtf2 = '0' .
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
default_extension = 'xlsx'
default_file_name = lv_template_name
initial_directory = lv_temp_dir
CHANGING
filename = lv_filename
path = lv_path
fullpath = lv_fullpath
user_action = lv_result_save.
lv_file = lv_fullpath.
CHECK lv_file IS NOT INITIAL.
CALL METHOD cl_gui_frontend_services=>file_exist
EXPORTING
file = lv_file
RECEIVING
result = lv_result.
IF lv_result = 'X'.
PERFORM frm_confirm USING TEXT-002 CHANGING lv_sucess.
IF lv_sucess = 'X'.
MESSAGE '下载模板操作取消' TYPE 'I'."s035."下载模板操作取消
ENDIF.
ENDIF.
CHECK lv_result IS INITIAL OR lv_sucess IS INITIAL.
lv_fname = lv_file.
ls_objdata-relid = 'MI'.
ls_objdata-objid = c_template.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = ls_objdata
destination = lv_fname.
MESSAGE '模板文档已下载' TYPE 'I'.."模板文档已下载
CLEAR: ls_objdata, lv_temp_dir, lv_fname.
CLEAR: lv_file, lv_result, lv_sucess.
ENDFORM. " FRM_DOWNLOAD_TEMPLATE
form frm_sel_file changing po_path.
data:
lt_filetable type filetable,
ls_filetable type file_table,
lv_rc type sy-subrc,
lv_filename type string,
lv_initial_path type string value 'c:\'.
clear lv_filename.
lv_filename = p_path.
call method cl_gui_frontend_services=>file_open_dialog
exporting
default_filename = lv_filename
initial_directory = lv_initial_path
changing
file_table = lt_filetable
rc = lv_rc
exceptions
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4.
if sy-subrc ne 0 or lv_rc lt 0.
message '上传文件选择失败' TYPE 'I'."上传文件选择失败
else.
if lv_rc = 1.
read table lt_filetable into ls_filetable index 1.
po_path = ls_filetable-filename.
else.
exit.
endif.
endif.
endform.
FORM _frm_charact_values USING iv_charact_value TYPE char70
iv_charact_cfgid TYPE cux_cfg_id
iv_charact_insid TYPE cu_inst_id
iv_prodcut TYPE cuib_objkey
iv_zdp_00001 TYPE zz_config_key
CHANGING is_cfgval TYPE bapicuval.
CLEAR is_cfgval.
DATA iv_data TYPE char32.
CALL METHOD zcl_ca_tools=>get_hc_single
EXPORTING
iv_config_key = iv_zdp_00001
IMPORTING
ev_single = iv_data
EXCEPTIONS
dynamic_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
" .......
ENDIF.
is_cfgval-config_id = iv_charact_cfgid.
is_cfgval-inst_id = iv_charact_insid.
is_cfgval-value = iv_charact_value.
CONCATENATE iv_prodcut '_' iv_data INTO is_cfgval-charc.
ENDFORM.
FORM frm_confirm USING pa_text TYPE char132k
CHANGING pa_sucess TYPE char01.
DATA:lv_answer TYPE c.
pa_sucess = space.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = pa_text
text_button_1 = TEXT-t02 "'是'
icon_button_1 = '@0V@'
text_button_2 = TEXT-t03 "'否'
icon_button_2 = '@0W@'
default_button = '1'
display_cancel_button = 'X'
start_column = 25
start_row = 6
IMPORTING
answer = lv_answer
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0 OR lv_answer <> '1'.
pa_sucess = 'X'.
ELSE.
pa_sucess = space.
ENDIF.
CLEAR lv_answer.
ENDFORM . "FRM_CONFIRM