本地文件和服务器文件互传

本文转自barry的博客(http://blog.chinaunix.net/space.php?uid=8527621&do=blog&id=2030165),内容有所改进,修改了部分bug.

TABLESsscrfields.
DATA:   serverfile(100,
        file(80),
        router(120).
*   定义屏幕字段内表,用来存储字段和其值
DATA    dyfields LIKE dynpread OCCURS WITH HEADER LINE.

*   定义两个pushbutton 对应的crl+f1 crl+f2.
SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN FUNCTION KEY 2.

PARAMETERSp_file LIKE rcgfiletr-ftfront OBLIGATORY LOWER CASE ,"  本地文件路径和文件名
            p_serv LIKE rcgfiletr-ftappl OBLIGATORY."服务器文件路径和文件名

PARAMETERS p_over LIKE bapistdtyp-boolean.

INITIALIZATION.
* 初始化服务器文件路径
  CALL 'C_SAPGPARAM' ID 'NAME'  FIELD 'DIR_TEMP'
                     ID 'VALUE' FIELD serverfile.
  CONCATENATE serverfile '\' INTO serverfile.
  p_serv serverfile.

*  push button的label
  sscrfields-functxt_01 '上载到服务器'.
  sscrfields-functxt_02 '从服务器下载'.

*   F4 ON field p_file
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
*   File selected 对话框
  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name  syst-cprog
      dynpro_number syst-dynnr
      field_name    ' '
    IMPORTING
      file_name     p_file."文件路径和文件名

*   获取文件名
  CALL FUNCTION 'SO_SPLIT_FILE_AND_PATH'
    EXPORTING
      full_name     p_file
    IMPORTING
      stripped_name file
    EXCEPTIONS
      x_error       1
      OTHERS        2.

  CLEAR:dyfieldsdyfields[].

*   给屏幕字段P_SERV 赋值
  dyfields-fieldname 'P_SERV'.
  CONCATENATE serverfile file INTO dyfields-fieldvalue.
  APPEND dyfields.
*   更新屏幕字段和值
  CALL FUNCTION 'DYNP_VALUES_UPDATE'
    EXPORTING
      dyname     sy-cprog "当前程序
      dynumb     sy-dynnr "当前屏幕
    TABLES
      dynpfields dyfields.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_serv.
  CLEARdyfields[]dyfieldsrouter.
  dyfields-fieldname 'P_SERV'.
  APPEND dyfields.
*   读取屏幕上field的值
  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      dyname     sy-cprog
      dynumb     sy-dynnr
    TABLES
      dynpfields dyfields.

  READ TABLE dyfields INDEX 1.

*   获取文件路径
  CALL FUNCTION 'SO_SPLIT_FILE_AND_PATH'
    EXPORTING
      full_name     dyfields-fieldvalue
    IMPORTING
*      stripped_name = file
      file_path     router
    EXCEPTIONS
      x_error       1
      OTHERS        2.


*   File selected 对话框
  CALL FUNCTION '/SAPDMC/LSM_F4_SERVER_FILE'
    EXPORTING
      directory        router
      filemask         ' '
    IMPORTING
      serverfile       serverfile
    EXCEPTIONS
      canceled_by_user 1
      OTHERS           2.
*  CONCATENATE serverfile '\' INTO serverfile .
  p_serv serverfile.

AT SELECTION-SCREEN.
  CASE sy-ucomm " SY-DYNNR SSCRFIELDS-UCOMM
    WHEN 'FC01'.
      CALL FUNCTION 'C13Z_FILE_UPLOAD_BINARY'
        EXPORTING
          i_file_front_end   p_file
          i_file_appl        p_serv
          i_file_overwrite   p_over
        EXCEPTIONS
          fe_file_not_exists 1
          fe_file_read_error 2
          ap_no_authority    3
          ap_file_open_error 4
          ap_file_exists     5
          OTHERS             6.
      IF sy-subrc <> 0.
        CASE sy-subrc.
          WHEN 1.
            MESSAGE e000(ooWITH '本地文件不存在'.
          WHEN 2.
            MESSAGE e000(ooWITH '读取本地文件错误'.
          WHEN 3.
            MESSAGE e000(ooWITH '没有服务器上载权限'.
          WHEN 4.
            MESSAGE e000(ooWITH '服务器文件打开错误'.
          WHEN 5.
            MESSAGE e000(ooWITH '服务器上此文件已存在'.
          WHEN OTHERS.
            MESSAGE e000(ooWITH '不知道什么错误,反正是出错了'.
        ENDCASE.
      ELSE.
        MESSAGE s000(ooWITH '上传完毕!'.
      ENDIF.
    WHEN 'FC02'.
      CALL FUNCTION 'C13Z_FILE_DOWNLOAD_BINARY'
        EXPORTING
          i_file_front_end    p_file
          i_file_appl         p_serv
          i_file_overwrite    p_over
        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.
        CASE sy-subrc.
          WHEN 1.
            MESSAGE e000(ooWITH '本地文件打开错误'.
          WHEN 2.
            MESSAGE e000(ooWITH '本地文件已存在'.
          WHEN 3.
            MESSAGE e000(ooWITH '写本地文件出错,可能是这个路径不让写'.
          WHEN 4.
            MESSAGE e000(ooWITH '没有服务器下载权限'.
          WHEN 5.
            MESSAGE e000(ooWITH '服务器文件打开错误'.
          WHEN 6.
            MESSAGE e000(ooWITH '服务器上文件为空'.
          WHEN OTHERS.
            MESSAGE e000(ooWITH '不知道什么错误,反正是出错了'.
        ENDCASE.
      ELSE.
        MESSAGE s000(ooWITH '下载完毕!'.
      ENDIF.
  ENDCASE.

START-OF-SELECTION.
  MESSAGE s000(ooWITH '点旁边那两个按钮,别点我!'.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值