如何利用 ABAP 进行文件的上传与下载

通常,每当我们在ABAP中处理文件时,我们都会处理驻留在SAP NetWeaver AS ABAP主机上可访问的某个目录中的文件。但是,有时我们会遇到需要从 SAP GUI 表示层客户端上传或下载文件的情况。这种远程传输是使用 RFC 协议实现的。

类 CL_GUI_FRONTEND_SERVICES 提供了许多与 SAP GUI 前端接口的有用方法。下图包含一个 UML 类图,该类图显示了一些可用于处理前端客户端上的文件和目录的方法。您可以在类生成器中可用于此类的类文档中找到有关这些方法的详细信息。

下载文件

若要下载文件,请使用方法 CL_GUI_FRONTEND_SERVICES⇒GUI_DOWNLOAD

ABAP 复制代码
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
    EXPORTING
      FILENAME                  = FULLPATH
      FILETYPE                  = 'DAT'
    CHANGING
      DATA_TAB                  = itab

您还可以使用功能模块 GUI_DOWNLOAD:

ABAP 复制代码
CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      bin_filesize            = l_filesize
      filename                = l_filename
      filetype                = 'BIN'
    TABLES
      data_tab                = ltbl_pdf
    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.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

文件上传

若要上传文件,请使用方法 CL_GUI_FRONTEND_SERVICES⇒GUI_UPLOAD

ABAP 复制代码
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD
    EXPORTING
      FILENAME                  = FULLPATH
      FILETYPE                  = 'DAT'
    CHANGING
      DATA_TAB                  = itab

例如:

ABAP 复制代码
*DATA DECLARATION for GUI_DOWNLOAD.
 DATA : lv_filename type STRING.
lv_filename = file.
CONSTANTS: LV_FILETYPE TYPE CHAR10 VALUE 'ASC'.
 CALL FUNCTION 'GUI_DOWNLOAD'
  EXPORTING
    FILENAME                        = lv_filename
    FILETYPE                        = 'ASC'
    CODEPAGE                        = 'IBM'
  TABLES
    DATA_TAB                        = DATA_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.
file = lv_filename.

您也可以使用功能模块 GUI_UPLOAD

ABAP 复制代码
DATA : lv_filename type STRING.

lv_filename = file.

CONSTANTS: LV_FILETYPE TYPE CHAR10 VALUE 'ASC'.

CALL FUNCTION 'GUI_UPLOAD'
	EXPORTING
       FILENAME              = lv_filename
       FILETYPE              = 'DAT'
       CODEPAGE              = 'IBM'
    TABLES
       DATA_TAB             = data_tab
	EXCEPTIONS
       FILE_OPEN_ERROR               = 1
       FILE_READ_ERROR               = 2
       NO_BATCH                      = 3
       GUI_REFUSE_FILETRANSFER       = 4
       INVALID_TYPE                  = 5
       NO_AUTHORITY                  = 6
       UNKNOWN_ERROR                 = 7
       BAD_DATA_FORMAT               = 8
       HEADER_NOT_ALLOWED            = 9
       SEPARATOR_NOT_ALLOWED         = 10
       HEADER_TOO_LONG               = 11
       UNKNOWN_DP_ERROR              = 12
       ACCESS_DENIED                 = 13
       DP_OUT_OF_MEMORY              = 14
       DISK_FULL                     = 15
       DP_TIMEOUT                    = 16
       OTHERS                        = 17.
file = lv_filename.

打开对话框显示

方法:CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG

功能模块:WS_FILENAME_GET 或者 F4_FILENAME

保存对话框显示

若要显示"保存文件"对话框,请使用方法 CL_GUI_FRONTEND_SERVICES⇒FILE_SAVE_DIALOG

ABAP 复制代码
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
    CHANGING
      FILENAME             = FILENAME
      PATH                 = PATH
      FULLPATH             = FULLPATH
    EXCEPTIONS
      CNTL_ERROR           = 1
      ERROR_NO_GUI         = 2
      NOT_SUPPORTED_BY_GUI = 3
      OTHERS               = 4

复制到剪贴板

若要将数据复制到剪贴板,请使用方法 cl_gui_frontend_services⇒clipboard_export

ABAP 复制代码
DATA lit_char10 TYPE STANDARD TABLE OF char10 .
APPEND 'ABCDEFG' TO lit_char10.
DATA l_return TYPE i.

CALL METHOD cl_gui_frontend_services=>clipboard_export
  IMPORTING
    data = lit_char10
  CHANGING
    rc   = l_return.

检查文件是否存在

  • 功能模块:DX_FILE_EXISTENCE_CHECK

  • 方法:CL_GUI_FRONTEND_SERVICES=>FILE_EXIST

选择目录

方法:CL_GUI_FRONTEND_SERVICES=>DIRECTORY_BROWSE

相关推荐
逐·風37 分钟前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
Devil枫1 小时前
Vue 3 单元测试与E2E测试
前端·vue.js·单元测试
尚梦2 小时前
uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)
前端·小程序·uni-app
GIS程序媛—椰子2 小时前
【Vue 全家桶】6、vue-router 路由(更新中)
前端·vue.js
前端青山3 小时前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js
毕业设计制作和分享3 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
清灵xmf5 小时前
在 Vue 中实现与优化轮询技术
前端·javascript·vue·轮询
大佩梨5 小时前
VUE+Vite之环境文件配置及使用环境变量
前端
GDAL5 小时前
npm入门教程1:npm简介
前端·npm·node.js
小白白一枚1116 小时前
css实现div被图片撑开
前端·css