SE78图片批量管理

作者:ABAP老白 约 5 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Data Engineering, SD, 工具, 开发, 技术, 数据工程, 销售分销
SE78图片批量管理 - 封面图
SE78图片批量管理 - 封面图

众所周知,Smartforms打印的图片需要用事务码SE78上传到系统,而SE78不论是上传图片还是查看/下载/传输都是一个一个图进行的,不能批量处理。做一个打印的功能,如果仅仅是一两个图片需要上传也就罢了,如果有几百个图片需要管理,那就是一个头疼的事情了。

本程序的作用就是SE78批量上传/下载/删除/传输/查看。

SE78图片批量管理 - 封面图
SE78图片批量管理 - 封面图
SE78图片批量管理 - 封面图
SE78图片批量管理 - 封面图

查看效果:

SE78图片批量管理 - 封面图
SE78图片批量管理 - 封面图

传输功能的写到请求:

SE78图片批量管理 - 封面图
SE78图片批量管理 - 封面图

其他功能请自行摸索。

代码如下:

*&---------------------------------------------------------------------**& Report ZSE78*&---------------------------------------------------------------------**& Baitianzhen*& SE78批量上传/下载/删除/传输/查看*&---------------------------------------------------------------------*REPORT zse78 NO STANDARD PAGE HEADING.

TABLES: stxbitmaps,bdsphio3.DATA: gv_line TYPE i, gv_text TYPE char50.DATA: BEGIN OF gt_upld OCCURS 0, name TYPE stxbitmaps-tdname, file TYPE rlgrap-filename, desc TYPE bapisignat-prop_value, END OF gt_upld.DATA: gt_maps TYPE TABLE OF stxbitmaps WITH HEADER LINE. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE btxt1.PARAMETERS: p_upld RADIOBUTTON GROUP typ USER-COMMAND sele DEFAULT 'X', p_down RADIOBUTTON GROUP typ, p_dele RADIOBUTTON GROUP typ, p_tran RADIOBUTTON GROUP typ, p_view RADIOBUTTON GROUP typ.SELECTION-SCREEN END OF BLOCK b1. SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE btxt2.PARAMETERS: p_type TYPE stxbitmaps-tdbtype MODIF ID a DEFAULT 'BCOL', p_rsdt AS CHECKBOX MODIF ID a, p_auto AS CHECKBOX MODIF ID a DEFAULT 'X', p_comp AS CHECKBOX MODIF ID a DEFAULT 'X'.SELECT-OPTIONS: s_name FOR gt_maps-tdname MODIF ID b, s_type FOR gt_maps-tdbtype MODIF ID b.SELECTION-SCREEN END OF BLOCK b2.

AT SELECTION-SCREEN OUTPUT. btxt1 = '功能选择'. btxt2 = '数据'. %_p_upld_%_app_%-text = '上传'. %_p_down_%_app_%-text = '下载'. %_p_dele_%_app_%-text = '删除'. %_p_tran_%_app_%-text = '传输'. %_p_view_%_app_%-text = '查看'. %_p_type_%_app_%-text = '彩色/黑白'. %_p_rsdt_%_app_%-text = '驻留在打印机内存中'. %_p_auto_%_app_%-text = '自动保留高度'. %_p_comp_%_app_%-text = '压缩'. %_s_name_%_app_%-text = '名称'. %_s_type_%_app_%-text = '彩色/黑白'.

LOOP AT SCREEN. IF p_upld = 'X'. IF screen-group1 CA 'B'. screen-active = '0'. ENDIF. ELSE. IF screen-group1 CA 'A'. screen-active = '0'. ENDIF. ENDIF. MODIFY SCREEN. ENDLOOP.

START-OF-SELECTION. CASE 'X'. WHEN p_upld. PERFORM upld. WHEN OTHERS. SELECT * INTO TABLE gt_maps FROM stxbitmaps WHERE tdname IN s_name AND tdid EQ 'BMAP' AND tdbtype IN s_type. IF sy-subrc NE 0. MESSAGE s000(oo) WITH '未找到数据'. ELSE. CASE 'X'. WHEN p_down. PERFORM down. WHEN p_dele. PERFORM dele. WHEN p_tran. PERFORM tran. WHEN p_view. PERFORM view. ENDCASE. ENDIF. ENDCASE.

