当前位置: 首页 > news >正文

SAP ALV行项目各种附件上传下载删除示例

首先在ALV行项目上增加附件按钮列:

"--- 新增:附件按钮列 --- attach_btn TYPE char20," 按钮显示文字 "--- 新增:单元格样式(供 stylefname 使用)---
"--- 附件列表弹窗显示类型 ---TYPES:BEGIN OF ty_attach_disp,attid TYPE char32,filename TYPE char255,filetype TYPE char10,filesize_txt TYPE char20,creat_by TYPE xubname,creat_dt TYPE datum,creat_tm TYPE uzeit,END OF ty_attach_disp. *--- 附件功能全局变量 ---DATA:gv_cur_boxno TYPE char20,go_salv_attach TYPE REF TO cl_salv_table,gt_attach_disp_cur TYPE TABLE OF ty_attach_disp.

其他全局数据:

*---------------------------------------------------------------------* * 全局数据 *---------------------------------------------------------------------*DATA:gt_output TYPE TABLE OF ty_output,gt_output_bak TYPE TABLE OF ty_output,gv_repid TYPE repid,i_grid_settings TYPE lvc_s_glay,gs_output TYPE ty_output.DATA:gs_layout TYPE lvc_s_layo,gt_filter TYPE lvc_t_fidx,gt_fcat TYPE lvc_t_fcat,gt_sort TYPE lvc_t_sort.DATA:go_grid TYPE REF TO cl_gui_alv_grid,go_custom TYPE REF TO cl_gui_custom_container.DATA:gv_okcode TYPE sy-ucomm.DATA:gt_styletab TYPE lvc_t_styl,gt_event TYPE slis_t_event.

类定义:

CLASS lcl_event_receiver DEFINITION DEFERRED.DATA:go_receiver TYPE REF TO lcl_event_receiver. CLASS lcl_event_receiver DEFINITION. PUBLIC SECTION.METHODS:handle_data_changed_finished FOR EVENT data_changed_finished OF cl_gui_alv_grid IMPORTING et_good_cells,"ET_GOOD_CELLS"--- 新增:行内按钮点击 ---"Add by Luna on 20260519 handle_button_click FOR EVENT button_click OF cl_gui_alv_grid IMPORTING es_col_id es_row_no. ENDCLASS. CLASS lcl_event_receiver IMPLEMENTATION. METHOD handle_data_changed_finished. PERFORM frm_changed_finished USING et_good_cells . ENDMETHOD. METHOD handle_button_click. "--- 只响应附件按钮列的点击 --- CHECK es_col_id-fieldname ='ATTACH_BTN'. PERFORM frm_on_attach_button_click USING es_row_no-row_id . ENDMETHOD. ENDCLASS. "======================================================================" 附件弹窗事件类(cl_salv_table 自定义按钮) ""====================================================================== CLASS lcl_attach_events DEFINITION. PUBLIC SECTION.METHODS:handle_function FOR EVENT added_function OF cl_salv_events IMPORTING e_salv_function. ENDCLASS. CLASS lcl_attach_events IMPLEMENTATION. METHOD handle_function. PERFORM frm_attach_popup_command USING e_salv_function. ENDMETHOD. ENDCLASS.

在ALV行项目处理时增加附件图标格式:

PERFORM frm_set_attach_button_style. FORM frm_set_attach_button_style .DATA:ls_styl TYPE lvc_s_styl. LOOP AT gt_output ASSIGNINGFIELD-SYMBOL(<fs_out>)."--- 查询该箱号是否已有附件,动态显示数量 --- DATA(lv_cnt) = 0. SELECT COUNT(*) INTO lv_cnt FROM ztmme082_ath WHERE box_no = <fs_out>-box_no. IF lv_cnt > 0. <fs_out>-attach_btn = |📎 附件({lv_cnt})|. ELSE. <fs_out>-attach_btn ='📎 上传附件'. ENDIF. "--- 设置该列为按钮样式 --- CLEAR <fs_out>-celltab. CLEAR ls_styl. ls_styl-fieldname ='ATTACH_BTN'. ls_styl-style = cl_gui_alv_grid=>mc_style_button. APPEND ls_styl TO <fs_out>-celltab. ENDLOOP. ENDFORM.

