SAP 中的读取及上传文件方法总结

SAP 中的读取及上传文件方法总结

 

*&---------------------------------------------------------------------*
*&      Form  GET_DATA    : old method , only for local PC path
*&---------------------------------------------------------------------*
FORM GET_DATA.
  data: lv_count type I.
  clear:lv_filename.
  CALL FUNCTION 'KCD_FRONT_END_DIRECTORY_READ'
     EXPORTING
          I_PATH              = filepath
*     IMPORTING
*          E_PURE_PATH         = L_PURE_PATH
     TABLES
          E_DIRECTORY         = L_DIRECTORY
     EXCEPTIONS
          DOWNLOAD            = 1
          UPLOAD              = 2
          EXECUTE             = 3
          DIRECTORY_NOT_EXIST = 4
          DIRECTORY           = 5
          OTHERS              = 6.

  itab_filename[] = L_DIRECTORY[].
  loop at itab_filename.
    lv_tabix = sy-tabix.
    SHIFT itab_filename-name UP TO '.'.
    if itab_filename-name <> '.txt'.
      delete itab_filename index lv_tabix.
    endif.
  ENDLOOP.
  DESCRIBE table itab_filename lines lv_count.
  if lv_count > 0.
     concatenate 'pa_eform_' s_key into lv_filename.
     loop at itab_filename.
       lv_tabix = sy-tabix.
       SEARCH itab_filename-name for lv_filename.
       if sy-subrc ne 0.
         DELETE itab_filename INDEX lv_tabix.
       endif.
     endloop.
  endif.

  DESCRIBE table itab_filename lines lv_count.
  if lv_count = 1.
     clear:itab_filename.
     clear: data_tab[].

     READ TABLE itab_filename index 1.
     concatenate filepath '/' itab_filename-name into lv_filename.

    CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD
      EXPORTING
        FILENAME                = lv_filename
        FILETYPE                = 'DAT'
        HAS_FIELD_SEPARATOR     = SPACE
        HEADER_LENGTH           = 0
        READ_BY_LINE            = 'X'
        DAT_MODE                = SPACE
        CODEPAGE                = SPACE
        replacement             = '#'
       changing
         data_tab                = data_tab     "itab_text
       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.
  elseif lv_count > 1.
    concatenate 'More than one pa_eform_' s_key '*.txt found' into lv_err_message.
    lv_show_message = 'X'.
    lv_err_flag = 'X'.
  else.    " lv_count = 0
    concatenate 'pa_eform_' s_key '*.txt not found' into lv_err_message.
    lv_show_message = 'X'.
    lv_err_flag = 'X'.
  endif.

  check lv_err_flag ne 'X'.

  clear lv_count.
  DESCRIBE table data_tab lines lv_count.
  if lv_count = 0.
    concatenate 'No record found in file: ' lv_filename into lv_err_message.
    clear lv_show_message.
    lv_err_flag = 'X'.
  endif.
ENDFORM.

 

 

 

 

 

 

*&---------------------------------------------------------------------*
*&      Form  Get_FileName_ByPath
*&---------------------------------------------------------------------*
FORM Get_FileName_ByPath Using p_filepath
                          changing p_filename.
*"initial
  MOVE '*' TO A_GENERIC_NAME.

  classtype  =  ''.     "help to the the file name
  a_dir_name = p_filepath.
  TRANSLATE a_dir_name TO LOWER CASE.
