CBO TABLE管理文件上传下载

来源:互联网 发布:淘宝海报尺寸一般多大 编辑:程序博客网 时间:2024/05/05 10:04


首先创建2个表,一个HEAD,一个BODY

这是保存表头信息



这是以2进制形式保存文件数据的表



执行如下代码。


TABLES:ZFILEHEADZFILEDATASSCRFIELDS.
DATA GS_FHEAD  LIKE ZFILEHEAD,
       GT_FDATA  LIKE ZFILEDATA OCCURS WITH HEADER LINE.

*attache file
DATA BEGIN OF GT_UPTAB OCCURS 0,
         CONTENT(255TYPE X,
       END OF GT_UPTAB.

DATA :  GV_LENGTH  TYPE INT4,
        GV_FNAME   TYPE STRING,
        GV_FNAME2  TYPE STRING,
        GV_FTYPE   TYPE ZFILEHEAD-FILETYPE,
        GV_TEMP(120).


DATA:   GV_WORK_DIR TYPE STRING VALUE 'C:\Users\Bong\Desktop\',
        GV_CMD(128).

PARAMETERS P_CARRID TYPE S_CARR_ID OBLIGATORY,
             P_FNAME TYPE ZFILEHEAD-FILENAME.
SELECTION-SCREEN FUNCTION KEY 1.

INITIALIZATION.
  SSCRFIELDS-FUNCTXT_01 'Display file'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FNAME.

  DATA:   L_RC                TYPE VALUE 1,
          L_WINDOW_TITLE      TYPE STRING,
          LT_FILE_TABLE       TYPE FILETABLE,
          LS_FILE             TYPE FILE_TABLE.

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    EXPORTING
      WINDOW_TITLE   'Select file'
      FILE_FILTER    '*.*'
      MULTISELECTION SPACE
    CHANGING
      FILE_TABLE     LT_FILE_TABLE
      RC             L_RC.
  IF SY-SUBRC EQ 0.
    READ TABLE LT_FILE_TABLE INDEX INTO LS_FILE.
    P_FNAME LS_FILE-FILENAME.
  ENDIF.

  CLEARGT_UPTABGT_UPTAB[].
  GV_FNAME P_FNAME.
  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      FILENAME   GV_FNAME
      FILETYPE   'BIN'
    IMPORTING
      FILELENGTH GV_LENGTH
    TABLES
      DATA_TAB   GT_UPTAB.

START-OF-SELECTION.

*& file name
  CLEAR GV_TEMP.
  DO.
    SPLIT GV_FNAME AT '\' INTO GV_TEMP GV_FNAME.
    IF GV_FNAME EQ SPACE.
      GV_FNAME GV_TEMP.
      EXIT.
    ENDIF.
    IF SY-INDEX 100EXITENDIF.
  ENDDO.

*& file type
  CLEAR GV_TEMP.
  GV_FNAME2 GV_FNAME.
  DO.
    SPLIT GV_FNAME2 AT '.' INTO GV_TEMP GV_FNAME2.
    IF GV_FNAME2 EQ SPACE.
      GV_FNAME2 GV_TEMP.
      EXIT.
    ENDIF.
    IF SY-INDEX 100EXITENDIF.
  ENDDO.

  GV_FTYPE GV_FNAME2+0(3).
  TRANSLATE GV_FTYPE TO UPPER CASE.
*& Header
  GS_FHEAD-CARRID   P_CARRID.
  GS_FHEAD-FILENAME GV_FNAME.
  GS_FHEAD-FILETYPE GV_FTYPE.
  GS_FHEAD-LENGTH   GV_LENGTH.
  MODIFY ZFILEHEAD FROM GS_FHEAD.

*& Data.
  LOOP AT GT_UPTAB.
    GT_FDATA-CARRID P_CARRID.
    GT_FDATA-CONTENT GT_UPTAB-CONTENT.
    GT_FDATA-SEQ SY-TABIX.
    APPEND GT_FDATA.
  ENDLOOP.
  MODIFY ZFILEDATA FROM TABLE GT_FDATA.
  IF SY-SUBRC EQ 0.
    MESSAGE 'SUCCESS' TYPE 'S'.
  ELSE.
    MESSAGE 'ERROR' TYPE 'E'.
  ENDIF.


AT SELECTION-SCREEN.
  CHECK SSCRFIELDS-UCOMM 'FC01'.
  CLEAR GS_FHEADGT_FDATAGT_FDATA[].

*& Header
  SELECT SINGLE INTO GS_FHEAD FROM ZFILEHEAD
                 WHERE CARRID P_CARRID.
  IF SY-SUBRC NE 0.
    MESSAGE 'There is no file' TYPE 'E'.
  ENDIF.

*& detail
  SELECT INTO CORRESPONDING FIELDS OF TABLE GT_FDATA
           FROM ZFILEDATA
           WHERE CARRID P_CARRID.

  CLEARGT_UPTABGT_UPTAB[].

  SORT GT_FDATA BY SEQ.
  LOOP AT GT_FDATA.
    GT_UPTAB-CONTENT GT_FDATA-CONTENT.
    APPEND GT_UPTAB.
  ENDLOOP.

*& file PATH & name
  CONCATENATE GV_WORK_DIR  GS_FHEAD-FILENAME INTO GV_FNAME.

*& Download
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      BIN_FILESIZE GS_FHEAD-LENGTH
      FILENAME     GV_FNAME
      FILETYPE     'BIN'
    TABLES
      DATA_TAB     GT_UPTAB.

*& file run
  GV_CMD GV_FNAME.
  CALL FUNCTION 'GUI_RUN'
    EXPORTING
      COMMAND GV_CMD.


选择文件后上传。








当然 这是简单的举例。如有需要,我们可以修改主键,在实际应用中使用.

原创粉丝点击