在build fieldcatalog里增加

PERFORM frm_set_fcat_attach_btn. FORM frm_set_fcat_attach_btn .DATA:ls_fcat TYPE lvc_s_fcat. "--- 附件按钮列字段目录 --- CLEAR ls_fcat. ls_fcat-fieldname ='ATTACH_BTN'. ls_fcat-coltext ='附件'. ls_fcat-seltext ='附件'. ls_fcat-outputlen = 14. ls_fcat-col_pos = 99. " 固定在最后一列 * ls_fcat-no_sort = abap_true. * ls_fcat-no_filter = abap_true. ls_fcat-fix_column = abap_false. APPEND ls_fcat TO gt_fcat. "--- celltab 列必须隐藏(不在 fcat 中注册则自动隐藏)--- " 若框架要求显式注册,则: " ls_fcat-fieldname ='CELLTAB'. " ls_fcat-no_out = abap_true. " APPEND ls_fcat TO gt_fcat. "--- 关键:告知 ALV 哪个字段是样式表 --- gs_layout-stylefname ='CELLTAB'. ENDFORM.

增加双击事件 SET HANDLER go_receiver->handle_button_click FOR go_grid.

FORM frm_caller_exit USING e_grid TYPE slis_data_caller_exit . CALL FUNCTION'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTING e_grid = go_grid. CALL METHOD go_grid->register_edit_event EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_enter EXCEPTIONS error = 1 OTHERS = 2. CALL METHOD go_grid->register_edit_event EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_modified. CREATE OBJECT go_receiver. " SET HANDLER go_receiver->handle_data_changed_finished FOR go_grid.DATA(go_event_handler)= NEW lcl_event_handler(). SET HANDLER go_event_handler->handle_data_changed FOR go_grid. SET HANDLER go_receiver->handle_button_click FOR go_grid. ENDFORM .

增加GUI状态POPUP_ATTACH

双击时间处理:

