SWM0学习笔记 模板文件的上传和下载

来源:互联网 发布:cmd打开端口的命令 编辑:程序博客网 时间:2024/05/01 05:46
 

SWM0上传模板文件到服务器和使用程序下载服务器上的模板文件代码

凭自己所学,记录下来的,如果有不对的地方请多多谅解和指导哈,各位大牛们。

1.       输入事务smw0码

 

选择下面的二进制,回车

2.填入包得名称,就是开发类,不写为本地保存,点执行按钮

 

 

3.点新建按钮,输入模板的名称和描述

 

点导入按钮,然后选择你要导入的文件模板(模板是自己定义好了的)

 

 

 

4.退出,再次进入到第3步的时候,就可以看到你新建的模板了

如果你的模板改了,想要覆盖他的话。选择他点如下按钮(导入按钮)

 

Se11到wwwdata数据库表里查看下,你的模板是否存在(检查下而已,呵呵)

 

好了,这里就可以把模板文件上传到服务器了!!

下面,我们写段代码,来把模板文件下载到本地来。

p_objid模板文件的名称 zhanghz.xls

fp_dest 文件的路径

FORM download_excel_template USING p_objid LIKE wwwdatatab-objid  fp_dest  LIKE sapb-sappfad.

  DATA:  lo_objdata LIKE wwwdatatab,

         ls_errtxt(40) TYPE c,

         li_rc LIKE sy-subrc,

         ls_destination  LIKE rlgrap-filename.

  SELECT SINGLE relid objid

  FROM wwwdata INTO CORRESPONDING FIELDS OF lo_objdata

  WHERE srtf2 = 0 AND relid = 'MI' AND objid = p_objid.

 

********检查表wwwdata中是否存在所指定的模板文件

  IF sy-subrc NE 0 OR lo_objdata-objid EQ space."如果不存在,则给出错误提示

    CONCATENATE '模板文件' p_objid '不存在' INTO ls_errtxt.

    MESSAGE ls_errtxt TYPE 'I'.

  ENDIF.

  ls_destination = fp_dest. "保存路径

*******如果存在,调用DOWNLOAD_WEB_OBJECT 函数下载模板到路径下,从服务器上下载模板文件

  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'

    EXPORTING

      key         = lo_objdata

      destination = ls_destination

    IMPORTING

      rc          = li_rc.

  IF li_rc NE 0.

    CONCATENATE '模板文件:' p_objid '下载失败' INTO ls_errtxt.

    MESSAGE ls_errtxt TYPE 'E'.

  ELSE.

    CONCATENATE  '模板文件下载成功' p_objid INTO ls_errtxt.

    MESSAGE ls_errtxt TYPE 'S'.

  ENDIF.

ENDFORM.                    "download_excel_template

 

下面贴出我自己写的一个代码模板,留着以后自己用到的时候直接copy

 

*&---------------------------------------------------------------------*

*& Report  ZHR0014

*&

*&---------------------------------------------------------------------*

*&create by zhanghz 2011.10.14

*&2003 直落转班导入报表

*&下载模板文件的另一形式

*&此程序可作为smw0上传模板文件的时候,下载服务器模板文件的程序

*&---------------------------------------------------------------------*

 

REPORT  zhr0014.

 

 

********业务数据的定义------------

TABLES: t100.

DATA: BEGIN OF i_list OCCURS 0,

      pernr LIKE pa0002-pernr,"人员编号

      begda LIKE pa2003-begda,"开始日期

      endda LIKE pa2003-endda,"结束日期

      tprog LIKE pa2003-tprog,"日工作计划

END OF i_list.

 

DATA: bdcdata1 LIKE bdcdata OCCURS 0 WITH HEADER LINE,"定义BDC内表

  msgtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE,"定义消息内表

  l_mstring(480).                               "消息字符串

***---------------------------------------------------------

 

**********模板数据定义*****************************************************

TABLES: sscrfields.

TYPE-POOLS : tpit.

DATA : it_errtab TYPE tpit_t_errdoc WITH HEADER LINE,

it_fldtab TYPE tpit_t_fname WITH HEADER LINE,

it_buztab TYPE tpit_t_buztab WITH HEADER LINE.

DATA: filetable TYPE filetable,

      rc TYPE i.

FIELD-SYMBOLS: <fs> TYPE ANY.

DATA: f_path LIKE rlgrap-filename.

