PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 25 → WX - Exemplo de como Serializar e Compactar Arquivo Binário para Transmitir pelo Webservice
WX - Exemplo de como Serializar e Compactar Arquivo Binário para Transmitir pelo Webservice
Iniciado por BOLLER, jun., 07 2017 4:37 PM - 7 respostas
Membro registado
3.651 mensagems
Popularité : +175 (223 votes)
Publicado em junho, 07 2017 - 4:37 PM
Procedure SerializaCompactaArquivo(Token, bufArquivoBinario)

//Serializar
bufArquivoBinario = Crypt(bufArquivoBinario,Token,cryptAnsi,encodeBASE64)

NomeArquivoTxt is string = "Buffer"+DateSys()+TimeSys() + ".txt"
NomeArquivoZip is string = "Buffer"+DateSys()+TimeSys() + "zip"

fDelete(NomeArquivoTxt)
fDelete(NomeArquivoZip)

fSaveBuffer(NomeArquivoTxt,bufArquivoBinario)

NumZipErr is int

NumZipErr = zipCreate("Pacote", NomeArquivoZip)

IF NumZipErr <> 0 THEN
Error(zipMsgError(NumZipErr))
END

NumZipErr = zipAddFile("Pacote", NomeArquivoTxt, zipNone)

IF NumZipErr <> 0 THEN
Error(zipMsgError(NumZipErr) + "On the file " + zipCurrentFile("Pacote"))
END

zipCompressionLevel("Pacote", 9)

ok is boolean

IF fFileExist(NomeArquivoZip) THEN
ok = True
bufArquivoBinario = fLoadBuffer(NomeArquivoZip)
bufArquivoBinario = Crypt(bufArquivoBinario,Token,cryptAnsi,encodeBASE64)
ELSE
ok = False
bufArquivoBinario = ""
END

fDelete(NomeArquivoTxt)
fDelete(NomeArquivoZip)

RESULT(bufArquivoBinario)


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
3.651 mensagems
Popularité : +175 (223 votes)
Publicado em junho, 07 2017 - 9:14 PM




ENIVIAR

Procedure SerializaCompactaArquivo(Token, bufArquivoBinario)

//Versao com o processo de leitura da base de dados onde tem os arquivos anexos
//em campo do tipo binario sendo convertido para buffer depois criptado para txt,
//depois de zipado e criptado com senha. Assim o dado vai em um pacote zip sendo
//totalmente segura a comunicacao entre o servidor e o dispositivo móvel.
//No lado do celular deve fazer o processamento inverso.

//Serializar
ok is boolean

bufArquivoResultante is Variant

bufArquivoBinario = Crypt(bufArquivoBinario,Token,cryptAnsi,encodeBASE64)

NomeArquivoTxt is string = "Buffer"+DateSys()+TimeSys() + ".txt"
NomeArquivoZip is string = "Buffer"+DateSys()+TimeSys() + ".zip"

ok = fDelete(NomeArquivoTxt)
ok = fDelete(NomeArquivoZip)

fSaveBuffer(NomeArquivoTxt,bufArquivoBinario)

NumZipErr is int

NumZipErr = zipCreate("Pacote", NomeArquivoZip)

IF NumZipErr <> 0 THEN
Error(zipMsgError(NumZipErr))
END

NumZipErr = zipAddFile("Pacote", NomeArquivoTxt, zipNone)

IF NumZipErr <> 0 THEN
Error(zipMsgError(NumZipErr) + " no arquivo " + zipCurrentFile("Pacote"))
END

ok = zipCompressionLevel("Pacote", 9)

ok = zipClose("Pacote")

IF fFileExist(NomeArquivoZip) THEN
ok = True
bufArquivoResultante = fLoadBuffer(NomeArquivoZip)
bufArquivoResultante = Crypt(bufArquivoResultante,Token,cryptAnsi,encodeBASE64)
ELSE
ok = False
bufArquivoResultante = ""
END

ok = fDelete(NomeArquivoTxt)
ok = fDelete(NomeArquivoZip)

nTamanhoFinal is int = Length(bufArquivoResultante)//CRC