*"End

  CALL 'C_DIR_READ_FINISH'             " just to be sure
      ID 'ERRNO'  FIELD FILE_LIST-ERRNO
      ID 'ERRMSG' FIELD FILE_LIST-ERRMSG.

  CALL 'C_DIR_READ_START' ID 'DIR'    FIELD A_DIR_NAME
                          ID 'FILE'   FIELD A_GENERIC_NAME
                          ID 'ERRNO'  FIELD FILE-ERRNO
                          ID 'ERRMSG' FIELD FILE-ERRMSG.
  IF SY-SUBRC <> 0.
    lv_err_message = 'No authorization to read the system folder.'.
    lv_err_flag = 'X'.
    lv_show_message = 'X'.
  ELSE.
    DO.
      CLEAR FILE.
      CALL 'C_DIR_READ_NEXT'
        ID 'TYPE'   FIELD FILE-TYPE
        ID 'NAME'   FIELD FILE-NAME
        ID 'LEN'    FIELD FILE-LEN
        ID 'OWNER'  FIELD FILE-OWNER
        ID 'MTIME'  FIELD FILE-MTIME
        ID 'MODE'   FIELD FILE-MODE
        ID 'ERRNO'  FIELD FILE-ERRNO
        ID 'ERRMSG' FIELD FILE-ERRMSG.
      FILE-DIRNAME = A_DIR_NAME.
      MOVE SY-SUBRC TO FILE-SUBRC.
      CASE SY-SUBRC.
        WHEN 0.
        WHEN 1.
          EXIT.
        WHEN OTHERS.                     " SY-SUBRC >= 2
          ADD 1 TO ERRCNT.
          IF ERRCNT > 10.
            EXIT.
          ENDIF.
          IF SY-SUBRC = 5.
            MOVE'???' TO FILE-TYPE,
                  '???' TO FILE-OWNER,
                  '???' TO FILE-MODE.
          ENDIF.
      ENDCASE.
      PERFORM P6_TO_DATE_TIME_TZ(RSTR0400) USING FILE-MTIME
                                                 FILE-MOD_TIME
                                                 FILE-MOD_DATE.

        MOVE-CORRESPONDING FILE TO itab_filename.
        APPEND itab_filename.
    ENDDO.

    CALL 'C_DIR_READ_FINISH'
        ID 'ERRNO'  FIELD FILE_LIST-ERRNO
        ID 'ERRMSG' FIELD FILE_LIST-ERRMSG.
    IF SY-SUBRC <> 0.
      lv_err_flag = 'X'.
    ENDIF.
  ENDIF.
*   end of file information retrival

*"---------------
  if lv_err_flag ne 'X'.

    loop at itab_filename.
      lv_tabix = sy-tabix.
      concatenate 'pa_eform_' s_key '*.txt' into p_filename.
      if itab_filename-name np p_filename.
        delete itab_filename index lv_tabix.
      endif.
    endloop.

    clear lv_count.
    describe table itab_filename lines lv_count.

    if lv_count > 1.
      concatenate 'More than one pa_eform_' s_key '*.txt found' into lv_err_message.
      lv_show_message = 'X'.
      lv_err_flag = 'X'.
    elseif lv_count = 0.
      concatenate 'pa_eform_' s_key '*.txt not found' into lv_err_message.
      lv_show_message = 'X'.
      lv_err_flag = 'X'.
    else.
      read table itab_filename index 1.
      p_filename = itab_filename-name.
    endif.

  endif.

ENDFORM.                    " Get_FileName_ByPath


*&---------------------------------------------------------------------*
*&      Form  Get_Data_ByFile : for Network path
*&---------------------------------------------------------------------*
FORM Get_Data_ByFile Using p_fullfilename.

*"Open file "LEGACY TEXT MODE BIG ENDIAN."
  open dataset p_fullfilename for input in TEXT MODE ENCODING UTF-8"DEFAULT.
  if sy-subrc ne 0.
    lv_err_message = 'Can not get this file, pls check the file name, or Authorization'.
    lv_show_message = 'X'.
    lv_err_flag = 'X'.
  else.
*    read dataset p_fullfilename into lv_string.
    Do.
      clear lv_string.
      read dataset p_fullfilename into lv_string.
      If sy-subrc ne 0.
        exit.      " exit Do loop
      EndIf.

*     " read one line text into it_temp split by TAB


      split lv_string at CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB
        into table it_temp.

*     " assign every column to itab_text from it_temp
      clear itab_text.
      loop at it_temp.
        assign COMPONENT sy-tabix of structure itab_text to <f1>.
        <f1> = it_temp-line.
*        write:/ <f1>.
      endloop.

*     " for UTF-8, replace special char
      do g_fffe_count times.
        ASSIGN itab_text-APPRAISAL_ID+0(1TO <x_fffe> CASTING.
        clear g_fffe_str.
        write <x_fffe> to g_fffe_str.

        if g_fffe_str eq 'FFFE' or g_fffe_str eq '1A00'.
          Shift itab_text-APPRAISAL_ID left by 1 places.
        else.
          exit.    " exit Do loop
        endif.
      enddo.
*------------------
      if strlen( itab_text ) > 1.
        append itab_text.
      endif.
      clear itab_text.
    EndDo.
  endif.
  close dataset p_fullfilename.

  check lv_err_flag ne 'X'.

  clear lv_count.
  DESCRIBE table itab_text lines lv_count.
  if lv_count = 0.
    concatenate 'No record found in file: ' p_fullfilename into lv_err_message.
    clear lv_show_message.
    lv_err_flag = 'X'.
  endif.
ENDFORM.                    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值