DATA: file_path TYPE rlgrap-filename.

DATA: e_text TYPE string.

 

DATA: itab LIKE alsmex_tabline OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF v_tab OCCURS 10,

       filename TYPE text100,

      END OF v_tab.

DATA:  g_code TYPE sscrfields-ucomm.  "FUNCTION CODE

 

******************************************************************************

**********选择屏幕

SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME  TITLE text-001.

PARAMETERS: p_file(100) MODIF ID sc1 TYPE c .

SELECTION-SCREEN END OF BLOCK b01.

SELECTION-SCREEN PUSHBUTTON 2(9) p_butt2 USER-COMMAND pb02.

*********

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

  PERFORM objclsf4.

 

AT SELECTION-SCREEN.

  g_code = sscrfields-ucomm.

  PERFORM user_command USING g_code.

 

INITIALIZATION.

  p_butt2 = '下载模板'.

 

START-OF-SELECTION.

  IF f_path IS NOT INITIAL.

    PERFORM sub_upload_data_xls.

  ELSE .

    IF p_file IS NOT INITIAL.

      f_path = p_file.

      PERFORM sub_upload_data_xls.

    ELSE.

      MESSAGE e996(zfi) WITH  f_path .

    ENDIF.

  ENDIF.

****-----------------模板数据定义结束------------------------

 

***------------------业务方法处理-------------------------------

  PERFORM sub_update.

  PERFORM sub_writeout_log.

 

***-------------------业务方法处理结束--------------------------

 

 

*&---------------------------------------------------------------------*

*&      Form  sub_update

*&---------------------------------------------------------------------*

*       text 循环导入BDC数据

*----------------------------------------------------------------------*

FORM sub_update.

 

  LOOP AT i_list.

 

    PERFORM bdc_dynpro      USING 'SAPMP50A' '1000'.

    PERFORM bdc_field       USING 'BDC_OKCODE'

                                  '=INS'.

    PERFORM bdc_field       USING 'RP50G-PERNR'

                                  i_list-pernr.

    PERFORM bdc_field       USING 'RP50G-TIMR6'

                                  ''.

    PERFORM bdc_field       USING 'RP50G-TIMR1'

                                  'X'.

    PERFORM bdc_field       USING 'BDC_CURSOR'

                                  'RP50G-CHOIC'.

    PERFORM bdc_field       USING 'RP50G-CHOIC'

                                  '2003'.

    PERFORM bdc_dynpro      USING 'MP200000' '2100'.

    PERFORM bdc_field       USING 'BDC_CURSOR'

                                  'P2003-TPROG'.

    PERFORM bdc_field       USING 'BDC_OKCODE'

                                  '=UPD'.

    PERFORM bdc_field       USING 'P2003-BEGDA'

                                  i_list-begda.

    PERFORM bdc_field       USING 'P2003-ENDDA'

                                  i_list-endda.

    PERFORM bdc_field       USING 'P2003-VTART'

                                  'Z1'."i_list-VTART.

    PERFORM bdc_field       USING 'P2003-TPROG'

                                  i_list-tprog.

 

    CALL TRANSACTION 'PA30' USING bdcdata1 MODE 'N' MESSAGES INTO msgtab.

    CLEAR bdcdata1[]."注意清空

  ENDLOOP.

 

ENDFORM.                    "sub_update

 

*&---------------------------------------------------------------------*

*&      Form  user_command

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->UCOMM      text

*----------------------------------------------------------------------*

FORM user_command USING ucomm LIKE sy-ucomm.

 

  CASE ucomm.

    WHEN 'PB02'.

      PERFORM save_the_path_and_download.

*      PERFORM down_load_template USING  file_path.

  ENDCASE.

ENDFORM.                    "USER_COMMAND

 

*&---------------------------------------------------------------------*

*&      Form  save_the_path

*&---------------------------------------------------------------------*

*       text 保存文件路径

*----------------------------------------------------------------------*

FORM save_the_path_and_download .

  DATA: rc TYPE string,

        rc1 TYPE string,

        rc2 TYPE string.

  DATA: fname LIKE wwwdatatab-objid,"模板的名称

        fp_dest  LIKE sapb-sappfad."模板路径

****Call the file save dialog only showing XML

  CALL METHOD cl_gui_frontend_services=>file_save_dialog

     EXPORTING

