ZBCC0005-upload/download xml file form server-SE38(I類型)

*&---------------------------------------------------------------------*
*& Include ZBCC0005
*  upload/download xml file form server
*&---------------------------------------------------------------------*

*
DATA: %t_files LIKE STANDARD TABLE OF eps2fili WITH HEADER LINE.

DATA: %t_xml_file TYPE TABLE OF string.

DATA: %g_xml_error_msg LIKE bapiret2-message.

DATA: %g_upload_file TYPE string.

DATA: %g_filename TYPE string.  "EIP欄位名稱


************************
*&---------------------------------------------------------------------*
*& Form UPLOAD_XML_FROM_SERVER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM upload_xml_from_server  TABLES ft_tab
                              USING f_path
                                    f_msg.

  DATA: l_file    LIKE LINE OF %t_xml_file.
  DATA: l_string TYPE string.
  DATA: l_xml    TYPE REF TO cl_xml_document.
  DATA: l_subrc  TYPE sysubrc.

*****
  REFRESH: %t_xml_file, ft_tab.
  CLEAR: f_msg, %g_upload_file.


  OPEN DATASET f_path
       FOR INPUT
       IN TEXT MODE ENCODING DEFAULT.

  IF sy-subrc <> 0.
    f_msg = 'Open file Error!'.
    RETURN.
  ENDIF.

  DO.
    READ DATASET f_path INTO l_file.
    IF sy-subrc = 0.
      APPEND l_file TO %t_xml_file.

      IF l_string IS INITIAL.
        l_string = l_file.
      ELSE.
        l_string = l_string && l_file.
      ENDIF.
    ELSE.
      EXIT.
    ENDIF.
  ENDDO.
  CLOSE DATASET f_path.

  %g_upload_file = f_path.

  CREATE OBJECT l_xml.

*  CALL METHOD l_xml->parse_table
*    EXPORTING
*      table   = %t_xml_file
**     size    = 0
*    RECEIVING
*      retcode = l_subrc.


  CALL METHOD l_xml->parse_string
    EXPORTING
      stream  = l_string
    RECEIVING
      retcode = l_subrc.


* Convert XLM to Internal table
  CALL METHOD l_xml->get_data
  "  EXPORTING
  "   NAME       = 'DATA'
    IMPORTING
      retcode    = l_subrc
    CHANGING
      dataobject = ft_tab[].
  IF l_subrc <> 0.
    f_msg = 'Convert XML Error!'.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form UPLOAD_XML_FROM_SERVER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM open_dataset   USING f_path
                            f_msg.


  OPEN DATASET f_path
  FOR INPUT
  IN TEXT MODE ENCODING DEFAULT.

  IF sy-subrc <> 0.
    f_msg = 'Open file Error!'.
    RETURN.
  ENDIF.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form UPLOAD_XML_FROM_SERVER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM  convert_xml  TABLES ft_tab
                     USING f_path
                           f_msg.

  DATA: l_file    LIKE LINE OF %t_xml_file.
  DATA: l_string TYPE string.
  DATA: l_xml    TYPE REF TO cl_xml_document.
  DATA: l_subrc  TYPE sysubrc.

*****
  REFRESH: %t_xml_file, ft_tab.
  CLEAR: f_msg, %g_upload_file.



  DO.
    READ DATASET f_path INTO l_file.
    IF sy-subrc = 0.
      APPEND l_file TO %t_xml_file.

      IF l_string IS INITIAL.
        l_string = l_file.
      ELSE.
        l_string = l_string && l_file.
      ENDIF.
    ELSE.
      EXIT.
    ENDIF.
  ENDDO.
  CLOSE DATASET f_path.

  %g_upload_file = f_path.

  CREATE OBJECT l_xml.

*  CALL METHOD l_xml->parse_table
*    EXPORTING
*      table   = %t_xml_file
**     size    = 0
*    RECEIVING
*      retcode = l_subrc.


  CALL METHOD l_xml->parse_string
  EXPORTING
    stream  = l_string
    RECEIVING
    retcode = l_subrc.


* Convert XLM to Internal table
  CALL METHOD l_xml->get_data
  "  EXPORTING
  "   NAME       = 'DATA'
  IMPORTING
    retcode    = l_subrc
  CHANGING
    dataobject = ft_tab[].
  IF l_subrc <> 0.
    f_msg = 'Convert XML Error!'.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  OUTBOUND_BY_FOLDER_XML
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM outbound_by_folder_xml  TABLES ft_data
                              USING f_target_file
                                    f_code
                                    f_msg.

  DATA: l_xml  TYPE REF TO cl_xml_document.
  DATA: l_retcode TYPE sysubrc,
        l_stream  TYPE xstring,
        l_size    TYPE sytabix.

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

  CHECK ft_data[] IS NOT INITIAL.

  CREATE OBJECT l_xml.
  CALL METHOD l_xml->create_with_data( dataobject = ft_data[] ).

