Como abrir arquivos e pastas utilizando a classe TFileDialog

Hoje vou mostrar como usar a tFileDialog, função que veio para substituir a antiga cGetFile.

Como muitos já devem saber, a TOTVS vem modernizando o Protheus e criando cada vez recursos mais novos para o ERP. Um recurso que era usado no passado e que hoje já ficou bem datado, era o da seleção de arquivo / pasta, com o famoso cGetFile.

Eu até cheguei a desenvolver uma tela que fazia isso via PowerShell (link aqui – https://terminaldeinformacao.com/2017/11/21/funcao-para-selecionar-arquivos-windows-explorer-utilizando-advpl/ ). Porém, agora é oficial, a TOTVS lançou um tempo atrás a função tFileDialog (que também funciona em outros S.O. sem ser Windows).

Nessa função, é aberto uma tela para seleção de arquivo, pasta ou múltiplos arquivos. Abaixo um print dela:

Exemplo da tela que é exibida, e de mensagem ao selecionar arquivo

E abaixo o código fonte que fiz com 3 exemplos (um selecionando apenas 1 arquivo, um selecionando mais de 1 arquivo e outro selecionando uma pasta):

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function zFileTst
Função de teste, para utilizar a nova TFileDialog
@type  Function
@author Atilio
@since 14/11/2020
/*/

User Function zFileTst()
    fExemplo1()

    fExemplo2()

    fExemplo3()
Return 

/*/{Protheus.doc} fExemplo1
Exemplo 1 - Selecionando apenas 1 arquivo
@type  Function
@author Atilio
@since 14/11/2020
/*/

Static Function fExemplo1()
    Local aArea   := GetArea()
    Local cDirIni := GetTempPath()
    Local cTipArq := "Todas extensões (*.*) | Arquivos texto (*.txt) | Arquivos com separações (*.csv)"
    Local cTitulo := "Seleção de Arquivos para Processamento"
    Local lSalvar := .F.
    Local cArqSel := ""

    //Se não estiver sendo executado via job
    If ! IsBlind()

        //Chama a função para buscar arquivos
        cArqSel := tFileDialog(;
            cTipArq,;  // Filtragem de tipos de arquivos que serão selecionados
            cTitulo,;  // Título da Janela para seleção dos arquivos
            ,;         // Compatibilidade
            cDirIni,;  // Diretório inicial da busca de arquivos
            lSalvar,;  // Se for .T., será uma Save Dialog, senão será Open Dialog
            ;          // Se não passar parâmetro, irá pegar apenas 1 arquivo; Se for informado GETF_MULTISELECT será possível pegar mais de 1 arquivo; Se for informado GETF_RETDIRECTORY será possível selecionar o diretório
        )

        If ! Empty(cArqSel)
            MsgInfo("O arquivo selecionado foi: " + cArqSel, "Atenção")
        EndIf
    EndIf

    RestArea(aArea)
Return

/*/{Protheus.doc} fExemplo2
Exemplo 2 - Selecionando mais de 1 arquivo
@type  Function
@author Atilio
@since 14/11/2020
/*/

Static Function fExemplo2()
    Local aArea   := GetArea()
    Local cDirIni := GetTempPath()
    Local cTipArq := "Todas extensões (*.*) | Arquivos imagem (*.png) | Arquivos imagem (*.jpg)"
    Local cTitulo := "Seleção de Múltiplos Arquivos para Processamento"
    Local lSalvar := .F.
    Local cArqSel := ""

    //Se não estiver sendo executado via job
    If ! IsBlind()

        //Chama a função para buscar arquivos
        cArqSel := tFileDialog(;
            cTipArq,;                  // Filtragem de tipos de arquivos que serão selecionados
            cTitulo,;                  // Título da Janela para seleção dos arquivos
            ,;                         // Compatibilidade
            cDirIni,;                  // Diretório inicial da busca de arquivos
            lSalvar,;                  // Se for .T., será uma Save Dialog, senão será Open Dialog
            GETF_MULTISELECT;          // Se não passar parâmetro, irá pegar apenas 1 arquivo; Se for informado GETF_MULTISELECT será possível pegar mais de 1 arquivo; Se for informado GETF_RETDIRECTORY será possível selecionar o diretório
        )

        If ! Empty(cArqSel)
            MsgInfo("Arquivo(s) selecionado(s): " + cArqSel, "Atenção")
        EndIf
    EndIf

    RestArea(aArea)
Return

/*/{Protheus.doc} fExemplo3
Exemplo 3 - Selecionando uma pasta
@type  Function
@author Atilio
@since 14/11/2020
/*/

Static Function fExemplo3()
    Local aArea   := GetArea()
    Local cDirIni := GetTempPath()
    Local cTipArq := ""
    Local cTitulo := "Seleção de Pasta para Salvar arquivo"
    Local lSalvar := .F.
    Local cPasta  := ""

    //Se não estiver sendo executado via job
    If ! IsBlind()

        //Chama a função para buscar arquivos
        cPasta := tFileDialog(;
            cTipArq,;                  // Filtragem de tipos de arquivos que serão selecionados
            cTitulo,;                  // Título da Janela para seleção dos arquivos
            ,;                         // Compatibilidade
            cDirIni,;                  // Diretório inicial da busca de arquivos
            lSalvar,;                  // Se for .T., será uma Save Dialog, senão será Open Dialog
            GETF_RETDIRECTORY;         // Se não passar parâmetro, irá pegar apenas 1 arquivo; Se for informado GETF_MULTISELECT será possível pegar mais de 1 arquivo; Se for informado GETF_RETDIRECTORY será possível selecionar o diretório
        )

        If ! Empty(cPasta)
            MsgInfo("Pasta Selecionada: " + cPasta, "Atenção")
        EndIf
    EndIf

    RestArea(aArea)
Return

Para quem quiser saber mais, segue o link do TDN com toda a documentação: https://tdn.totvs.com/display/tec/tFileDialog

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

Deixe uma resposta