*      WINDOW_TITLE            =

       default_extension       = '*.xls'

       default_file_name       = '转班模板' "下载excel模板的文件名

       file_filter             = 'xls (*.xls)|*.xls|'

*      INITIAL_DIRECTORY       =

    CHANGING

      filename                 = rc

      path                     = rc1

      fullpath                 = rc2   "文件的路径

    EXCEPTIONS

      cntl_error              = 1

      error_no_gui            = 2

      OTHERS                  = 3

          .

  file_path = rc2."模板的路径

  fname = 'ZDOWNLOAD.XLS'. "服务器模板文件名称

  fp_dest = file_path.

  IF rc2 = space.

    MESSAGE e001(zxy) WITH e_text. "不能打开excel文件

    EXIT.

  ENDIF.

  IF sy-subrc = 0.

    PERFORM download_excel_template USING fname fp_dest ."该函数针对smw0上传的模板进行下载

  ENDIF.

 

ENDFORM.                    " save_the_path

 

*&---------------------------------------------------------------------*

*&      Form  DOWNLOAD_EXCEL_TEMPLATE

*&---------------------------------------------------------------------*

*       text 下载服务器上的excel文件

*----------------------------------------------------------------------*

*      -->FP_OBJID   text

*      -->FP_DEST    text

*      -->ENDFORM    text

*----------------------------------------------------------------------*

FORM download_excel_template USING p_objid LIKE wwwdatatab-objid  fp_dest  LIKE sapb-sappfad.

  DATA:  lo_objdata LIKE wwwdatatab,

         ls_errtxt(40) TYPE c,

         li_rc LIKE sy-subrc,

         ls_destination  LIKE rlgrap-filename.

  SELECT SINGLE relid objid

  FROM wwwdata INTO CORRESPONDING FIELDS OF lo_objdata

  WHERE srtf2 = 0 AND relid = 'MI' AND objid = p_objid.

 

********检查表wwwdata中是否存在所指定的模板文件

  IF sy-subrc NE 0 OR lo_objdata-objid EQ space."如果不存在,则给出错误提示

    CONCATENATE '模板文件' p_objid '不存在' INTO ls_errtxt.

    MESSAGE ls_errtxt TYPE 'I'.

  ENDIF.

  ls_destination = fp_dest. "保存路径

*******如果存在,调用DOWNLOAD_WEB_OBJECT 函数下载模板到路径下,从服务器上下载模板文件

  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'

    EXPORTING

      key         = lo_objdata

      destination = ls_destination

    IMPORTING

      rc          = li_rc.

  IF li_rc NE 0.

    CONCATENATE '模板文件:' p_objid '下载失败' INTO ls_errtxt.

    MESSAGE ls_errtxt TYPE 'E'.

  ELSE.

    CONCATENATE  '模板文件下载成功' p_objid INTO ls_errtxt.

    MESSAGE ls_errtxt TYPE 'S'.

  ENDIF.

ENDFORM.                    "download_excel_template

 

*&---------------------------------------------------------------------*

*&      Form  objclsf4

*&---------------------------------------------------------------------*

*       text  文件打开对话框

*----------------------------------------------------------------------*

FORM objclsf4 .

  CLEAR filetable.

  CALL METHOD cl_gui_frontend_services=>file_open_dialog

     EXPORTING

*      WINDOW_TITLE            =

       default_extension       = '*.XLS|*.XLSX'

*      DEFAULT_FILENAME        =

       file_filter             = 'XLS (*.XLS)|*.XLS|XLSX (*.XLSX)|*.XLSX'

*      INITIAL_DIRECTORY       =

    CHANGING

      file_table              = filetable

      rc                      = rc

    EXCEPTIONS

      cntl_error              = 1

      error_no_gui            = 2

      OTHERS                  = 3

          .

 

  READ TABLE filetable INDEX 1 ASSIGNING <fs>.

  IF sy-subrc = 0.

    p_file = <fs>.

    UNASSIGN <fs>.

  ENDIF.

  IF NOT p_file IS INITIAL.

    f_path = p_file.

  ENDIF.

ENDFORM.                                                    " objclsf4

 

 

 

*&---------------------------------------------------------------------*

*&      Form  sub_upload_data_xls

*&---------------------------------------------------------------------*

*       text  读取excel文件

*----------------------------------------------------------------------*