* SET ENCODING
  CALL METHOD l_xml->set_encoding
    EXPORTING
      charset = f_code.      "'UTF-8'.

  CALL METHOD l_xml->render_2_xstring
    EXPORTING
      pretty_print = 'X'
    IMPORTING
      retcode      = l_retcode
      stream       = l_stream
      size         = l_size.

****** 將資料搬到 folder

  PERFORM move_xstring_to_folder USING l_stream
                                       f_target_file
                                       f_msg.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form MOVE_XML_TO_FOLDER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> P_
*&---------------------------------------------------------------------*
FORM move_xml_to_folder  USING    f_target_file
                                   f_msg.



  DATA: l_file LIKE LINE OF %t_xml_file.

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

  OPEN DATASET f_target_file
         FOR OUTPUT
         IN TEXT MODE ENCODING DEFAULT
         .
  IF sy-subrc <> 0.
    f_msg = 'Open file Error!'.
    RETURN.
  ENDIF.


  LOOP AT %t_xml_file INTO l_file.
    TRANSFER l_file TO f_target_file.
  ENDLOOP."LOOP AT %t_xml_file

  CLOSE DATASET f_target_file.

  IF  %g_upload_file IS NOT INITIAL.
    DELETE DATASET  %g_upload_file.
  ENDIF.

  CLEAR: %g_upload_file.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_FILE_LIST_FROM_SERVER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> T_LIST
*&      --> P_UPLOAD
*&---------------------------------------------------------------------*
FORM get_file_list_from_server  TABLES ft_list
                                 USING  f_folder_path.

  DATA: l_dir_name      TYPE eps2filnam.
  DATA: lt_files_import TYPE edocl_dirlist_tab  .

  l_dir_name = f_folder_path.

  CALL FUNCTION 'EDOCL_GET_DIR_FILELIST'
    EXPORTING
      dirname      = l_dir_name
      filenm       = ''
      pattern      = ''
    IMPORTING
      file_list    = lt_files_import
    EXCEPTIONS
      access_error = 1
      OTHERS       = 2.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

  LOOP AT lt_files_import INTO DATA(lw).
    IF lw-name = '.' OR lw-name = '..' OR lw-name = 'BACKUP' OR lw-name = 'ERROR'  .
      CONTINUE.
    ENDIF.
    MOVE-CORRESPONDING lw TO ft_list.
    APPEND ft_list.
    CLEAR lw.
  ENDLOOP.


  "" 下列Funtion有多個權限檢查
*  CALL FUNCTION 'EPS2_GET_DIRECTORY_LISTING'
*    EXPORTING
*      iv_dir_name            = l_dir_name
**     FILE_MASK              = ' '
** IMPORTING
**     DIR_NAME               =
**     FILE_COUNTER           =
**     ERROR_COUNTER          =
*    TABLES
*      dir_list               = ft_list
*    EXCEPTIONS
*      invalid_eps_subdir     = 1
*      sapgparam_failed       = 2
*      build_directory_failed = 3
*      no_authorization       = 4
*      read_directory_failed  = 5
*      too_many_read_errors   = 6
*      empty_directory_list   = 7
*      OTHERS                 = 8.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form MOVE_XSTRING_TO_FOLDER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM move_xstring_to_folder  USING f_xstring
                                   f_target_file
                                   f_msg.

  OPEN DATASET f_target_file
         FOR OUTPUT
         IN BINARY MODE.
  IF sy-subrc <> 0.
    f_msg = 'Open file Error!'.
    RETURN.
  ENDIF.

  TRANSFER f_xstring TO f_target_file.


  CLOSE DATASET f_target_file.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form MOVE_TEXT_TO_FOLDER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM move_text_to_folder TABLES pt_txt
                          USING f_target_file
                                f_msg.

  OPEN DATASET f_target_file
         FOR OUTPUT
         IN TEXT MODE ENCODING DEFAULT
*         IN TEXT MODE ENCODING UTF-8
         .
  IF sy-subrc <> 0.
    f_msg = 'Open file Error!'.
    RETURN.
  ENDIF.

  LOOP AT pt_txt.
    TRANSFER pt_txt TO f_target_file.
  ENDLOOP.

  CLOSE DATASET f_target_file.

ENDFORM.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值