No vídeo de hoje vamos demonstrar como extrair imagens de um repositório de imagens do Protheus (nesse exemplo vamos usar cadastro de produtos SB1, mas poderia ser por exemplo o de funcionários SRA).
Hoje a dúvida foi feita pelo Daniel (meu xará rs), onde ele precisava extrair as fotos dos produtos do Protheus para uma pasta, e como fazer?
Montamos então um exemplo, demonstrando em como utilizar a extração de imagens de um repositório.
E abaixo o código fonte desenvolvido para exemplificar:
//Bibliotecas #Include "TOTVS.ch" /*/{Protheus.doc} User Function zVid0047 Função que exporta as imagens para uma pasta da máquina do usuário @type Function @author Atilio @since 28/06/2022 /*/ User Function zVid0047() Local aArea := FWGetArea() //Somente se a pergunta for confirmada If MsgYesNo("Deseja exportar as imagens dos produtos para uma pasta?", "Atenção") Processa({|| fExporta() }, "Exportando imagens do repositório...") EndIf FWRestArea(aArea) Return Static Function fExporta() Local nAtual := 0 Local nTotal := 0 Local oReposit Local oDlgExp Local cDirExport := "C:\spool\imagens\" Local cFoto := "" Local cFotoFull := "" //Se a pasta de importados não existir, cria If ! ExistDir(cDirExport) MakeDir(cDirExport) EndIf //Define o repositório como o SIGAADV SetRepName("SIGAADV") DbSelectArea("SB1") SB1->(DbSetOrder(1)) // B1_FILIAL + B1_COD Count To nTotal SB1->(DbGoTop()) //Monta uma dialog de 1 pixel, apenas para poder instanciar um repositório DEFINE MSDIALOG oDlgExp TITLE "Exportação - Repositório de Imagens" FROM 000, 000 TO 001, 001 PIXEL //Instancia um repositorio @ 000,000 REPOSITORY oReposit SIZE 0,0 OF oDlgExp //Enquanto houver dados While ! SB1->(EoF()) //Incrementa a régua de processamento nAtual++ IncProc("Analisando produto " + cValToChar(nAtual) + " de " + cValToChar(nTotal) + " (" + Alltrim(SB1->B1_DESC) + ")...") //Se tiver foto do produto cadastrada cFoto := SB1->B1_BITMAP If ! Empty(cFoto) //Extrai a foto como jpg cFotoFull := cDirExport + Alltrim(SB1->B1_COD) + ".jpg" If ! Empty(cFoto) oReposit:Extract(cFoto, cFotoFull, .F.) EndIf //Caso não tenha extraido, tenta extrair o .bmp If ! File(cFotoFull) cFotoFull := cDirExport + Alltrim(SB1->B1_COD) + ".bmp" If ! Empty(cFoto) oReposit:Extract(cFoto, cFotoFull, .F.) EndIf EndIf EndIf SB1->(DbSkip()) EndDo //Ao abrir a dialog, já fecha ela ACTIVATE MSDIALOG oDlgExp CENTERED ON INIT (oDlgExp:End()) //Fecha o repositório de imagens FechaReposit() Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.