*&---------------------------------------------------------------------* *& Form FRM_ON_ATTACH_BUTTON_CLICK *& 行内附件按钮点击入口,打开该箱号的附件管理弹窗 "Add by Luna on 20260519 ---S *&---------------------------------------------------------------------* FORM frm_on_attach_button_click USING pv_row_id TYPE int4.DATA:ls_out TYPE ty_output. "--- 取当前行数据 --- READ TABLE gt_output INTO ls_out INDEX pv_row_id. IF sy-subrc <> 0 OR ls_out-box_no IS INITIAL. MESSAGE'无法获取箱号信息'TYPE'W'. RETURN. ENDIF. gv_cur_boxno = ls_out-box_no. "--- 查询该箱号附件,构建弹窗显示表 --- PERFORM frm_load_attach_list USING gv_cur_boxno. "--- 弹出附件管理窗口 --- PERFORM frm_show_attach_popup USING gv_cur_boxno. "--- 弹窗关闭后刷新当前行的附件数量显示 --- PERFORM frm_refresh_row_attach_btn USING pv_row_id ls_out-box_no. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_LOAD_ATTACH_LIST *& 查询指定箱号的附件列表,填充 gt_attach_disp_cur "Add by Luna on 20260519 ---S *&---------------------------------------------------------------------* FORM frm_load_attach_list USING pv_boxno TYPE char20.DATA:ls_hdr TYPE ztmme082_ath,ls_disp TYPE ty_attach_disp. CLEAR gt_attach_disp_cur. SELECT * FROM ztmme082_ath INTO TABLE @DATA(lt_hdr)WHERE box_no = @pv_boxno ORDER BY creat_dt,creat_tm DESCENDING. LOOP AT lt_hdr INTO ls_hdr. CLEAR ls_disp. ls_disp-attid = ls_hdr-attid. ls_disp-filename = ls_hdr-filename. PERFORM frm_get_file_ext USING ls_hdr-filename CHANGING ls_disp-filetype. PERFORM frm_fmt_filesize USING ls_hdr-filesize CHANGING ls_disp-filesize_txt. ls_disp-creat_by = ls_hdr-creat_by. ls_disp-creat_dt = ls_hdr-creat_dt. ls_disp-creat_tm = ls_hdr-creat_tm. APPEND ls_disp TO gt_attach_disp_cur. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_SHOW_ATTACH_POPUP *& cl_salv_table 弹窗:整合上传 / 下载 / 删除三个操作 "Add by Luna on 20260519 ---S *&---------------------------------------------------------------------* FORM frm_show_attach_popup USING pv_boxno TYPE char20.DATA:lo_cols TYPE REF TO cl_salv_columns_table,lo_col TYPE REF TO cl_salv_column_table," lo_funcs TYPE REF TO cl_salv_functions_list,lo_events TYPE REF TO cl_salv_events_table,lo_handler TYPE REF TO lcl_attach_events,lo_select TYPE REF TO cl_salv_selections,lx_msg TYPE REF TO cx_salv_msg. TRY. cl_salv_table=>factory(IMPORTING r_salv_table = go_salv_attach CHANGING t_table = gt_attach_disp_cur). CATCH cx_salv_msg INTO lx_msg. MESSAGE lx_msg->get_text()TYPE'E'. RETURN. ENDTRY. "--- 列配置 --- lo_cols = go_salv_attach->get_columns(). lo_cols->set_optimize(abap_true). "--- 隐藏 ATTID 内部列 --- TRY. lo_col ?= lo_cols->get_column('ATTID'). lo_col->set_visible(if_salv_c_bool_sap=>false). CATCH cx_salv_not_found. "#EC NO_HANDLER ENDTRY. "--- 设置列标题 --- PERFORM frm_set_attach_col_titles USING lo_cols. "--- 单行选择模式 --- lo_select = go_salv_attach->get_selections(). lo_select->set_selection_mode(if_salv_c_selection_mode=>single). "--- 自定义按钮(清除默认按钮)--- * lo_funcs = go_salv_attach->get_functions(). * lo_funcs->set_all(if_salv_c_bool_sap=>false). * lo_funcs->add_function(* name ='UPLOAD'* icon = CONVstring(icon_attachment)* text ='上传新附件'* tooltip ='为箱号上传新附件(支持多选)'* position = if_salv_c_function_position=>right_of_salv_functions). * * lo_funcs->add_function(* name ='DOWNLOAD'* icon = CONVstring(icon_export)* text ='下载'* tooltip ='下载选中行的附件到本地'* position = if_salv_c_function_position=>right_of_salv_functions). * * lo_funcs->add_function(* name ='DEL_ATT'* icon = CONVstring(icon_delete)* text ='删除'* tooltip ='永久删除选中行的附件'* position = if_salv_c_function_position=>right_of_salv_functions). go_salv_attach->set_screen_status(pfstatus ='POPUP_ATTACH'" 刚才在 SE41 建的状态名 report = sy-repid " 当前程序 set_functions = go_salv_attach->c_functions_none). " 弹窗不要加载全量标准按钮 "--- 绑定事件 --- lo_events = go_salv_attach->get_event(). CREATE OBJECT lo_handler. SET HANDLER lo_handler->handle_function FOR lo_events. "--- 弹窗尺寸 --- go_salv_attach->set_screen_popup(start_column = 10 end_column = 100 start_line = 5 end_line = 20). go_salv_attach->display(). ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_REFRESH_ROW_ATTACH_BTN *& 弹窗关闭后刷新对应行的附件按钮显示文字"Add by Luna on 20260519 ---S *&---------------------------------------------------------------------* FORM frm_refresh_row_attach_btn USING pv_row TYPE int4 pv_boxno TYPE char20. DATA: lv_cnt TYPE i, ls_out TYPE ty_output, ls_styl TYPE lvc_s_styl. SELECT COUNT(*) INTO lv_cnt FROM ztmme082_ath WHERE box_no = pv_boxno. READ TABLE gt_output INTO ls_out INDEX pv_row. IF sy-subrc <> 0. RETURN. ENDIF. IF lv_cnt > 0. ls_out-attach_btn = |📎 附件({lv_cnt})|. ELSE. ls_out-attach_btn ='📎 上传附件'. ENDIF. MODIFY gt_output FROM ls_out INDEX pv_row. "--- 通知 ALV 刷新该行 --- go_grid->refresh_table_display(). ENDFORM. &---------------------------------------------------------------------* *& Form FRM_SET_ATTACH_COL_TITLES "Add by Luna on 20260519 ---S *&---------------------------------------------------------------------* FORM frm_set_attach_col_titles USING po_cols TYPE REF TO cl_salv_columns_table.DATA:lo_col TYPE REF TO cl_salv_column_table. DEFINE _col. TRY. lo_col ?= po_cols->get_column(&1). lo_col->set_short_text(&2). lo_col->set_medium_text(&2). lo_col->set_long_text(&2). CATCH cx_salv_not_found. "#EC NO_HANDLER ENDTRY. END-OF-DEFINITION. _col'FILENAME''文件名'. _col'FILETYPE''类型'. _col'FILESIZE_TXT''文件大小'. _col'CREAT_BY''上传人'. _col'CREAT_DT''上传日期'. _col'CREAT_TM''上传时间'. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_ATTACH_POPUP_COMMAND(lcl_attach_events 回调) "Add by Luna on 20260519 ---S *&---------------------------------------------------------------------* FORM frm_attach_popup_command USING pv_func TYPE salv_de_function. CASE pv_func. WHEN'ZUPLOAD'. PERFORM frm_upload_attach. WHEN'DOWNLOAD'. PERFORM frm_download_selected_attach. WHEN'DEL_ATT'. PERFORM frm_delete_selected_attach. ENDCASE. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_UPLOAD_ATTACH — 上传附件(弹窗内调用,使用 gv_cur_boxno)"Add by Luna on 20260519 ---S *&---------------------------------------------------------------------* FORM frm_upload_attach. DATA: lt_files TYPE filetable, ls_file TYPE file_table, lv_rc TYPE i, lv_action TYPE i, lt_raw TYPE TABLE OF x255, lv_xstr TYPE xstring, lv_len TYPE i, lv_fname TYPE char255, lv_ext TYPE char10, lv_mime TYPE char128, lv_attid TYPE char32, lv_cnt TYPE i. cl_gui_frontend_services=>file_open_dialog( EXPORTING window_title = |上传附件 — 箱号:{gv_cur_boxno}| multiselection = abap_true file_filter ='支持的文件|*.jpg;*.jpeg;*.png;*.bmp;*.gif;*.tif;*.pdf;*.doc;*.docx;*.xls;*.xlsx|'&&'图片|*.jpg;*.jpeg;*.png;*.bmp;*.gif;*.tif|'&&'PDF|*.pdf|'&&'Word|*.doc;*.docx|'&&'Excel|*.xls;*.xlsx|'&&'所有文件|*.*'CHANGING file_table = lt_files rc = lv_rc user_action = lv_action EXCEPTIONS OTHERS = 1). CHECK lv_action <> cl_gui_frontend_services=>action_cancel AND lt_files IS NOT INITIAL. lv_cnt = 0. LOOP AT lt_files INTO ls_file.CLEAR:lt_raw,lv_xstr. PERFORM frm_get_filename_from_path USING ls_file-filename CHANGING lv_fname. PERFORM frm_get_file_ext USING lv_fname CHANGING lv_ext. PERFORM frm_get_mime_type USING lv_ext CHANGING lv_mime. CALL FUNCTION'GUI_UPLOAD'EXPORTING filename = CONVstring(ls_file-filename)filetype ='BIN'IMPORTING filelength = lv_len TABLES data_tab = lt_raw EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. MESSAGE |"{ lv_fname }"读取失败,已跳过| TYPE'W'. CONTINUE. ENDIF. CALL FUNCTION'SCMS_BINARY_TO_XSTRING'EXPORTING input_length = lv_len IMPORTING buffer = lv_xstr TABLES binary_tab = lt_raw. PERFORM frm_gen_guid CHANGING lv_attid. PERFORM frm_save_attach USING gv_cur_boxno lv_attid lv_fname lv_mime lv_len lv_xstr. "--- 上传成功后同步更新弹窗显示表 ---DATA:ls_disp TYPE ty_attach_disp. CLEAR ls_disp. ls_disp-attid = lv_attid. ls_disp-filename = lv_fname. ls_disp-filetype = lv_ext. PERFORM frm_fmt_filesize USING lv_len CHANGING ls_disp-filesize_txt. ls_disp-creat_by = sy-uname. ls_disp-creat_dt = sy-datum. ls_disp-creat_tm = sy-uzeit. INSERT ls_disp INTO gt_attach_disp_cur INDEX 1." 最新在顶部 lv_cnt = lv_cnt + 1. ENDLOOP. IF lv_cnt > 0. go_salv_attach->refresh( ). MESSAGE |成功上传{lv_cnt}个附件| TYPE'S'. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_DOWNLOAD_SELECTED_ATTACH *&---------------------------------------------------------------------* FORM frm_download_selected_attach.DATA:lo_sel TYPE REF TO cl_salv_selections,lt_rows TYPE salv_t_row,ls_row TYPE int4,ls_disp TYPE ty_attach_disp,lv_xstr TYPE xstring,lt_raw TYPE TABLE OF x255,lv_len TYPE i,lv_path TYPE string,lv_fullpath TYPE string,lv_filename TYPE string,lv_action TYPE i,lv_ext TYPE string," 新增:用于存放文件扩展名 lv_filter TYPE string. " 新增:用于存放对话框类型过滤规则 CHECK go_salv_attach IS NOT INITIAL. lo_sel = go_salv_attach->get_selections(). lt_rows = lo_sel->get_selected_rows(). IF lt_rows IS INITIAL. MESSAGE'请先选择要下载的附件行'TYPE'W'. RETURN. ENDIF. READ TABLE lt_rows INTO ls_row INDEX 1. READ TABLE gt_attach_disp_cur INTO ls_disp INDEX ls_row. CHECK sy-subrc = 0. PERFORM frm_read_attach_content USING ls_disp-attid CHANGING lv_xstr. IF lv_xstr IS INITIAL. MESSAGE'附件内容读取失败'TYPE'W'. RETURN. ENDIF. lv_filename = ls_disp-filename. " ===================================================================== " 【新增逻辑】自动解析扩展名,设置对话框“保存类型” " ===================================================================== " 1. 从文件名中提取后缀名(例如将'test_doc.xlsx'提取出'xlsx')DATA:lt_split TYPE TABLE OF string,lv_lines TYPE i. SPLIT lv_filename AT'.'INTO TABLE lt_split. lv_lines =lines(lt_split). IF lv_lines > 1. " 存在后缀名,取最后一段 READ TABLE lt_split INTO lv_ext INDEX lv_lines. TRANSLATE lv_ext TO LOWER CASE. " 统一转小写 ELSE. " 如果文件名里没写后缀,尝试使用结构里的 filetype 字段 lv_ext = ls_disp-filetype. TRANSLATE lv_ext TO LOWER CASE. ENDIF. " 2. 按照 SAP 标准格式拼接过滤字符串 " 格式说明: 显示文本(*.后缀)| *.后缀 | 所有文件(*.*)| *.* IF lv_ext IS NOT INITIAL. lv_filter = lv_ext &&' 文件 (*.'&& lv_ext &&')|*.'&& lv_ext &&'|所有文件 (*.*)|*.*'. ELSE. lv_filter ='所有文件 (*.*)|*.*'. ENDIF. " ===================================================================== cl_gui_frontend_services=>file_save_dialog(EXPORTING default_file_name = lv_filename default_extension = lv_ext " <--- 传入默认后缀 file_filter = lv_filter " <--- 传入下拉框文件类型 window_title ='选择保存位置'CHANGING filename = lv_filename path = lv_path fullpath = lv_fullpath user_action = lv_action EXCEPTIONS OTHERS = 1). CHECK lv_action <> cl_gui_frontend_services=>action_cancel. CONDENSE lv_fullpath. CALL FUNCTION'SCMS_XSTRING_TO_BINARY'EXPORTING buffer = lv_xstr IMPORTING output_length = lv_len TABLES binary_tab = lt_raw. CALL FUNCTION'GUI_DOWNLOAD'EXPORTING filename = lv_fullpath filetype ='BIN'TABLES data_tab = lt_raw EXCEPTIONS access_denied = 15 OTHERS = 1. IF sy-subrc = 0. MESSAGE |"{ ls_disp-filename }"下载成功| TYPE'S'. cl_gui_frontend_services=>execute(EXPORTING document = lv_fullpath EXCEPTIONS OTHERS = 1). ELSEIF sy-subrc = 15. MESSAGE'下载失败:目标文件正被打开占用,或无权限写入。'TYPE'W'. ELSE. MESSAGE'下载失败,请检查网络或路径。'TYPE'W'. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_DELETE_SELECTED_ATTACH"Add by Luna on 20260519 ---S *&---------------------------------------------------------------------* FORM frm_delete_selected_attach. DATA: lo_sel TYPE REF TO cl_salv_selections, lt_rows TYPE salv_t_row, ls_row TYPE int4, ls_disp TYPE ty_attach_disp, lv_ans TYPE char1. CHECK go_salv_attach IS NOT INITIAL. lo_sel = go_salv_attach->get_selections( ). lt_rows = lo_sel->get_selected_rows( ). IF lt_rows IS INITIAL. MESSAGE '请先选择要删除的附件行' TYPE 'W'. RETURN. ENDIF. READ TABLE lt_rows INTO ls_row INDEX 1. READ TABLE gt_attach_disp_cur INTO ls_disp INDEX ls_row. CHECK sy-subrc = 0. CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING titlebar = '确认删除' text_question = |确认永久删除附件:{ls_disp-filename}?| text_button_1 ='确认删除'text_button_2 ='取消'default_button ='2'IMPORTING answer = lv_ans. CHECK lv_ans ='1'. DELETE FROM ztmme082_ath WHERE attid = ls_disp-attid. DELETE FROM ztmme082_atc WHERE attid = ls_disp-attid. COMMIT WORK. DELETE gt_attach_disp_cur INDEX ls_row. go_salv_attach->refresh(). MESSAGE |附件"{ls_disp-filename}" 已删除| TYPE'S'. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_SAVE_ATTACH "Add by Luna on 20260519 ---S *&---------------------------------------------------------------------* FORM frm_save_attach USING pv_boxno TYPE char20 pv_attid TYPE char32 pv_fname TYPE char255 pv_mime TYPE char128 pv_size TYPE i pv_xstr TYPE xstring.DATA:ls_hdr TYPE ztmme082_ath,ls_cnt TYPE ztmme082_atc. ls_hdr-mandt = sy-mandt. ls_hdr-box_no = pv_boxno. ls_hdr-attid = pv_attid. ls_hdr-filename = pv_fname. ls_hdr-mimetype = pv_mime. ls_hdr-filesize = pv_size. ls_hdr-creat_by = sy-uname. ls_hdr-creat_dt = sy-datum. ls_hdr-creat_tm = sy-uzeit. INSERT ztmme082_ath FROM ls_hdr. IF sy-subrc <> 0. MESSAGE |"{ pv_fname }"主记录写入失败| TYPE'W'. RETURN. ENDIF. ls_cnt-mandt = sy-mandt. ls_cnt-attid = pv_attid. ls_cnt-content = pv_xstr. INSERT ztmme082_atc FROM ls_cnt. IF sy-subrc <> 0. DELETE FROM ztmme082_ath WHERE box_no = @pv_boxno AND attid = @pv_attid. MESSAGE |"{ pv_fname }"内容写入失败,已回滚| TYPE'W'. RETURN. ENDIF. COMMIT WORK. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_READ_ATTACH_CONTENT "Add by Luna on 20260519 ---S *&---------------------------------------------------------------------* FORM frm_read_attach_content USING pv_attid TYPE char32 CHANGING pv_xstr TYPE xstring. CLEAR pv_xstr. SELECT SINGLE content INTO pv_xstr FROM ztmme082_atc WHERE attid = pv_attid. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_GEN_GUID "Add by Luna on 20260519 ---S *&---------------------------------------------------------------------* FORM frm_gen_guid CHANGING cv_guid TYPE char32. " 直接调用静态方法生成 32 位 GUID TRY. cv_guid = cl_system_uuid=>create_uuid_c32_static(). CATCH cx_uuid_error. " 如果需要的话,这里可以加个清空或异常处理逻辑 CLEAR cv_guid. ENDTRY. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_GET_FILENAME_FROM_PATH *&---------------------------------------------------------------------* FORM frm_get_filename_from_path USING pv_path TYPE char1024 CHANGING cv_name TYPE char255.DATA:lv_pos TYPE i,lv_len TYPE i. lv_len =strlen(pv_path). lv_pos = lv_len. WHILE lv_pos > 0. lv_pos = lv_pos - 1. IF pv_path+lv_pos(1)='\' OR pv_path+lv_pos(1) = '/'. lv_pos = lv_pos + 1. EXIT. ENDIF. ENDWHILE. cv_name = pv_path+lv_pos. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_GET_FILE_EXT "Add by Luna on 20260519 ---S *&---------------------------------------------------------------------* FORM frm_get_file_ext USING pv_name TYPE char255 CHANGING cv_ext TYPE char10.DATA:lv_str TYPE string,lv_pos TYPE i,lv_len TYPE i. lv_str = pv_name. lv_len =strlen(lv_str). lv_pos = lv_len. WHILE lv_pos > 0. lv_pos = lv_pos - 1. IF lv_str+lv_pos(1)='.'. lv_pos = lv_pos + 1. EXIT. ENDIF. ENDWHILE. IF lv_pos > 0 AND lv_pos < lv_len. cv_ext = lv_str+lv_pos. TRANSLATE cv_ext TO UPPER CASE. ELSE. cv_ext ='FILE'. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_GET_MIME_TYPE "Add by Luna on 20260519 ---S *&---------------------------------------------------------------------* FORM frm_get_mime_type USING pv_ext TYPE char10 CHANGING cv_mime TYPE char128. CASE pv_ext. WHEN'PDF'. cv_mime ='application/pdf'. WHEN'DOC'. cv_mime ='application/msword'. WHEN'DOCX'. cv_mime ='application/vnd.openxmlformats-officedocument.wordprocessingml.document'. WHEN'XLS'. cv_mime ='application/vnd.ms-excel'. WHEN'XLSX'. cv_mime ='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'. WHEN'JPG'OR'JPEG'. cv_mime ='image/jpeg'. WHEN'PNG'. cv_mime ='image/png'. WHEN'GIF'. cv_mime ='image/gif'. WHEN'BMP'. cv_mime ='image/bmp'. WHEN'TIF'OR'TIFF'. cv_mime ='image/tiff'. WHEN OTHERS. cv_mime ='application/octet-stream'. ENDCASE. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_FMT_FILESIZE"Add by Luna on 20260519 ---S *&---------------------------------------------------------------------* FORM frm_fmt_filesize USING pv_size TYPE i CHANGING cv_text TYPE char20. DATA: lv_val TYPE p LENGTH 8 DECIMALS 1. IF pv_size < 1024. cv_text = |{pv_size}B|. ELSEIF pv_size < 1048576. lv_val = pv_size / 1024. cv_text = |{lv_val}KB|. ELSE. lv_val = pv_size / 1048576. cv_text = |{lv_val}MB|. ENDIF. ENDFORM.

