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.
