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:
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.