fSaveBuffer(NomeArquivoTxt,bufArquivoResultante)

RESULT(bufArquivoResultante)



RECEBER

Procedure DeserializaDescompactaArquivo(Token is string, bufArquivoZip is Variant, Debug is boolean)

//Versao com o processo de leitura da base de dados onde tem os arquivos anexos
//em campo do tipo binario sendo convertido para buffer depois criptado para txt,
//depois de zipado e criptado com senha. Assim o dado vai em um pacote zip sendo
//totalmente segura a comunicacao entre o servidor e o dispositivo móvel.
//No lado do celular deve fazer o processamento inverso sendo a funcionalidade dessa função.

nTamanhoZip is int = Length(bufArquivoZip)

descompactado, OK is boolean

BufArquivoImage, BufArquivoTxt is Variant

//0 - Da o nome e Limpa arquivos antigos
ArquivoTxt is string = "Buffer"+DateSys()+TimeSys()+".txt"
ArquivoZip is string = "Buffer"+DateSys()+TimeSys()+".zip"

OK = fDelete(ArquivoTxt)
OK = fDelete(ArquivoZip)

//1 - Uncrypt
bufArquivoZip = Uncrypt(bufArquivoZip,Token,cryptAnsi,encodeBASE64)

//2 - Salva Zip em disco
OK = fSaveBuffer(ArquivoZip,bufArquivoZip)

//3 - Descompacta arquivo Zip
ResExtractAll is int
ResOpenArchive is int = zipOpen("Pacote", ArquivoZip)
IF ResOpenArchive = 0 THEN
// Returns the list of files found in the archive
// Display the files in a list
ArquivoTxt = zipListFile("Pacote")
ResExtractAll = zipExtractAll("Pacote")
IF fFileExist(ArquivoTxt) AND ResExtractAll = 0
descompactado = True
ELSE
descompactado = False
END
END
IF ResOpenArchive = 0
OK = zipClose("Pacote")
END

//4 - Le conteudo do txt
IF descompactado = True THEN
BufArquivoTxt = fLoadText(ArquivoTxt,foAnsi)
END

//5 - Uncrypt
BufArquivoTxt = Uncrypt(BufArquivoTxt,Token,cryptAnsi,encodeBASE64)

//6 - Passa o conteudo descriptografado para o buffer de imagem ou doc
BufArquivoImage = BufArquivoTxt

//7 - Limpa os arquivos do disco
fDelete(ArquivoTxt)
fDelete(ArquivoZip)

RESULT(BufArquivoImage)


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Mensagem modificada, junho, 07 2017 - 9:34 PM
Membro registado
3.651 mensagems
Popularité : +175 (223 votes)
Publicado em junho, 08 2017 - 10:55 PM
No Mobile seria esse codigo
Procedure ExecutaAnexosBaixar(sToken, ArquivoID, sCodigoSolicitacao, sNomeArquivo, sDegug)

BufArquivoZip, BufArquivoTxt is string

XML_Baixado is string = COL_GlobalWebservices.Ws_Consulta_AnexosBaixar(sToken, ArquivoID, sCodigoSolicitacao, sNomeArquivo, sDegug)

//EXEMPLO
//Add(arrResultado,"<Xml><Retorno><NoXml>" + CR + ...
//"<ArquivoRecID>"+ ARQUIVORECID +"</ArquivoRecID>" + CR + ...
//"<SolicitacaoID>"+ SolicitacaoID +"</SolicitacaoID>" + CR + ...
//"<Nome_Original>"+ Nome_Original +"</Nome_Original>" + CR + ...
//"<Arquivo>"+ bufMensagem +"</Arquivo>" + CR + ...
//"</NoXml></Retorno></Xml>")

XmlDoc is xmlDocument
XmlDoc = XMLOpen(XML_Baixado,fromString)
NoXml is xmlNode
FOR EACH NoXml OF XmlDoc.Xml.Retorno on NoXml

T0023_Arquivo.T0023_ArquivoID = NoXml.ArquivoRecID
T0023_Arquivo.T0023_SolicitacaoID = NoXml.SolicitacaoID
T0023_Arquivo.T0023_NomeOriginal = NoXml.Nome_Original

