上传Excel到SAP系统
假设EXCEL模板已经被上传到SAP系统中,提供如下两种模板方法进行下载到本地(其实都一样)
第一种:
FORM FRM_DOWNLOAD_FILE_SMW0 .
DATA: LV_FILE TYPE RLGRAP-FILENAME,
LV_OBJID TYPE WWWDATA-OBJID,
LS_KEY LIKE WWWDATATAB,
LV_SUBRC TYPE SY-SUBRC,
LV_FILENAME TYPE STRING,
LV_PATH TYPE STRING,
LV_FULLPATH TYPE STRING,
LV_DEFAULT_FILE_NAME TYPE STRING.
LV_DEFAULT_FILE_NAME = '生产版本导入模板.xlsx'. "默认的文件名
*&--------获得要保存文件的路径名
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
WINDOW_TITLE = '请选择路径'
DEFAULT_FILE_NAME = LV_DEFAULT_FILE_NAME
FILE_FILTER = 'Excel 文件 (*.xls)'
CHANGING
FILENAME = LV_FILENAME
PATH = LV_PATH
FULLPATH = LV_FULLPATH
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF LV_PATH IS INITIAL.
MESSAGE '已取消下载'. "如果用户取消选择下载路径,那么相当于取消下载,结束程序
exit.
ENDIF.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
exit.
ENDIF.
LV_FILE = LV_FULLPATH.
LV_OBJID = 'ZPPR_PRDCTVER_IMPORT'. "sap系统中存储的资源对象名
SELECT SINGLE *
FROM WWWDATA
INTO CORRESPONDING FIELDS OF LS_KEY
WHERE OBJID = LV_OBJID
AND RELID = 'MI'.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
KEY = LS_KEY
DESTINATION = LV_FILE
IMPORTING
RC = LV_SUBRC.
IF LV_SUBRC = 0.
MESSAGE '模板下载成功' TYPE 'S'.
ENDIF.
第二种:
FORM frm_download_excel .
DATA: fname(128), ftype(3), fsize TYPE i.
DATA: l_fieldname TYPE string.
DATA:lv_num TYPE i.
DATA:user_action TYPE i. "文件保存对话框,用户行为
DATA: lv_filename TYPE string, "下载文件名
lv_wintitle TYPE string, "下载对话框标题名
lv_filepath TYPE string, "文件路径
lv_fullpath TYPE string, "全文件路径
lv_file TYPE rlgrap-filename,
lv_title TYPE string,
lv_xlsname TYPE wwwdatatab-objid VALUE 'ZMMR_SUPPLIER_IMPORT', "模板名称
lv_key TYPE wwwdatatab,
lv_subrc TYPE sy-subrc.
DATA :def_file_name TYPE string. "默认文件名
CONCATENATE '供应商主数据导入模板' '.xlsx' INTO def_file_name.
"文件保存对话框,获得保存路径
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
* window_title = '另存为' "对话框的标题
default_extension = 'XLSX' "默认的文件后缀名
default_file_name = def_file_name "默认文件名
file_filter = 'EXCEL 文档|*.' "文件类型过滤(只显示本地文件夹)
* INITIAL_DIRECTORY = "初始化的目录
CHANGING
filename = lv_filename "保存的文件名
path = lv_filepath "文件路径
fullpath = lv_fullpath "全文件路径
user_action = user_action
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE e007(zmmmsg).
* MESSAGE '文件保存失败' TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
* 取消下载
IF user_action = '9'.
MESSAGE s008(zmmmsg).
* MESSAGE '下载已取消' TYPE 'S'.
RETURN.
ENDIF.
"从SAP资源库中下载文件
lv_file = lv_fullpath.
lv_key-relid = 'MI'.
lv_key-objid = lv_xlsname. "SMW0 中对象ID
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = lv_key
destination = lv_file
IMPORTING
rc = lv_subrc.
IF sy-subrc <> 0.
MESSAGE e009(zmmmsg).
* MESSAGE 'SAP WEB资源库中无可用模板供使用,请检查模板是否存在!' TYPE 'E'.
ENDIF.
ENDFORM.