Olá caros,
Gostaria de uma ajuda na criação de um campo que poça ser feito o uploud de arquivos no casa .pdf
Pesquisei não encontrei classes, nem alguns exemplos para realizar a customização.
Olá caros,
Gostaria de uma ajuda na criação de um campo que poça ser feito o uploud de arquivos no casa .pdf
Pesquisei não encontrei classes, nem alguns exemplos para realizar a customização.
Uma saída é criar um campo do tipo memo no dicionário de dados que vai se refletir como um campo blob no banco.
Então você pode abrir seu pdf, pegar o string e jogar para dentro do campo memo:
#include 'fileio.ch'...
User Function grava()
//Abre o arquivo pdf que deseja armazenar
IF (nHandle := FOPEN("c:\arquivo.pdf")) >= 0
// Posiciona no fim do arquivo, retornando o tamanho do mesmo
nLength := FSEEK(nHandle, 0, FS_END)
// Posiciona no início do arquivo
FSEEK(nHandle, 0)
// Fecha arquivo
FCLOSE(nHandle)
ELSE
MsgStop( "File open error" )
Return
ENDIF
//Carrega o arquivo em um string
//Se for trabalhar com arquivos maiores que 1Mb precisa mudar o string maximo do ambiente
cString := ""
FRead( nHandle, cString, nLength )
//Grava string em campo memo
Reclock("ZZZ",.T.)
ZZZ->ZZZ_ARQUIVO := "c:\arquivo.pdf"
ZZZ->ZZZ_CONTEUD := cString
ZZZ->(Msunlock())
fclose(nHandle) // Fecha arquivo
Return
E quando precisar recuperar o pdf, pode ler o string e gravar o arquivo novamente:
#include 'fileio.ch'...
User Function grava()
ZZZ->(Dbgoto(nrecno))
nHandle := fopen('c:\arquivo.pdf' , 65 ) //Abrindo para gravação e compartilhado
If nHandle == -1
conout('Erro de abertura : FERROR '+str(ferror(),4))
Return
Else
FWrite(nHandle, alltrim(ZZZ->ZZZ_CONTEUD)) // Insere STRING no arquivo
fclose(nHandle) // Fecha arquivo
conout('Processo concluído')
Endif
Return
Fontes para sintaxe e exemplos:
https://tdn.totvs.com/display/tec/FWrite
https://tdn.totvs.com/display/tec/FOpen
https://tdn.totvs.com/display/tec/FRead
Link para TDN sobre strings e campos memo maiores que 1Mb: https://tdn.totvs.com/pages/viewpage.action?pageId=161349793
Boa tarde, só conheço através do msdocument: Exemblo:
User Function MA103BUT() Local aButtons := {} aadd(aButtons, {'Conhecimento', {|| MsDocument("SF1",SF1->(Recno()),6)}, 'Conhecimento'}) Return (aButtons)
Você quer gravar um documento no banco de dados?
— Daniel Mendes 28 de Dec de 2021