BufArquivoZip = NoXml.Arquivo

//0 - Exclui os zip e os txt antigos
fDelete("BufArquivo.Zip")
fDelete("*.txt")

//1 - Uncrypt
BufArquivoZip = Uncrypt(BufArquivoZip,sToken,encodeBASE64)

//2 - Salva Zip em disco
Ok = fSaveBuffer("BufArquivo.Zip",BufArquivoZip)

//3 - Descompacta arquivo Zip
ResExtractAll is int
ResOpenArchive is int = zipOpen("Pacote", "BufArquivo.Zip")
IF ResOpenArchive = 0 THEN
// Returns the list of files found in the archive
// Display the files in a list
descompactado is boolean
ArquivoTxt is string = zipListFile("Pacote")
ResExtractAll = zipExtractAll("Pacote")
IF fFileExist(ArquivoTxt) AND ResExtractAll = 0
descompactado = True
BufArquivoTxt = fLoadText(ArquivoTxt)
BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,encodeBASE64)
ELSE
descompactado = False
END
END
IF ResOpenArchive = 0
Ok = zipClose("Pacote")
END

T0023_Arquivo.T0023_Arquivo = BufArquivoTxt

HAdd(T0023_Arquivo)

END


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
3.651 mensagems
Popularité : +175 (223 votes)
Publicado em junho, 08 2017 - 11:01 PM
Prezados,

Caso use entre webservice e mobile a criptografia e a descriptografia é apenas assim:

Webservice
BufArquivoTxt = Crypt(BufArquivoTxt,sToken,encodeBASE64)


Mobile
BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,encodeBASE64)


Obs.: E no caso de mesma plataforma tipo web e webservice pode usar outros parametros do comando crypt e uncrypt.
Mas em plataformas diferentes (Web e Mobile) nao use os outros paramentros:
BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,cryptAnsi,encodeBASE64)

//OR

BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,cryptNone,encodeBASE64)

//OR

BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,cryptFast,encodeBASE64)

//OR

BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,cryptRC516,encodeBASE64)

//OR

BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,cryptSecure,encodeBASE64)

//OR

BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,compressNone,encodeBASE64)

//OR

BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,compressShortString,encodeBASE64)

//OR

BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,compressLZW,encodeBASE64)


:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
3.651 mensagems
Popularité : +175 (223 votes)
Publicado em junho, 08 2017 - 11:05 PM
//Versao Nova - Webservice
Procedure Ws_AnexosBaixar(Token, nArquivoID, nCodSolicitacao, NomeArquivoOriginal, sDebug is string)

//Versao com o processo de leitura da base de dados onde tem os arquivos anexos
//em campo do tipo binario sendo convertido para buffer depois criptado para txt,
//depois de zipado e criptado com senha. Assim o dado vai em um pacote zip sendo
//totalmente segura a comunicacao entre o servidor e o dispositivo móvel.
//No lado do celular deve fazer o processamento inverso.

IF sDebug="S" THEN
///a definir
ELSE
sDebug=""
END

bufMensagem is Variant = "ERRO"

bufArquivoBinario is Variant

ARQUIVORECID, SolicitacaoID, Nome_Original is string = ""

arrResultado is array of string

IF Token = TokenGlobal

ok is boolean = Conexao()

IF ok = True THEN

IF NomeArquivoOriginal = ""
bufMensagem = "ERRO: Nome nao informado do arquivo"
ELSE IF (nCodSolicitacao = "" OR nCodSolicitacao = 0) AND (nArquivoID = "" OR nArquivoID = 0)
bufMensagem = "ERRO: Código do nArquivoID e/ou da Solicitacao nao informado"
ELSE IF (nArquivoID > 0 OR nCodSolicitacao > 0) AND (NomeArquivoOriginal <> "")

//Tratamento do Buffer
//--------------------
// BufferFile = uncrypt(xxxx)
// fsavebuffer
//--------------------
dsAux is Data Source

sSqlExecutar is string = [
SELECT * FROM ARQUIVO_REC (NOLOCK)
]

