我们在开发文件上载下载功能时,经常会需要弹出一个文件选择的窗口,让用户选择文件或者指定文件名。这个功能大部分人都会觉得比较容易实现,只需要调用 cl_gui_frontend_services=>file_open_dialog 这个静态方法即可。
话是这么说,可是让我先来问你一个简单的问题:
你每次都能记起文件的filter参数怎么是怎么设置的吗?
比如下面这个:
1 |
lv_filter = '(*.xls)|*.xls|(*.*)|'. |
这是Excel文件的filter(其实这个filter写的也比较初级)参数设置,那如果我现在只想显示txt档呢?是不是每次都得查一下?是不是每次都有点头疼?有没有这种感觉:
哎,记不住呀……
其实,我们也不用记住。因为如果你仔细研究一下这个cl_gui_frontend_services类,你会发现SAP已经帮我们预定义好了以下几种类型 File Filter,而且是相当专业的,几乎能应对所以的业务类型文档了:
1 2 3 4 5 6 7 8 |
FILETYPE_ALL = 'All Files (*.*)|*.*|' FILETYPE_EXCEL = 'Microsoft Excel Files (*.XLS;*.XLSX;*.XLSM)|*.XLS;*.XLSX;*.XLSM|' FILETYPE_WORD = 'Microsoft Word Files (*.DOC;*.DOCX;*.DOCM)|*.DOC;*.DOCX;*.DOCM|' FILETYPE_TEXT = 'Text Files (*.TXT)|*.TXT|' FILETYPE_HTML = 'HTML files (*.HTML, *.HTM)|*.HTML;*.HTM|' FILETYPE_RTF = 'RTF Files (*.RTF)|*.RTF|' FILETYPE_XML = 'XML (*.XML)|*.XML|' FILETYPE_POWERPOINT = 'Microsoft PowerPoint Files (*PPT;*.PPTX;*.PPTM)|*PPT;*.PPTX;*.PPTM|' |
这些都是定义在class cl_gui_frontend_services中的静态属性,所以我们直接用就可以了。
俗话说“光说不练假把式”,那我们来个sample,let me give you one for example 呃(这句英语读下来毫无违和感的,绝对是中式英语专八级别的):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
FORM frm_f4_file_path CHANGING i_fullpath TYPE localfile. DATA: lit_file_table TYPE STANDARD TABLE OF file_table, "File table lwa_file TYPE file_table, "file table work area l_filename TYPE string, "file name l_path TYPE string, "path l_fullpath TYPE string. "full file path DATA: lo_frontend_services TYPE REF TO cl_gui_frontend_services, "frontend services l_return_code TYPE i, "return code l_user_action TYPE i, "user action l_default_name TYPE string. "default name * File name filter and default name for the upload file l_default_name = 'tempalte.xlsx'. CREATE OBJECT lo_frontend_services. cl_gui_frontend_services=>file_open_dialog( EXPORTING default_filename = l_default_name file_filter = cl_gui_frontend_services=>filetype_excel CHANGING file_table = lit_file_table[] rc = l_return_code user_action = l_user_action EXCEPTIONS OTHERS = 4 ). CALL METHOD lo_frontend_services->free. IF l_user_action <> lo_frontend_services->action_cancel. READ TABLE lit_file_table INTO lwa_file INDEX 1. IF sy-subrc = 0. MOVE lwa_file-filename TO i_fullpath. ENDIF. ENDIF. ENDFORM. |
注意:
上面语句中我们用了一个local的object,主要是为了判断用户有没有点击弹出框中的“取消”按钮。
以上。
约翰,你好
2021-05-27 1:02 下午
2021-05-27 2:31 下午大家好,才是真的好