quarta-feira, 26 de outubro de 2011

Função - TMP_GUI_DIRECTORY_LIST_FILES

  *&---------------------------------------------------------------------*
"  As vezes devemos trabalhar com arquivos que estão na rede, sabendo
" o endereço do diretório; com esta função você consegue listar os arquivos
" e pastas que existem no mesmo.

REPORT zmjteste.

" Diretório : ...
PARAMETERS: p_dir TYPE file_table-filename.

" Variáveis ...
DATA: v_title      TYPE string,              "Título da Janela
      v_folder     TYPE string,              "Diretório selecionado
      vg_filecount TYPE i,
      vg_dircount  TYPE i,
      it_filetab   TYPE TABLE OF sdokpath,
      it_dirtable  TYPE TABLE OF sdokpath
      .
" At select ....
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_dir.
  PERFORM f_busca_arquivo CHANGING p_dir.

" Start-of-selection ...
START-OF-SELECTION.

  PERFORM :
  " pega os arquivos e pastas do diretório informado.
    f_get_files,
  " mostra os mesmos.....
    f_show_this.

*&---------------------------------------------------------------------*
*&      Form  F_BUSCA_ARQUIVO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_P_DIR  text
*----------------------------------------------------------------------*
FORM f_busca_arquivo  CHANGING p_file  TYPE file_table-filename.


  CLEAR: v_title, v_folder.

* Monta título da Janela:
* Msg: Selecione a Pasta Desejada para gravação do arquivo e Clique no
* Botão [OK]
  MOVE text-001 TO v_title.

* Chamada da janela para busca de diretório
  CALL METHOD cl_gui_frontend_services=>directory_browse
    EXPORTING
      window_title         = v_title
      initial_folder       = 'C:/'
    CHANGING
      selected_folder      = v_folder
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.

* Se não executou abertura com sucesso
  IF sy-subrc NE 0.

*   Msg: Erro na busca do diretório.
    MESSAGE i836(sd) WITH text-002.

* Retornando o diretório ao campo da tela de seleção
  ELSE.
    MOVE v_folder TO p_file.
  ENDIF.

ENDFORM.                    " F_BUSCA_ARQUIVO

*&---------------------------------------------------------------------*
*&      Form  F_GET_FILES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM f_get_files .

  CALL FUNCTION 'TMP_GUI_DIRECTORY_LIST_FILES'
    EXPORTING
      directory  = p_dir  " Diretório
      filter     = '*.*'  " Tipo de arquivo
    IMPORTING
      file_count = vg_filecount
      dir_count  = vg_dircount
    TABLES
      file_table = it_filetab  " Tabelas com os arquivos
      dir_table  = it_dirtable " Tabela com as pastas
    EXCEPTIONS
      cntl_error = 1
      OTHERS     = 2.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.                    " F_GET_FILES


*&---------------------------------------------------------------------*
*&      Form  F_SHOW_THIS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM f_show_this .

  DATA : st_filetab  LIKE LINE OF it_filetab,
         st_dirtable LIKE LINE OF it_dirtable.

  WRITE : / 'Arquivos', / .
  LOOP AT it_filetab INTO st_filetab.
    WRITE : / st_filetab-pathname.
  ENDLOOP.

  WRITE :  / , / 'Pastas', / .
  LOOP AT it_dirtable INTO st_dirtable.
    WRITE : / st_dirtable-pathname.
  ENDLOOP.

ENDFORM.                    " F_SHOW_THIS

2 comentários:

  1. Olá tudo bom?
    Utilizei a codificação acima e no meu caso não retornou o diretório.

    ResponderExcluir
  2. Opa Laercio, não sei te fala o porque, realizei alguns testes com o código e funcionou normalmente, dá uma olhada no diretório que você está informando, tenta criar uma nova pasta e vê se aparece.

    ResponderExcluir