*&---------------------------------------------------------------------*
*& Report Y_ABC_FILE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT Y_ABC_FILE.
DATA: GT_FILENAME TYPE FILETABLE.
DATA: GS_FILENAME TYPE FILE_TABLE.
DATA: GV_SUBRC01 TYPE SY-SUBRC.
DATA: GT_BIN TYPE SRM_T_BINTAB. " SRM_T_BINTAB 二进制表
"文件名
DATA: GV_FILE_FULL TYPE CHAR255. " 文件名字 char255
DATA: GV_FILE_ALL TYPE CHAR255.
DATA: GV_FILE_ADD TYPE CHAR10.
DATA: GV_FILE_LEN TYPE I.
START-OF-SELECTION.
PERFORM FRM_SHOW_FILE_SELECT.
CHECK NOT GV_FILE_FULL IS INITIAL.
PERFORM FRM_ADD_ATTACHMENT.
PERFORM FRM_UCOMM_9100_FJ_DOWN USING GV_FILE_ALL.
*&---------------------------------------------------------------------*
*& Form FRM_SHOW_FILE_SELECT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SHOW_FILE_SELECT .
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
INITIAL_DIRECTORY = 'C:'
MULTISELECTION = 'X'
CHANGING
FILE_TABLE = GT_FILENAME
RC = GV_SUBRC01
* USER_ACTION =
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
OTHERS = 4.
READ TABLE GT_FILENAME INTO GS_FILENAME INDEX 1.
IF SY-SUBRC EQ 0.
GV_FILE_FULL = GS_FILENAME-FILENAME.
TRANSLATE GV_FILE_FULL TO UPPER CASE.
ENDIF.
ENDFORM. "FRM_SHOW_FILE_SELECT
*&---------------------------------------------------------------------*
*& Form FRM_ADD_ATTACHMENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_ADD_ATTACHMENT .
DATA LV_FNAME TYPE STRING.
DATA LV_EXTENSTION TYPE C LENGTH 255 .
CONDENSE GV_FILE_FULL .
LV_FNAME = GV_FILE_FULL.
"转化为二进制table
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD
EXPORTING
FILENAME = LV_FNAME
FILETYPE = 'BIN'
IMPORTING
FILELENGTH = GV_FILE_LEN
CHANGING
DATA_TAB = GT_BIN
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
OTHERS = 17.
IF SY-SUBRC <> 0.
ENDIF.
"获取文件名(不含路径)
CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH'
EXPORTING
FULL_NAME = LV_FNAME
IMPORTING
STRIPPED_NAME = GV_FILE_ALL
EXCEPTIONS
X_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
ENDIF.
" "获取后缀名
CALL FUNCTION 'TRINT_FILE_GET_EXTENSION'
EXPORTING
FILENAME = GV_FILE_ALL
IMPORTING
EXTENSION = GV_FILE_ADD.
IF SY-SUBRC <> 0.
ENDIF.
CONDENSE GV_FILE_ADD NO-GAPS.
ENDFORM. "FRM_ADD_ATTACHMENT
*&---------------------------------------------------------------------*
*& Form FRM_UCOMM_9100_FJ_DOWN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_UCOMM_9100_FJ_DOWN USING PV_NAME.
DATA: LV_TITLE TYPE STRING,
LV_FOLDER TYPE STRING,
LV_FILENAME TYPE STRING.
DATA: LT_TAB TYPE SBDST_CONTENT,
LS_TAB LIKE LINE OF LT_TAB.
LV_TITLE = TEXT-202. "选择路径
* 取目录
CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_BROWSE
EXPORTING
WINDOW_TITLE = LV_TITLE
CHANGING
SELECTED_FOLDER = LV_FOLDER
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC = 0.
* 下载文件
CLEAR LV_FILENAME.
CONCATENATE LV_FOLDER '\' PV_NAME INTO LV_FILENAME.
REFRESH: LT_TAB[].
CLEAR LS_TAB.
DATA: LV_LINE TYPE I. " 流文件 长度
DATA: LV_OPT TYPE I. " 流文件 1022 分割位置
DATA: LV_DIV TYPE I. " 流文件 1022 莫 = 11
DATA: LV_MOD TYPE I. " 流文件 1022 余 = 909
DATA: LV_ZZLINE TYPE EDOC_FILE. " 流 格式 RAWSTRING 文档内容
* SELECT SINGLE ZZLINE INTO LV_ZZLINE FROM ZFITDQ10370
* WHERE ZZID = PV_ZZID.
LV_LINE = XSTRLEN( LV_ZZLINE ). " 长度
LV_MOD = LV_LINE MOD 1022.
LV_DIV = LV_LINE DIV 1022.
IF LV_DIV = 0.
LS_TAB-LINE = LV_ZZLINE+0(LV_MOD).
APPEND LS_TAB TO LT_TAB.
CLEAR: LS_TAB.
ELSE.
DO LV_DIV TIMES.
LV_OPT = ( SY-INDEX - 1 ) * 1022.
LS_TAB-LINE = LV_ZZLINE+LV_OPT(1022).
APPEND LS_TAB TO LT_TAB.
CLEAR: LS_TAB.
ENDDO.
IF LV_MOD NE 0.
LV_OPT = LV_OPT + 1022.
LS_TAB-LINE = LV_ZZLINE+LV_OPT(LV_MOD).
APPEND LS_TAB TO LT_TAB.
CLEAR: LS_TAB.
ENDIF.
ENDIF.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = LV_FILENAME
FILETYPE = 'BIN'
TABLES
DATA_TAB = LT_TAB
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22.
IF SY-SUBRC <> 0.
ENDIF.
ENDIF.
ENDFORM. " FRM_UCOMM_9100_FJ_DOWN
ABAP-附件上传及下载
于 2019-06-12 08:57:55 首次发布