*&---------------------------------------------------------------------*
" 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
Olá tudo bom?
ResponderExcluirUtilizei a codificação acima e no meu caso não retornou o diretório.
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