SAP-ABAP:一篇教你所有ABAP相关文件处理的程序示例与场景


前言

要使本章中的所有示例都能正常运行,必须满足以下要求: 桌面 Office 集成 (DOI) 和对象链接与嵌入 (OLE): 本章中显示的大多数示例都需要安装 Microsoft Office 软件包。


提示:以下是本篇文章正文内容,下面案例可供参考

使用 gui_upload 从本地电脑读取文件

文件处理层面上分为两层:
在本地电脑环境工作交互:
1.一般只有两种:文件上传,文件下载
常用的FM如:
GUI_DOWNLOAD 下载
GUI_UPLOAD 上载

在SAP服务器上做文件处理:
打开数据集 命令:
OPEN DATASET 打开文件
CLOSE DATASET 关闭
DELETE DATASET 删除
READ DATASET 读
TRANSFER 写记录

AL11事务代码,可以查看SAP系统内的 文件


示例操作:

"上传文件
"首先定义一个输入口,选择屏幕创建
PARAMETERS: p_file TYPE localfile.

在这里插入图片描述此时 屏幕显示效果如上图,很显然不是特别方便。因为我们在上传文件时,并不能让用户自己手输文件地址,所以这里我们需要加一个F4help 作为点击事件,

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

  CALL FUNCTION 'F4_FILENAME'
   EXPORTING
     PROGRAM_NAME        = SYST-CPROG
     DYNPRO_NUMBER       = SYST-DYNNR
     FIELD_NAME          = ' '
   IMPORTING
     FILE_NAME           = p_file

在这里插入图片描述点击按钮
在这里插入图片描述在这里插入图片描述


完整代码

"上传文件
TYPES: BEGIN OF lty_data,
         eid(10)  TYPE n,
         name(40) TYPE c,
       END OF lty_data.
DATA : lt_data TYPE TABLE OF lty_data.

DATA: lv_file TYPE string.


"首先定义一个输入口,选择屏幕创建
PARAMETERS: p_file TYPE localfile.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  "该函数将桌面的文件地址传给p_file
  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name  = syst-cprog
      dynpro_number = syst-dynnr
      field_name    = ' '
    IMPORTING
      file_name     = p_file.

START-OF-SELECTION.

  lv_file = p_file.
  "点击执行,上传文件
  "要注意文件类型 string char


  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      filename                = lv_file
*     FILETYPE                = 'ASC'
      has_field_separator     = 'X'    "是否有分隔符
*     HEADER_LENGTH           = 0
*     READ_BY_LINE            = 'X'
*     DAT_MODE                = ' '
*     CODEPAGE                = ' '
*     IGNORE_CERR             = ABAP_TRUE
*     REPLACEMENT             = '#'
*     CHECK_BOM               = ' '
*     VIRUS_SCAN_PROFILE      =
*     NO_AUTH_CHECK           = ' '
*     IMPORTING
*     FILELENGTH              =
*     HEADER                  =
    TABLES
      data_tab                = lt_data  "根据文件,会相应生成对应的结构内表,需要定义
*    changing
*     isscanperformed         = ' '
    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.  
  IF sy-subrc <> 0.  
* Implement suitable error handling here


  ENDIF.  

面向对象的示例代码:

CLASS lcl_demo DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS main.
ENDCLASS.

CLASS lcl_demo IMPLEMENTATION.
  METHOD main.
    DATA: lv_filepath TYPE string.
    DATA: lt_data TYPE TABLE OF string.

    DATA: lt_filetable TYPE filetable.
    DATA: lv_filetable TYPE file_table.
    DATA: lv_rc TYPE i.

    CALL METHOD cl_gui_frontend_services=>file_open_dialog
      CHANGING
        file_table              = lt_filetable
        rc                      = lv_rc
      EXCEPTIONS
        file_open_dialog_failed = 1
        cntl_error              = 2
        error_no_gui            = 3
        not_supported_by_gui    = 4
        OTHERS                  = 5.

    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      RETURN.
    ELSEIF lv_rc < 1.
      MESSAGE 'No File choosen' TYPE 'W'.
      RETURN.
    ENDIF.

    READ TABLE lt_filetable INTO lv_filepath INDEX 1.

    CALL METHOD cl_gui_frontend_services=>gui_upload
      EXPORTING
        filename = lv_filepath
      CHANGING
        data_tab = lt_data
      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
       not_supported_by_gui    = 17
       error_no_gui            = 18
       others                  = 19
      .

    IF sy
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值