IF nArquivoID > 0 AND nCodSolicitacao = 0
sSqlExecutar += " WHERE ARQUIVORECID = " + nArquivoID
ELSE IF nArquivoID = 0 AND nCodSolicitacao > 0
sSqlExecutar += " WHERE SolicitacaoID = " + nCodSolicitacao
ELSE IF nArquivoID > 0 AND nCodSolicitacao > 0
sSqlExecutar += " WHERE ARQUIVORECID = " + nArquivoID + " AND SolicitacaoID = "+ nCodSolicitacao
END

IF HExecuteSQLQuery(dsAux,ASPNET,hQueryWithoutCorrection, sSqlExecutar) THEN

HReadFirst(dsAux)

//tem que ler a base de dados, localizar pelo id e pegar o buffer binario e passar em arraystring o arquivo para o xml
//no celular ele devera pegar o arraystring e remontar o arquivo em disco, deve levar o nome do arquivo.extensão para
//que omesmo anexo seja remontado novamente no celular.

//DOC, XLS, PDF, JPG, PNG....
ARQUIVORECID = dsAux.ARQUIVORECID
SolicitacaoID = dsAux.SolicitacaoID
Nome_Original = dsAux.Nome_Original
bufArquivoBinario = dsAux.Arquivo

nTAMANHO is int = Length(bufArquivoBinario) //CRC 01

//SERIALIZA E COMPACTA E RETORNA O NOVO BUFFER MENOR
bufArquivoBinario = ArquivoSerializaCompacta(TokenGlobal,bufArquivoBinario)

//Processamento para por no xml o resultado
IF Length(bufArquivoBinario) > 0 THEN

bufMensagem = bufArquivoBinario

ELSE
bufMensagem = "ERRO: Imagem do arquivo não disponível"
END

ELSE
bufMensagem = "ERRO: Arquivo não disponível"
END



IF ok = False
bufMensagem = "ERRO: "+ErrorInfo()+" "+HErrorInfo()
END

END

ELSE

bufMensagem = "ERRO: "+ErrorInfo()+" "+HErrorInfo()

END

ELSE

bufMensagem = "ERRO: Token inválido!"

END

Add(arrResultado,"<Xml><Retorno><NoXml>" + CR + ...
"<ArquivoRecID>"+ ARQUIVORECID +"</ArquivoRecID>" + CR + ...
"<SolicitacaoID>"+ SolicitacaoID +"</SolicitacaoID>" + CR + ...
"<Nome_Original>"+ Nome_Original +"</Nome_Original>" + CR + ...
"<Arquivo>"+ bufMensagem +"</Arquivo>" + CR + ...
"</NoXml></Retorno></Xml>")

RESULT (arrResultado)



//Versao Nova - Webservice
Procedure Ws_ArquivoSerializaCompacta(Token, bufArquivoBinario)

//Versao com o processo de leitura da base de dados onde tem os arquivos anexos
//em campo do tipo binario sendo convertido para buffer depois criptado para txt,
//depois de zipado e criptado com senha. Assim o dado vai em um pacote zip sendo
//totalmente segura a comunicacao entre o servidor e o dispositivo móvel.
//No lado do celular deve fazer o processamento inverso.

//Serializar
ok is boolean

arrResultado is array of string

bufArquivoResultante is Variant

bufArquivoBinario = Crypt(bufArquivoBinario,Token,encodeBASE64)

NomeArquivoTxt is string = "Buffer"+DateSys()+TimeSys() + ".txt"
NomeArquivoZip is string = "Buffer"+DateSys()+TimeSys() + ".zip"

ok = fDelete(NomeArquivoTxt)
ok = fDelete(NomeArquivoZip)

fSaveBuffer(NomeArquivoTxt,bufArquivoBinario)

NumZipErr is int

NumZipErr = zipCreate("Pacote", NomeArquivoZip)

IF NumZipErr <> 0 THEN
Error(zipMsgError(NumZipErr))
END

NumZipErr = zipAddFile("Pacote", NomeArquivoTxt, zipNone)

