加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

GUI_UPLOAD中文问题[转]

(2011-02-21 16:50:13)
标签:

杂谈

分类: ABAP-Basic

1. cl_gui_frontend_services类

这个类提供了很多对操作系统文件的操作,例如拷贝,列出文件名等等。这些方法和java里还有我写过的VBA里那些放都差不多,所以以后如果要有一些对文件的操作可以用这个类提供的静态方法。顺便说下TEST_FRONTEND_SERVICES在IDES是个范例程序可以在里面看看,不过只写了几个方法的运用。

2.WS_UPLOAD和GUI_UPLOAD

这两者的区别我就从今天碰到的一个问题里用现象去表明他们的区别吧,从底层代码看太痛苦了。我写了一个小的测试程序用来读取一个txt文本,再输出list中。txt文本是中文的。我分别用WS_UPLOAD和GUI_UPLOAD实现,发现怎样都实现不了,只能实现英文。我觉得这不可能了啊!装了Unicode不可能读不了中文的,后来在同事的提醒下用中文登陆系统程序就可以实现了!可是我觉得仍然不对,在英文系统下也应该能读中文,毕竟GUI和server都有Unicode,在参数列表里我发现了code page这个参数,于是我加上code page = '8400' 。呵呵,终于发现可以在英文登陆状态下上传中文文本了,不过使用WS_UPLOAD仍然不能上传中文,而GUI_UPLOAD此时就可以。

我又查阅了相关资料果然,WS_UPLOAD是一个要被GUI_UPLOAD替代的funtion,所以以后写程序就都用GUI_UPLOAD就好了。

3.调用GUI_UPLOAD的两种方式

GUI_UPLOAD虽然是cl_gui_frontend_services类的静态方法但是也可以用function的方法调用!SAP估计将某些静态方法封装了一层所以就可以用调用函数的方式调用GUI_UPLOAD方法。我又测试了下GUI_DOWNLOAD和GET_WINDOWS_DIRECTORY,不过只有GUI_DOWNLOAD可以用函数调用。看来不是所有的静态方法都可以用函数调用。下面的代码提供了一个简单的调用GUI_UPLOAD的代码:

  datafilename type string VALUE 'd:ToolsReadme.txt'.

TYPESbegin of itab,
      fl1(300 type c,
end of itab.

DATAdata_tab type STANDARD TABLE OF itab,
      wa_tab LIKE LINE OF data_tab.

  call method cl_gui_frontend_services=>gui_upload
         exporting
              filename                filename
              filetype                'ASC'
              codepage                '8400'
         changing
              data_tab                data_tab
         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.

LOOP AT data_tab INTO wa_tab.
  WRITE:/ wa_tab-fl1.
ENDLOOP.

经测试读取中文文档是没有问题的,但是filetype是不能设置为BIN。

4.分享小程序

这是在SDN上查找资料的过程中发现的,觉得比较有启发的程序。完成的功能是打开一个对话框,选择多个文件,接着将这些文件名打印输出。程序如下:

  SELECT-OPTIONS: so_file FOR file_table NO INTERVALS.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_file-low.

  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
   WINDOW_TITLE            =
   DEFAULT_EXTENSION     =
   DEFAULT_FILENAME        =
   FILE_FILTER             =
      initial_directory       'e:study'
      multiselection          'X'
    CHANGING
      file_table                      lt_file_names[]
      rc                                 lv_subrc
   USER_ACTION             =
    EXCEPTIONS
      file_open_dialog_failed 1
      cntl_error                        2
      error_no_gui                    3
      OTHERS                                 4.
  IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  so_file-sign 'I'.
  so_file-option 'EQ'.

  LOOP AT lt_file_names INTO lwa_file_name.
    so_file-low lwa_file_name.
    APPEND so_file.
  ENDLOOP.

START-OF-SELECTION.
  LOOP AT so_file.
    WRITEso_file-low.
  ENDLOOP.

转自:http://blog.csdn.net/donkey2004112103/archive/2008/10/27/3159854.aspx

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有