You are on page 1of 3

 

      经常会在报表中需要用到文件模板,比如新增和修改物料主数据、上传计划数据等等。而 user 经常会


因为找不到模板而对你进行各种骚扰。所以,何不直接把模板放在服务器上,并在报表上提供相应的按钮供 user
自行下载呢?下面就是介绍如何上载文件到 SAP 应用服务器上,并如何在报表中提供按钮给 user 自行下载。

首先,我们要通过 Tcode:CG3Z 将本地文件上传至服务其上;

服务器文件相关 Tcode:

CG3Y: 下载服务器上文件到前端

CG3Z:上传前端文件到服务器上

AL11: 查看服务器上目录和文件

其次,要在报表上通过相关的函数,将服务器文件下载到本地目录下;

上传和下载服务器文件相关函数:

Function group: C13Z (EHS:Uploading/Downloading Files)

Function Module:C13Z_FILE_DOWNLOAD_BINARY (下载服务器上文件到前端)

Function Module:C13Z_FILE_UPLOAD_BINARY  (上传前端文件到服务器上)

示例:

DATA: remote_file LIKE rcgfiletr-ftappl,   "服务器文件路径
        local_file LIKE rcgfiletr-ftfront.    "下载文件路径
  remote_file = '/NOTES/ZPP153.xlsx'.

  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      def_filename     = 'ZPP153 規格書.xlsx'
      mask             = '*.xlsx;*.xlss'
      mode             = 'S'
      title            = 'Download file'
    IMPORTING
      filename         = local_file
    EXCEPTIONS
      selection_cancel = 1
      OTHERS           = 2.
  IF sy-subrc = 0.
    CALL FUNCTION 'C13Z_FILE_DOWNLOAD_BINARY'
      EXPORTING
        i_file_front_end    = local_file
        i_file_appl         = remote_file
        i_file_overwrite    = 'X'
      EXCEPTIONS
        fe_file_open_error  = 1
        fe_file_exists      = 2
        fe_file_write_error = 3
        ap_no_authority     = 4
        ap_file_open_error  = 5
        ap_file_empty       = 6
        others              = 7.
    IF sy-subrc = 0.
      MESSAGE S004 WITH '下载成功:' local_file.
    ELSE.
      MESSAGE E004 WITH '下载失败!'.
    ENDIF.
  ELSEIF sy-subrc <> 1.
    MESSAGE E004 WITH '请选择正确的文件路径和名称!'.
  ENDIF.

————————————————

*** PDF 上传 SAP 服务器


*** GUI_download 都需要前台操作,接口无法调用

"将 OTF 转换 PDF 格式


DATA:len TYPE i,
g_bin_file TYPE xstring,
g_bin_file2 TYPE string,
g_bin_file3 TYPE string.

CALL FUNCTION 'CONVERT_OTF'


EXPORTING
format = 'PDF'
* MAX_LINEWIDTH = 132
* ARCHIVE_INDEX = ' '
* COPYNUMBER = 0
* ASCII_BIDI_VIS2LOG = ' '
* PDF_DELETE_OTFTAB = ' '
* PDF_USERNAME = ' '
* PDF_PREVIEW = ' '
* USE_CASCADING = ' '
IMPORTING
bin_filesize = len
bin_file = g_bin_file
TABLES
otf = otf_data
lines = lt_lines
* EXCEPTIONS
* ERR_MAX_LINEWIDTH = 1
* ERR_FORMAT = 2
* ERR_CONV_NOT_POSSIBLE = 3
* ERR_BAD_OTF = 4
* OTHERS = 5
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

DATA:g_dataset TYPE string.

" 定义 dataset 路径
CONCATENATE '/usr/sap/tmp/' p_belnr+2(10) '.PDF' INTO g_dataset. "addrss
OPEN DATASET g_dataset FOR OUTPUT IN BINARY MODE." MESSAGE L_MESSAGE_DB.
IF sy-subrc EQ 0.
TRANSFER g_bin_file TO g_dataset.
CLOSE DATASET g_dataset.
ELSE.
MESSAGE 'OPEN ERROR!!' TYPE 'E'.
STOP.
ENDIF.

*** 下载 SAP 服务器文件,16 进制转换为字符串

"调用影像接口
" 读取 dataset
CONCATENATE '/usr/sap/tmp/' gs_log-belnr '.PDF' INTO g_file.
OPEN DATASET g_file FOR INPUT IN BINARY MODE.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.

DATA:l_xstring TYPE xstring,


l_string TYPE string,
g_string TYPE string,
len TYPE i,
l_subrc TYPE sy-subrc.

CLEAR:g_string,l_xstring,l_string,l_subrc.
WHILE l_subrc = 0.
len = 0.
READ DATASET g_file INTO l_xstring ACTUAL LENGTH len.
l_subrc = sy-subrc.
CHECK len > 0.
l_string = l_xstring.
CONCATENATE g_string l_string INTO g_string.
ENDWHILE.
CLOSE DATASET g_file.

You might also like