模板建立-smw0
输入t-code:SMW0,选择WebRFC 应用程序的二进制数据,然后点击,如图01显示
![](https://i-blog.csdnimg.cn/blog_migrate/f2fe6a4db6f69d234339b42894ba6a7b.png)
弹出的的对话框,输入包(开发类,也可以不选,因为有时候对象名称已经存在别的包里)的名字和对象名称(模板代码自己创建,程序中用到),点击执行按钮,如果对象名称已有,执行后会显示,否则,显示如图03空白。
![](https://i-blog.csdnimg.cn/blog_migrate/e14b48f24519a4602df2a9bb7c563658.png)
点击新建模板代码,对象名称是要建立的模板代码,描述是对代码的描述。然后选择右下角的
,上传EXCEL 模板(这个模板是体现设计好的将来上传数据用的模式)
![](https://i-blog.csdnimg.cn/blog_migrate/0704e5fd7f173697f3e9007e4a620def.png)
![](https://i-blog.csdnimg.cn/blog_migrate/25c1995129ae873f2b19ee62a7823f11.png)
上传好模板,会需要选择保存到哪个包里,这里最好保存在同用到上传程序一个包里。
![](https://i-blog.csdnimg.cn/blog_migrate/92a8bf8c5bf28cd973c296a5c8e1c164.png)
程序中运用
前期声明
TABLES: sscrfields."sscrfields 屏幕添加按钮声明
TYPE-POOLS: icon."ICON 图标 声明 icon 里可以看各个图标的名字
DATA: gv_demo1 TYPE w3objid. "模板1结构代码 下载模板 SMW0定义
SELECTION-SCREEN : FUNCTION KEY 1. "屏幕添加按钮引用 key 1 对应FC01 -要放屏幕选择定义的前边
PARAMETERS p_file TYPE localfile DEFAULT 'C:\'. "路径
INITIALIZATION. " 事件将增加的下载模板功能以图标形式显示出来
gv_demo1 = text-008. "008设置的模板1代码即SMW0建立的对象名称。
CONCATENATE icon_xls: '下载模板' INTO sscrfields-functxt_01." icon_xls 是图标名字。模板 sscrfields-functxt_01固定的对应 KEY 1 ,FC01
图例:
AT SELECTION-SCREEN.
CASE sscrfields-ucomm."实现下载模板功能
WHEN 'FC01'.
PERFORM save_file USING p_file .
WHEN 'RC'.
ENDCASE.
FORM save_file USING p_p_file.
DATA: wwwdata_item LIKE wwwdatatab.
DATA: g_filepath TYPE rlgrap-filename,
l_objdata TYPE wwwdatatab,
l_rc TYPE sy-subrc,
l_msgtx TYPE bapi_msg,
l_objid TYPE w3objid.
DATA: filename TYPE string.
DATA: path TYPE string.
DATA: fullpath TYPE string.
DATA: p_dest LIKE sapb-sappfad.
DATA: lv_filename TYPE string.
CLEAR: wwwdata_item,l_rc,l_msgtx.
l_objid = gv_demo1. "模板 1 结构代码 这里主要是方便向后扩展多个版本的情况
SELECT SINGLE * FROM wwwdata
INTO CORRESPONDING FIELDS OF wwwdata_item
WHERE relid = 'MI'
AND objid = l_objid
AND srtf2 = '0'.
IF sy-subrc <> 0.
EXIT.
ENDIF.
IF wwwdata_item-objid = space .
EXIT.
ENDIF.
*模板名
gv_title2 = wwwdata_item-text.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
* window_title = ''
default_extension = 'xlsx'
default_file_name = gv_title2 " 模板名
file_filter = 'Excel(*.XLS;*.XLSX)'
CHANGING
filename = lv_filename
path = path
fullpath = fullpath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
*调用日志工具
IF l_rc <> 0.
MESSAGE e004."下载模板失败!
ELSEIF l_rc = 0.
MESSAGE s003."下载模板成功!
ENDIF.
EXIT.
ENDFORM.
点击保存,显示
但是,到保存的文件夹中,发现没有。是因为只是实现了下载弹出框功能,实际保存下载功能没有。所以需要加FUNCTION 'DOWNLOAD_WEB_OBJECT'
优化后:
FORM save_file USING p_p_file.
DATA: wwwdata_item LIKE wwwdatatab.
DATA: g_filepath TYPE rlgrap-filename,
l_objdata TYPE wwwdatatab,
l_rc TYPE sy-subrc,
l_msgtx TYPE bapi_msg,
l_objid TYPE w3objid.
DATA: filename TYPE string.
DATA: path TYPE string.
DATA: fullpath TYPE string.
DATA: p_dest LIKE sapb-sappfad.
DATA: lv_filename TYPE string.
CLEAR: wwwdata_item,l_rc,l_msgtx.
l_objid = gv_demo1. "模板 1 结构代码
SELECT SINGLE * FROM wwwdata
INTO CORRESPONDING FIELDS OF wwwdata_item
WHERE relid = 'MI'
AND objid = l_objid
AND srtf2 = '0'.
IF sy-subrc <> 0.
EXIT.
ENDIF.
IF wwwdata_item-objid = space .
EXIT.
ENDIF.
"模板名
gv_title2 = wwwdata_item-text.
* lv_filename = p_file. 这里我不知道有什么作用,但是我注释后好像也没什么影响
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
* window_title = ''
default_extension = 'xlsx'
default_file_name = gv_title2 " 模板名
file_filter = 'Excel(*.XLS;*.XLSX)'
CHANGING
filename = lv_filename
path = path
fullpath = fullpath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
p_dest = fullpath.
p_file = p_dest." 不这样过度直接用会报错。没太理解
CHECK NOT p_file IS INITIAL .
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = wwwdata_item
destination = p_file "注释之后,就不能找到模板——点击保存后会再弹出一个对话框,需要手动输入一个保存的名字,再次点击之后,保存的是乱码。
IMPORTING
rc = l_rc.
*调用日志工具
IF l_rc <> 0.
MESSAGE e004."下载模板失败!
ELSEIF l_rc = 0.
MESSAGE s003."下载模板成功!
ENDIF.
EXIT.
ENDFORM.
优化后,点击保存会先弹出以上对话框,点击允许就可以。保存后,会显示
同时,保存的模板,会在相应的文件夹中。