IF NumZipErr <> 0 THEN
Error(zipMsgError(NumZipErr) + " no arquivo " + zipCurrentFile("Pacote"))
END

ok = zipCompressionLevel("Pacote", 9)

ok = zipClose("Pacote")

IF fFileExist(NomeArquivoZip) THEN
ok = True
bufArquivoResultante = fLoadBuffer(NomeArquivoZip)
bufArquivoResultante = Crypt(bufArquivoResultante,Token,encodeBASE64)
ELSE
ok = False
bufArquivoResultante = ""
END

ok = fDelete(NomeArquivoTxt)
ok = fDelete(NomeArquivoZip)

nTamanhoFinal is int = Length(bufArquivoResultante)//CRC

fSaveBuffer(NomeArquivoTxt,bufArquivoResultante)

Add(arrResultado,bufArquivoResultante)

RESULT(arrResultado)





//Versao Nova - Mobile
Procedure ExecutaAnexosBaixar(sToken, ArquivoID, sCodigoSolicitacao, sNomeArquivo, sDegug)

BufArquivoZip, BufArquivoTxt is string

XML_Baixado is string = COL_GlobalWebservices.Ws_Consulta_AnexosBaixar(sToken, ArquivoID, sCodigoSolicitacao, sNomeArquivo, sDegug)

//EXEMPLO
//Add(arrResultado,"<Xml><Retorno><NoXml>" + CR + ...
//"<ArquivoRecID>"+ ARQUIVORECID +"</ArquivoRecID>" + CR + ...
//"<SolicitacaoID>"+ SolicitacaoID +"</SolicitacaoID>" + CR + ...
//"<Nome_Original>"+ Nome_Original +"</Nome_Original>" + CR + ...
//"<Arquivo>"+ bufMensagem +"</Arquivo>" + CR + ...
//"</NoXml></Retorno></Xml>")

XmlDoc is xmlDocument
XmlDoc = XMLOpen(XML_Baixado,fromString)
NoXml is xmlNode
FOR EACH NoXml OF XmlDoc.Xml.Retorno on NoXml

T0023_Arquivo.T0023_ArquivoID = NoXml.ArquivoRecID
T0023_Arquivo.T0023_SolicitacaoID = NoXml.SolicitacaoID
T0023_Arquivo.T0023_NomeOriginal = NoXml.Nome_Original

BufArquivoZip = NoXml.Arquivo

//0 - Exclui os zip e os txt antigos
fDelete("BufArquivo.Zip")
fDelete("*.txt")

//1 - Uncrypt
BufArquivoZip = Uncrypt(BufArquivoZip,sToken,encodeBASE64)

//2 - Salva Zip em disco
Ok = fSaveBuffer("BufArquivo.Zip",BufArquivoZip)

//3 - Descompacta arquivo Zip
ResExtractAll is int
ResOpenArchive is int = zipOpen("Pacote", "BufArquivo.Zip")
IF ResOpenArchive = 0 THEN
// Returns the list of files found in the archive
// Display the files in a list
descompactado is boolean
ArquivoTxt is string = zipListFile("Pacote")
ResExtractAll = zipExtractAll("Pacote")
IF fFileExist(ArquivoTxt) AND ResExtractAll = 0
descompactado = True
BufArquivoTxt = fLoadText(ArquivoTxt)
BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,encodeBASE64)
ELSE
descompactado = False
END
END
IF ResOpenArchive = 0
Ok = zipClose("Pacote")
END

T0023_Arquivo.T0023_Arquivo = BufArquivoTxt

HAdd(T0023_Arquivo)

END


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
3.651 mensagems
Popularité : +175 (223 votes)
Publicado em junho, 08 2017 - 11:09 PM
Material complementar

//Crypt
https://help.windev.com/en-US/…

//Uncrypt
https://help.windev.com/en-US/…

//CryptStandart
https://help.windev.com/en-US/…

//UncryptStandart
https://help.windev.com/en-US/…

//fCrypt
https://help.windev.com/en-US/…

//fUnCrypt
https://help.windev.com/en-US/…

:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
3.651 mensagems
Popularité : +175 (223 votes)
Publicado em junho, 09 2017 - 1:15 PM
Procedure ExecutaAnexosBaixar(sToken, ArquivoID, sCodigoSolicitacao, sNomeArquivo, sDegug)

BufArquivoZip, BufArquivoTxt, ExtensionFile is string

XML_Baixado is string = COL_GlobalWebservices.Ws_Consulta_AnexosBaixar(sToken, ArquivoID, sCodigoSolicitacao, sNomeArquivo, sDegug)

//EXEMPLO
//Add(arrResultado,"<Xml><Retorno><NoXml>" + CR + ...
//"<ArquivoRecID>"+ ARQUIVORECID +"</ArquivoRecID>" + CR + ...
//"<SolicitacaoID>"+ SolicitacaoID +"</SolicitacaoID>" + CR + ...
//"<Nome_Original>"+ Nome_Original +"</Nome_Original>" + CR + ...
//"<Arquivo>"+ bufMensagem +"</Arquivo>" + CR + ...
//"</NoXml></Retorno></Xml>")

XmlDoc is xmlDocument
XmlDoc = XMLOpen(XML_Baixado,fromString)
NoXml is xmlNode
FOR EACH NoXml OF XmlDoc.Xml.Retorno on NoXml

T0023_Arquivo.T0023_ArquivoID = NoXml.ArquivoRecID
T0023_Arquivo.T0023_SolicitacaoID = NoXml.SolicitacaoID
T0023_Arquivo.T0023_NomeOriginal = NoXml.Nome_Original

BufArquivoZip = NoXml.Arquivo

//0 - Exclui os zip e os txt antigos
fDelete("BufArquivo.Zip")
fDelete("Arquivo.*")
fDelete("*.txt")

//1 - Uncrypt
BufArquivoZip = Uncrypt(BufArquivoZip,sToken,encodeBASE64)

//2 - Salva Zip em disco
Ok = fSaveBuffer("BufArquivo.Zip",BufArquivoZip)

//3 - Descompacta arquivo Zip
ResExtractAll is int
ResOpenArchive is int = zipOpen("Pacote", "BufArquivo.Zip")
IF ResOpenArchive = 0 THEN
// Returns the list of files found in the archive
// Display the files in a list
descompactado is boolean
ArquivoTxt is string = zipListFile("Pacote")
ResExtractAll = zipExtractAll("Pacote")
IF fFileExist(ArquivoTxt) AND ResExtractAll = 0
descompactado = True
BufArquivoTxt = fLoadText(ArquivoTxt)
BufArquivoTxt = Uncrypt(BufArquivoTxt,sToken,encodeBASE64)
ExtensionFile = fExtractPath(T0023_Arquivo.T0023_NomeOriginal, fExtension)
fSaveBuffer("Arquivo."+ExtensionFile,BufArquivoTxt)
ELSE
descompactado = False
END
END
IF ResOpenArchive = 0
Ok = zipClose("Pacote")
END

T0023_Arquivo.T0023_Arquivo = BufArquivoTxt

HAdd(T0023_Arquivo)

END


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
3.651 mensagems
Popularité : +175 (223 votes)
Publicado em julho, 04 2020 - 3:50 PM
Para comprimir e descomprimir um texto use Compress e UNcompress

Veja os links abaixo

https://help.windev.com/en-US/…

https://help.windev.com/en-US/…


É bem simples, vc deve sempre retornar um array no soap para compatibilizar o webservice para terceiros se vc der result de string e nao de array somente produtos wx lê o teu webservice para o c#, java e outros poderem ler tem que ser array pega a string e add num array e coloca no result.

O zip vc pode mandar zipado uma doc ou pdf ou imagem

É bom analisar o timeout de processamento definido no WAS se tiver baixo o was mal configurado pode interromper e nao dar retorno se for muita informação.

Outra dica:

Se for uma lista de preços e de produtos vc baixa tudo na primeira veze depois só baixa o diferencial, produtos novos e alterados nao precisa baixar tudo de novo só ter nos cadastro a data de cadastro e alteração e no sql vc filtra com between usando a ultima data baixada e alterada

blz

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/