SE78图片批量管理

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

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

652b092bcef635e4083b3822b74de766.png

查看效果:
ec34c5e70f0853858074a46cd764f074.png

传输功能的写到请求:
c202b3cff6c294e16e5190e406f12d5c.png

其他功能请自行摸索。

代码如下:

*&---------------------------------------------------------------------*
*& 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


*&---------------------------------------------------------------------*
*& 删除
*&---------------------------------------------------------------------*
FORM dele.
  DATA lv_mess TYPE char100.


  LOOP AT gt_maps.
    WRITE: / gt_maps-tdname,gt_maps-tdbtype.
    CALL FUNCTION 'SAPSCRIPT_DELETE_GRAPHIC_BDS'
      EXPORTING
        i_object      = 'GRAPHICS'
        i_name        = gt_maps-tdname
        i_id          = gt_maps-tdid
        i_btype       = gt_maps-tdbtype
        dialog        = ''
      EXCEPTIONS
        delete_failed = 1
        not_found     = 2
        canceled      = 3
        OTHERS        = 4.
    CASE sy-subrc.
      WHEN 0.
        WRITE '成功删除'.
      WHEN OTHERS.
        MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO lv_mess.
        WRITE lv_mess.
    ENDCASE.
  ENDLOOP.
ENDFORM.                    "dele


*&---------------------------------------------------------------------*
*& 传输 弹出选择请求号的对话框 工作台请求
*&---------------------------------------------------------------------*
FORM tran.
  DATA: lv_task TYPE e070-trkorr,
        lt_071k TYPE TABLE OF e071k WITH HEADER LINE,
        lt_e071 TYPE TABLE OF e071  WITH HEADER LINE.


  lt_e071-objfunc  = 'K'.
  lt_e071-pgmid    = 'R3TR'.
  lt_e071-object   = 'TABU'.
  lt_e071-obj_name = 'STXBITMAPS'.
  APPEND lt_e071.


  LOOP AT gt_maps.
    lt_071k-pgmid      = 'R3TR'.
    lt_071k-mastertype = 'TABU'.
    lt_071k-object     = 'TABU'.
    lt_071k-mastername = 'STXBITMAPS'.
    lt_071k-objname    = 'STXBITMAPS'.
    CONCATENATE gt_maps-tdobject
                gt_maps-tdname
                gt_maps-tdid
                gt_maps-tdbtype
                INTO lt_071k-tabkey RESPECTING BLANKS.
    APPEND lt_071k.
  ENDLOOP.


  CALL FUNCTION 'TR_ORDER_CHOICE_CORRECTION'
    EXPORTING
      iv_category = 'SYST'
    IMPORTING
      ev_task     = lv_task
    EXCEPTIONS
      OTHERS      = 3.
  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.


  CALL FUNCTION 'TR_APPEND_TO_COMM_OBJS_KEYS'
    EXPORTING
      wi_simulation         = ''
      wi_suppress_key_check = ''
      wi_trkorr             = lv_task
    TABLES
      wt_e071               = lt_e071
      wt_e071k              = lt_071k
    EXCEPTIONS
      OTHERS                = 68.
  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ELSE.
    MESSAGE s000(oo) WITH '成功'.
  ENDIF.
ENDFORM.                    "tran


*&---------------------------------------------------------------------*
*& 使用HTML查看多个图片
*&---------------------------------------------------------------------*
FORM view.
  DATA: lv_pkey  TYPE char80,
        lv_xstr TYPE xstring,
        lv_html TYPE string.
  DATA: lt_data TYPE cl_abap_browser=>load_tab WITH HEADER LINE.
  DATA: lr_stru TYPE REF TO data,
        lr_type TYPE REF TO cl_abap_structdescr,
        lt_comp TYPE abap_component_tab WITH HEADER LINE.
  FIELD-SYMBOLS: <ls_stru> TYPE any,
                 <lt_btab> TYPE STANDARD TABLE.




  LOOP AT gt_maps.
    lt_comp-name = gt_maps-tdname && gt_maps-tdbtype.
    lt_comp-type ?= cl_abap_datadescr=>describe_by_name( 'SWXMLCONT' ).
    APPEND lt_comp.
  ENDLOOP.
  lr_type  = cl_abap_structdescr=>create( lt_comp[] ).
  CREATE DATA lr_stru TYPE HANDLE lr_type.
  ASSIGN lr_stru->* TO <ls_stru>.


  lv_html = `<html><meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>` &&
            `<table border=1 cellpadding=2 `  &&
            `style='border-collapse:collapse;font-size:10.5pt'>` &&
            `<tbody><TR style= 'background:#f4f4f4'></TR>` .


  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.


    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.
      lv_pkey = gt_maps-tdname && gt_maps-tdbtype.
      ASSIGN COMPONENT lv_pkey OF STRUCTURE <ls_stru> TO <lt_btab>.
      CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
        EXPORTING
          buffer     = lv_xstr
        TABLES
          binary_tab = <lt_btab>.


      IF lv_xstr(2) = '424D'."BMP
        lt_data-name = lv_pkey && '.bmp'.
      ELSE.
        lt_data-name = lv_pkey && '.tif'.
      ENDIF.
      lt_data-type = 'image'.
      GET REFERENCE OF <lt_btab> INTO lt_data-dref.
      APPEND lt_data.


      SELECT SINGLE * FROM bdsphio3
        WHERE loio_id = gt_maps-docid+10.


      lv_html = lv_html && `<TR>` &&
                `<td style="BORDER-TOP: 1px solid; BORDER-RIGHT: 1px solid;` &&
                `BORDER-BOTTOM: 1px solid; BORDER-LEFT: 1px solid" nowrap>` &&
                gt_maps-tdname && `</td>` &&
                `<td style="BORDER-TOP: 1px solid; BORDER-RIGHT: 1px solid;` &&
                `BORDER-BOTTOM: 1px solid; BORDER-LEFT: 1px solid" nowrap>` &&
                bdsphio3-descript && `</td>` &&
                `<td style="BORDER-TOP: 1px solid; BORDER-RIGHT: 1px solid;` &&
                `BORDER-BOTTOM: 1px solid; BORDER-LEFT: 1px solid" nowrap>` &&
                `<img src="` && lt_data-name && `"></td> </tr>`.
    ENDIF.
  ENDLOOP.
  lv_html = lv_html && `</tbody></table> <br/> </html>`.


  cl_abap_browser=>show_html( title = '表格图形批量查看'
                              html_string = lv_html
                              data_table  = lt_data[] ).
ENDFORM.                    "view

8654a36b34667d1f71443f9bed53a081.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值