另需要建立两张表存储数据:
ZTMME082_ATC


ZTMME082_ATH


最后结果:

http://www.zskr.cn/news/1404077.html

相关文章:

  • 当ChatGPT说“我懂你”时,大脑fMRI发生了什么?——来自斯坦福神经AI实验室的实时脑区激活图谱(附开源检测插件)
  • 5分钟精通跨平台资源下载神器res-downloader:一站式解决视频音频图片下载难题
  • 基于Ant Design Vue的RuoYi-Ant在企业级管理系统中的架构实践与性能优化
  • 直播拍卖与普通直播带宽需求差异,技术层面深度对比
  • 3个Obsidian主页模板:从混乱到有序的知识空间改造指南
  • 微步Flocks — 实践AI渗透测试核心体系
  • Unity性能优化实战:用灯光烘焙把Draw Call降下来,我的移动端项目流畅了不止一倍
  • 基于轻量LSTM的无人机风场估计与半自主控制技术实践
  • 上蔡2026亲测:拒绝模板婚纱照
  • 别再死记硬背L1、L2范数了!用Python可视化带你理解正则化如何‘惩罚’模型
  • SPIRAL系统:用数学框架实现跨平台高性能计算的自动化
  • 跨平台划词翻译终极指南:深度评测20+翻译引擎与OCR识别实战
  • 仿生NOAH算法:水下AUV集群如何像藤壶一样智能锚定与协同
  • 基于共源共栅电流镜的无电感SiC MOSFET栅极驱动器设计与实践
  • 工业AR在船厂4.0中的应用:边缘计算架构如何破解实时性与环境挑战
  • Tiny RDM如何用11种语言连接全球Redis开发者?
  • 27考研312心理学历年真题PDF
  • 专业级MapleStory资源编辑实战:Harepacker-resurrected深度解析与高效应用指南
  • 039、模型推理慢、GPU 利用率低?ONNX 导出、动态 Batch 与 TensorRT 加速方案
  • Stanford Doggo:开源四足机器人完整指南与架构深度解析
  • 如何永久保存微信聊天记录:3步实现个人数据的完整备份与深度分析
  • OpCore Simplify:黑苹果EFI自动化配置工具,3分钟完成专业级OpenCore配置
  • 如何用Python脚本自动化COMSOL仿真:MPh的终极指南
  • 终极免费无人机日志分析工具:3分钟掌握飞行数据分析技巧
  • Marvis:重新定义 Windows 桌面智能助手
  • 2026年必备!探秘正规、专业、优质的充气洗消帐篷背后的故事
  • 从零构建可信AI品牌名:融合NLP语义权重、ICANN域名可用性、WIPO商标近似度的实时命名评估流程(附内部工具链截图)
  • Windows 11系统优化终极指南:5分钟掌握Win11Debloat完整教程
  • 2026溧阳黄金回收实测哪家卖金不被坑? - 奢佳美黄金珠宝
  • 六、ansible的角色