*&---------------------------------------------------------------------**& 上传 如果已经存在,则覆盖*&---------------------------------------------------------------------*FORM upld. DATA: lv_docid TYPE stxbitmaps-docid. DATA: lv_exnam TYPE char255. DATA: lv_resol TYPE stxbitmaps-resolution. DATA: lt_files TYPE TABLE OF file_table. DATA: lv_rcode TYPE i. DATA: lv_file TYPE string.

CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING window_title = '请选择导入文件' default_filename = '*.txt' multiselection = '' CHANGING file_table = lt_files rc = lv_rcode EXCEPTIONS file_open_dialog_failed = 1 cntl_error = 2 error_no_gui = 3 not_supported_by_gui = 4 OTHERS = 5. IF sy-subrc = 0 AND lt_files IS NOT INITIAL. READ TABLE lt_files INTO lv_file INDEX 1. CALL FUNCTION 'GUI_UPLOAD' EXPORTING filename = lv_file filetype = 'ASC' has_field_separator = 'X' TABLES data_tab = gt_upld EXCEPTIONS OTHERS = 1. IF sy-subrc = 1. MESSAGE e000(oo) WITH '文件打开错误'. ENDIF. ENDIF.

gv_line = lines( gt_upld ). LOOP AT gt_upld. TRANSLATE gt_upld-name TO UPPER CASE. MESSAGE s000(oo) WITH sy-tabix '/' gv_line gt_upld-name INTO gv_text. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING percentage = 0 text = gv_text.

lv_exnam = gt_upld-file. WHILE lv_exnam CA '.'. SHIFT lv_exnam. ENDWHILE. TRANSLATE lv_exnam TO UPPER CASE.

WRITE / gt_upld-name. CLEAR: lv_docid. PERFORM import_bitmap_bds IN PROGRAM saplstxbitmaps USING gt_upld-file gt_upld-name 'GRAPHICS' 'BMAP' p_type lv_exnam gt_upld-desc "描述 p_rsdt "驻留打印机内存 p_auto "自动保留高度 p_comp "压缩 CHANGING lv_docid lv_resol. WRITE lv_docid. ENDLOOP.ENDFORM. "upld

*&---------------------------------------------------------------------**& 下载 弹出保存路径对话框*&---------------------------------------------------------------------*FORM down. DATA: lv_blen TYPE i, gv_line TYPE i, lv_path TYPE string, lv_file TYPE string, lv_xstr TYPE xstring, lt_btab TYPE TABLE OF x255.

CALL METHOD cl_gui_frontend_services=>directory_browse EXPORTING window_title = '下载到目录:' CHANGING selected_folder = lv_path EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 OTHERS = 4. CHECK sy-subrc = 0.

gv_line = lines( gt_maps ). LOOP AT gt_maps. MESSAGE s000(oo) WITH sy-tabix '/' gv_line gt_maps-tdname INTO gv_text. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING percentage = 0 text = gv_text.

WRITE / gt_maps-tdname. CALL METHOD cl_ssf_xsf_utilities=>get_bds_graphic_as_bmp EXPORTING p_object = 'GRAPHICS' p_name = gt_maps-tdname p_id = gt_maps-tdid p_btype = gt_maps-tdbtype RECEIVING p_bmp = lv_xstr EXCEPTIONS not_found = 1 internal_error = 2 OTHERS = 3. IF sy-subrc = 0. CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' EXPORTING buffer = lv_xstr IMPORTING output_length = lv_blen TABLES binary_tab = lt_btab. IF lv_xstr(2) = '424D'."BMP CONCATENATE lv_path '\' gt_maps-tdname '_' gt_maps-tdbtype '.bmp' INTO lv_file. ELSE. CONCATENATE lv_path '\' gt_maps-tdname '_' gt_maps-tdbtype '.tif' INTO lv_file. ENDIF. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING filename = lv_file filetype = 'BIN' bin_filesize = lv_blen TABLES data_tab = lt_btab EXCEPTIONS OTHERS = 1. IF sy-subrc = 0. WRITE lv_file. ELSE. WRITE '下载失败'. ENDIF. ELSE. WRITE '获取文件失败'. ENDIF. ENDLOOP.ENDFORM. "down

*&------------------------------

...

ABAP老白

关于作者:ABAP老白

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「SE78图片批量管理.md」整理生成,仅用于内部技术分享与学习交流。