FORM sub_upload_data_xls.

  DATA: i TYPE i ,   "开始的行

         j TYPE i ,   "一共多少列

         k TYPE i ,

   row TYPE i.

  DATA: max_row TYPE i.

 

  i = 2.

  j = 5.

  max_row = 2000. "导入excel最大的行

 

  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'

    EXPORTING

      filename                = f_path             "excel文件路径

      i_begin_col             = 1                  "开始的列数

      i_begin_row             = i                  "开始的行数

      i_end_col               = j                  "读取到的列数

      i_end_row               = max_row            "读取到的行数

    TABLES

      intern                  = itab            "存储的内表

    EXCEPTIONS

      inconsistent_parameters = 1

      upload_ole              = 2

      OTHERS                  = 3.

  IF sy-subrc <> 0.

    MESSAGE e990(zfi) WITH  f_path.

  ELSE.

    MESSAGE s999(zfi) WITH  f_path '成功'.

  ENDIF.

 

 

  DESCRIBE TABLE itab LINES row.

  READ TABLE itab INDEX row.

  row = itab-row.

  CLEAR itab.

 

*重置i的值,类似FOR循环

  i = 1.

  WHILE i <= row.

    LOOP AT itab  WHERE row = i.

      CASE itab-col.

        WHEN 1.

          i_list-pernr = itab-value.

        WHEN 2.

          i_list-begda = itab-value.

        WHEN 3.

          i_list-endda = itab-value.

        WHEN 4.

          i_list-tprog = itab-value.

      ENDCASE.

    ENDLOOP.

    APPEND  i_list.

    CLEAR i_list.

    i = i + 1.

  ENDWHILE.    "读取全部EXCEL数

ENDFORM.                    "sub_upload_data_xls

 

*&---------------------------------------------------------------------*

*&      Form  sub_writeout_log

*&---------------------------------------------------------------------*

*       text BDC写消息

*----------------------------------------------------------------------*

FORM sub_writeout_log.

  WRITE : / '消息类型', 20 '消息内容'.

  LOOP AT msgtab.

    SELECT SINGLE * FROM t100 WHERE sprsl = msgtab-msgspra

                           AND arbgb = msgtab-msgid

                           AND msgnr = msgtab-msgnr.

    IF sy-subrc = 0.

      l_mstring = t100-text.

      IF l_mstring CS '&1'.

        REPLACE '&1' WITH msgtab-msgv1 INTO l_mstring.

        REPLACE '&2' WITH msgtab-msgv2 INTO l_mstring.

        REPLACE '&3' WITH msgtab-msgv3 INTO l_mstring.

        REPLACE '&4' WITH msgtab-msgv4 INTO l_mstring.

      ELSE.

        REPLACE '&' WITH msgtab-msgv1 INTO l_mstring.

        REPLACE '&' WITH msgtab-msgv2 INTO l_mstring.

        REPLACE '&' WITH msgtab-msgv3 INTO l_mstring.

        REPLACE '&' WITH msgtab-msgv4 INTO l_mstring.

      ENDIF.

      CONDENSE l_mstring.

      WRITE: / msgtab-msgtyp, 20 l_mstring.

    ELSE.

      WRITE: / msgtab.

    ENDIF.

  ENDLOOP.

 

ENDFORM.                    "sub_writeout_log

 

*&---------------------------------------------------------------------*

*&      Form  bdc_dynpro

*&---------------------------------------------------------------------*

*       text BDC 2个重要的form

*----------------------------------------------------------------------*

*      -->PROGRAM    text

*      -->DYNPRO     text

*----------------------------------------------------------------------*

FORM bdc_dynpro USING program dynpro.

  CLEAR bdcdata1.

  bdcdata1-program = program.

  bdcdata1-dynpro   = dynpro.

  bdcdata1-dynbegin = 'X'.

  APPEND bdcdata1.

ENDFORM.                    "bdc_dynpro

*&---------------------------------------------------------------------*

*&      Form  bdc_field

*&---------------------------------------------------------------------*

*       text BDC 2个重要的form

*----------------------------------------------------------------------*

*      -->FNAM       text

*      -->FVAL       text

*----------------------------------------------------------------------*

FORM bdc_field USING fnam fval.

  CLEAR bdcdata1.

  bdcdata1-fnam = fnam.

  bdcdata1-fval = fval.

  APPEND bdcdata1.

ENDFORM.                    "bdc_field

 

原创粉丝点击