- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- WebServices (Integração)
- Erro retorno WebService classe TWsdlManager
Perguntas Erro retorno WebService classe TWsdlManager
- will
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 81
- Obrigados Recebidos: 0
4 anos 6 meses atrás #32853
por will
Erro retorno WebService classe TWsdlManager foi criado por will
Ao Tentar consumir o WebService
app.ravex.com.br/sivirafull_homo/service.asmx?WSDL
no retorno da função oWsdl:GetSoapResponse() (linha 266) é retornado o seguinte erro:
The server cannot service the request because the media type is unsupported.
Conseguem me ajudar a como resolver esse erro, procurei no TDN não consegui achar nada a respeito?
Segue trecho do fonte,
#INCLUDE 'PROTHEUS.CH'
#INCLUDE 'APWEBSRV.CH'
#INCLUDE 'TBICONN.CH'
#INCLUDE 'TBICODE.CH'
#INCLUDE 'XMLXFUN.CH'
#INCLUDE 'FILEIO.CH'
#INCLUDE 'TOTVS.CH'
#INCLUDE 'RESTFUL.CH'
#INCLUDE 'TOPCONN.CH'
User Function ADLOG055P()
Private oResp := ''
Private aSays := {}
Private aButtons := {}
Private cCadastro := "Exportação Ravex"
Private nOpca := 0
Private cPerg := 'ADLOG055P'
Private nId := 0
Private cErro := ''
Private cCFOP := "( "+Alltrim(GETMV("MV_#CFOPRD"))+" )"
Private cEndereco := ''
Private cBairro := ''
Private cCidade := ''
Private cCep := ''
Private cEstado := ''
Private nLTRC := 0
Private nTotReg := 0
Private cPedidos := ''
Private aRot := {}
Private aRots := {}
PRIVATE aSimple := {}
PRIVATE aComplex := {}
PRIVATE oWsdl := NIL
PRIVATE lRet := NIL
PRIVATE aOps := {}
Private cRetWs := ''
Private oXml := NIL
U_ADINF009P(SUBSTRING(ALLTRIM(PROCNAME()),3,LEN(ALLTRIM(PROCNAME()))) + '.PRW',SUBSTRING(ALLTRIM(PROCNAME()),3,LEN(ALLTRIM(PROCNAME()))),'Programa consumir de webservice ravex para Importacao de Pedidos Ravex')
//+
+
//|Cria grupo de perguntas. |
//+
+
MontaPerg()
//+
+
//|Monta Form Batch - Interface com o usuário. |
//+
+
Aadd(aSays,"Este programa tem a finalidade de Consumir WebService Ravex " )
Aadd(aSays,"Exportar Pedidos para o Ravex" )
Aadd(aButtons, { 5,.T.,{|o| Pergunte(cPerg,.T.) }})
Aadd(aButtons, { 1,.T.,{|o| nOpca:=1, o:oWnd:End(), Processa({||IMPORTPED()},"Consumindo WebService","Aguarde...")}})
Aadd(aButtons, { 2,.T.,{|o| nOpca:=2, o:oWnd:End() }})
FormBatch(cCadastro, aSays, aButtons)
RETURN(NIL)
STATIC FUNCTION IMPORTPED()
Local cError := ''
Local cWarning := ''
Local cXml := ''
Local oXML := NIL
DelClassIntF() // COMANDO PARA LIMPAR A MEMORIA WILLIAM COSTA CHAMADO 041161 || ADM.LOG || DIEGO || INTEGRACAO RAVEX 02/05/2018
// Cria o objeto da classe TWsdlManager
oWsdl := TWsdlManager():New()
oWsdl:lProcResp := .F.
oWsdl:nTimeout := 900
//se a pergunta não tiver preenchida corretamente da mensagem de erro.
IF EMPTY(MV_PAR01) .OR.;
EMPTY(MV_PAR01) .OR.;
ALLTRIM(MV_PAR04) == ''
MSGSTOP("OLÁ " + Alltrim(cUserName) + ", Parâmetros não cadastrados corretamente, impossivel continuar.", "ADLOG055P-01")
RETURN(NIL)
ENDIF
lRet := oWsdl:ParseURL( " app.ravex.com.br/sivirafull_homo/service.asmx?WSDL " )
IF lRet == .F.
CONOUT( "Erro: " + oWsdl:cError )
RETURN(NIL)
ENDIF
aOps := oWsdl:ListOperations()
IF LEN(aOps) == 0
CONOUT( "Erro: " + oWsdl:cError )
RETURN(NIL)
ENDIF
// VARINFO( "", aOps )
// Define a operação
lRet := oWsdl:SetOperation("ImportarPedidos")
IF lRet == .F.
CONOUT( "Erro: " + oWsdl:cError )
RETURN(NIL)
ENDIF
cXml := '<?xml version="1.0" encoding="utf-8"?>'
cXml += '<soap:Envelope xmlns:soap=" schemas.xmlsoap.org/soap/envelope/ " xmlns:xsd=" www.w3.org/2001/XMLSchema " xmlns:xsi=" www.w3.org/2001/XMLSchema-instance ">'
cXml += ' <soap:Body>'
cXml += ' <ImportarPedidos xmlns=" app.ravex.com.br/sivirafull_homo/Service.asmx ">'
cXml += ' <Login>'+'olamundo'+'</Login>'
cXml += ' <Senha>'+'olamundo'+'</Senha>'
cXml += ' <Pedidos>'
SqlPedidos()
nTotReg := Contar("TRC","!Eof()")
ProcRegua(nTotReg)
TRC->(DbGoTop())
While TRC->(!EOF())
nLTRC := nLTRC + 1 //soma linha do nó
IncProc("PV: " + TRC->C5_NUM + ' ' + CVALTOCHAR(nLTRC) + '/' + CVALTOCHAR(nTotReg))
//Aadd(aClientes,u_ADLOG043P(TRC->C5_CLIENTE,TRC->C5_LOJACLI)) //Enviar o Cliente para o Ravex
cEndereco := ''
cBairro := ''
cCidade := ''
cCep := ''
IF Alltrim(TRC->A1_SATIV1)="50" .and. Alltrim(TRC->A1_SATIV2)$"51,52,53"
cEndereco := TRC->A1_ENDENT
cBairro := NOACENTO2(TRC->A1_BAIRROE)
cCidade := TRC->A1_MUNE
cCep := TRC->A1_CEPE
cEstado := TRC->A1_ESTE
ElseIf TRC->A1_IMPENT = "S" //Adoro para endereço de entrega diferente e cozinha industrial
cEndereco := TRC->A1_ENDENT
cBairro := NOACENTO2(TRC->A1_BAIRROE)
cCidade := TRC->A1_MUNE
cCep := TRC->A1_CEPE
cEstado := TRC->A1_ESTE
Else
cEndereco := TRC->A1_END
cBairro := TRC->A1_BAIRRO
cCidade := TRC->A1_MUN
cCep := TRC->A1_CEP
cEstado := TRC->A1_EST
Endif
cXml += ' <Pedido>'
cXml += ' <Numero>' + TRC->C5_NUM + '</Numero>'
cXml += ' <OrdemCarregamento>' + ALLTRIM(TRC->C5_ROTEIRO) + '</OrdemCarregamento>'
cXml += ' <SequenciaProgramada>' + TRC->C5_SEQUENC + '</SequenciaProgramada>'
cXml += ' <IdOperadorLogistico>' + '0' + '</IdOperadorLogistico>'
cXml += ' <IdEmbarcador>' + '0' + '</IdEmbarcador>'
cXml += ' <IdRemetente>' + '0' + '</IdRemetente>'
cXml += ' <IdUnidade>' + '0' + '</IdUnidade>'
cXml += ' <EstimativaEntrega>' + SUBSTR(TRC->C5_DTENTR,1,4) + '-' + SUBSTR(TRC->C5_DTENTR,5,2)+ '-' + SUBSTR(TRC->C5_DTENTR,7,2) + "T" + '00:00:00' + '</EstimativaEntrega>'
cXml += ' <CnpjRemetente>' + ALLTRIM(RetField('SM0',1,cEmpAnt+cFilAnt,'M0_CGC')) + '</CnpjRemetente>'
cXml += ' <DataPedido>' + SUBSTR(TRC->C5_DTENTR,1,4) + '-' + SUBSTR(TRC->C5_DTENTR,5,2)+ '-' + SUBSTR(TRC->C5_DTENTR,7,2) + "T" + '00:00:00' + '</DataPedido>'
cXml += ' <CnpjUnidade>' + ALLTRIM(RetField('SM0',1,cEmpAnt+cFilAnt,'M0_CGC')) + '</CnpjUnidade>'
cXml += ' <CnpjCliente>' + POSICIONE('SA1',1,xFilial("SA1")+TRC->C5_CLIENTE+TRC->C5_LOJACLI,'A1_CGC') + '</CnpjCliente>'
cXml += ' <NomeCliente>' + NoAcento2(ALLTRIM(POSICIONE('SA1',1,xFilial("SA1")+TRC->C5_CLIENTE+TRC->C5_LOJACLI,'A1_NOME'))) + '</NomeCliente>'
cXml += ' <EnderecoCliente>' + ALLTRIM(cEndereco) + '</EnderecoCliente>'
cXml += ' <CepCliente>' + ALLTRIM(cCep) + '</CepCliente>'
cXml += ' <BairroCliente>' + ALLTRIM(cBairro) + '</BairroCliente>'
cXml += ' <CidadeCliente>' + ALLTRIM(cCidade) + '</CidadeCliente>'
cXml += ' <EstadoCliente>' + ALLTRIM(cEstado) + '</EstadoCliente>'
cXml += ' <LatitudeCliente>' + STRTRAN(TRC->A1_XLATITU,',','.') + '</LatitudeCliente>
cXml += ' <LongitudeCliente>' + STRTRAN(TRC->A1_XLONGIT,',','.') + '</LongitudeCliente>'
cXml += ' <ValorPedido>' + CVALTOCHAR(TRC->C5_XTOTPED) + '</ValorPedido>'
cXml += ' <PesoLiquido>' + CVALTOCHAR(TRC->C5_PESOL) + '</PesoLiquido>'
cXml += ' <PesoBruto>' + CVALTOCHAR(TRC->C5_PBRUTO) + '</PesoBruto>'
cXml += ' <Cubagem>' + '0' + '</Cubagem>'
cXml += ' <QtdeVolumes>' + CVALTOCHAR(TRC->C5_VOLUME1) + '</QtdeVolumes>'
cXml += ' <QtdeCaixas>' + '0' + '</QtdeCaixas>'
cXml += ' <Observacoes>' + TRC->C5_OBS + '</Observacoes>'
cXml += ' <Itens>'
SqlItens(TRC->C5_NUM)
While TRD->(!EOF())
//IncProc("Item PV: " + TRD->C6_PRODUTO + '||' + ALLTRIM(TRD->B1_DESC))
cXml += ' <ItemPedido>'
cXml += ' <Codigo>' + ALLTRIM(TRD->C6_PRODUTO) + '</Codigo>'
cXml += ' <Descricao>' + ALLTRIM(TRD->B1_DESC) + '</Descricao>'
cXml += ' <Unidade>' + ALLTRIM(TRD->C6_UM) + '</Unidade>'
cXml += ' <Quantidade>' + CVALTOCHAR(TRD->C6_QTDVEN) + '</Quantidade>'
cXml += ' <Cubagem>' + '0' + '</Cubagem>'
cXml += ' <PesoLiquido>' + CVALTOCHAR(TRD->C6_QTDVEN) + '</PesoLiquido>'
cXml += ' <PesoBruto>' + CVALTOCHAR(TRD->PESOBRUTO) + '</PesoBruto>'
cXml += ' <ValorUnitario>' + CVALTOCHAR(TRD->C6_PRCVEN) + '</ValorUnitario>'
cXml += ' </ItemPedido>'
TRD->(dbSkip())
ENDDO //FECHA WHILE DO TRE
TRD->(dbCloseArea())
cXml += ' </Itens>'
aRot := {}
AAdd(aRot,DTOC(STOD(TRC->C5_DTENTR)))
AAdd(aRot,TRC->C5_ROTEIRO)
AAdd(aRot,TRC->C5_NUM)
AAdd(aRots,aRot)
cXml += ' </Pedido>'
TRC->(dbSkip())
ENDDO //FECHA WHILE DO TRC
nLTRC := 0 // Zera o contador de linha do SQL TRC
TRC->(dbCloseArea())
cXml += ' </Pedidos>'
cXml += ' </ImportarPedidos>'
cXml += ' </soap:Body>'
cXml += '</soap:Envelope>'
IncProc("Enviando Pedidos para o WebService Ravex")
CONOUT("cXml: " + cXml)
// Envia a mensagem SOAP ao servidor
lRet := oWsdl:SendSoapMsg(cXml)
IF lRet == .F.
CONOUT("Erro cError: " + oWsdl:cError )
CONOUT("Erro cFaultCode: " + oWsdl:cFaultCode )
RETURN(NIL)
ENDIF
// Pega a mensagem de resposta
cRetWs := oWsdl:GetSoapResponse()
oXml := XmlParser(cRetWs, "_", @cError, @cWarning )
IF (oXml == NIL)
MsgStop("OLÁ " + Alltrim(cUserName) + CHR(13) + CHR(10) + ;
"Roteiro Inicial: " + MV_PAR03 + " Roteiro Final: " + MV_PAR04 + CHR(13) + CHR(10) + ;
"Com erro entre em contato com a T.I." + CHR(13) + CHR(10) + ;
"Msg Erro: " + cError, "ADLOG055P-03")
CONOUT(DToC(Date()) + " " + Time() + " Falha ao gerar Objeto XML : " + cError + " / " + cWarning)
RETURN(NIL)
ENDIF
IF Type('oXml:_SOAP_ENVELOPE:_SOAP_BODY:_NS1_SIMPLESTARTPROCESSRESPONSE:_RESULT:_ITEM[6]') <> "U"
cIdFluig := ALLTRIM(oXml:_SOAP_ENVELOPE:_SOAP_BODY:_NS1_SIMPLESTARTPROCESSRESPONSE:_RESULT:_ITEM[6]:TEXT)
cIdFluig := SUBSTR(cIdFluig,AT('=',cIdFluig) + 1,LEN(cIdFluig))
CONOUT( DToC(Date()) + " " + Time() + " ID FLUIG SALVO" )
/*
RECLOCK("SC7",.F.)
SC7->C7_XFLUIG := cIdFluig
MSUNLOCK()
*/
ELSE
MsgStop("OLÁ " + Alltrim(cUserName) + CHR(13) + CHR(10) + ;
"Roteiro Inicial: " + MV_PAR03 + " Roteiro Final: " + MV_PAR04 + CHR(13) + CHR(10) + ;
"Com erro entre em contato com a T.I." + CHR(13) + CHR(10) + ;
"Msg Erro: " + cError, "ADLOG055P-04")
CONOUT( DToC(Date()) + " " + Time() + " Não retornou a tag." )
RETURN(NIL)
ENDIF
IncProc("Processamento Finalizado")
RETURN(NIL)
STATIC FUNCTION MontaPerg()
Private bValid := NIL
Private cF3 := NIL
Private cSXG := NIL
Private cPyme := NIL
U_xPutSx1(cPerg,'01','Data Entrega de ?','','','mv_ch01','D',08,0,0,'G',bValid,cF3 ,cSXG,cPyme,'MV_PAR01')
U_xPutSx1(cPerg,'02','Data Entrega Ate ?','','','mv_ch02','D',08,0,0,'G',bValid,cF3 ,cSXG,cPyme,'MV_PAR02')
U_xPutSx1(cPerg,'03','Roteiro Ini de ?','','','mv_ch03','C',03,0,0,'G',bValid,cF3 ,cSXG,cPyme,'MV_PAR03')
U_xPutSx1(cPerg,'04','Roteiro Fin Ate ?','','','mv_ch04','C',03,0,0,'G',bValid,cF3 ,cSXG,cPyme,'MV_PAR04')
Pergunte(cPerg,.T.)
RETURN(NIL)
STATIC FUNCTION NoAcento2(cString)
Local cChar := ""
Local nX := 0
Local nY := 0
Local cVogal := "aeiouAEIOU"
Local cAgudo := "áéíóú"+"ÁÉÍÓÚ"
Local cCircu := "âêîôû"+"ÂÊÎÔÛ"
Local cTrema := "äëïöü"+"ÄËÏÖÜ"
Local cCrase := "àèìòù"+"ÀÈÌÒÙ"
Local cTio := "ãõÃÕ"
Local cCecid := "çÇ"
Local cMaior := "<"
Local cMenor := ">"
For nX:= 1 To Len(cString)
cChar:=SubStr(cString, nX, 1)
IF cChar$cAgudo+cCircu+cTrema+cCecid+cTio+cCrase
nY:= At(cChar,cAgudo)
If nY > 0
cString := StrTran(cString,cChar,SubStr(cVogal,nY,1))
EndIf
nY:= At(cChar,cCircu)
If nY > 0
cString := StrTran(cString,cChar,SubStr(cVogal,nY,1))
EndIf
nY:= At(cChar,cTrema)
If nY > 0
cString := StrTran(cString,cChar,SubStr(cVogal,nY,1))
EndIf
nY:= At(cChar,cCrase)
If nY > 0
cString := StrTran(cString,cChar,SubStr(cVogal,nY,1))
EndIf
nY:= At(cChar,cTio)
If nY > 0
cString := StrTran(cString,cChar,SubStr("aoAO",nY,1))
EndIf
nY:= At(cChar,cCecid)
If nY > 0
cString := StrTran(cString,cChar,SubStr("cC",nY,1))
EndIf
Endif
Next
If cMaior$ cString
cString := strTran( cString, cMaior, "" )
EndIf
If cMenor$ cString
cString := strTran( cString, cMenor, "" )
EndIf
cString := StrTran( cString, CRLF, " " )
For nX:=1 To Len(cString)
cChar:=SubStr(cString, nX, 1)
If (Asc(cChar) < 32 .Or. Asc(cChar) > 123) .and. !cChar $ '|'
cString:=StrTran(cString,cChar,".")
Endif
Next nX
//Especifico Adoro devido a erro XML não solucionado versao 3.10
cString := StrTran(cString,"&","e")
Return(cString)
STATIC FUNCTION SqlPedidos()
Local cDtIni := DTOS(MV_PAR01)
Local cDtFin := DTOS(MV_PAR02)
BeginSQL Alias "TRC"
%NoPARSER%
SELECT SC5.C5_NUM,
SC5.C5_FILIAL,
SC5.C5_EMISSAO,
SC5.C5_DTENTR,
SC5.C5_ROTEIRO,
SC5.C5_CLIENTE,
SC5.C5_LOJACLI,
SA1.A1_SATIV1,
SA1.A1_SATIV2,
SA1.A1_ENDENT,
SA1.A1_BAIRROE,
SA1.A1_MUNE,
SA1.A1_CEPE,
SA1.A1_IMPENT,
SA1.A1_END,
SA1.A1_BAIRRO,
SA1.A1_MUN,
SA1.A1_CEP,
SA1.A1_ESTE,
SA1.A1_EST,
SC5.C5_PBRUTO,
SC5.C5_PESOL,
SC5.C5_SEQUENC,
SC5.C5_XTOTPED,
SC5.C5_VOLUME1,
SA1.A1_CGC,
SA1.A1_XLATITU,
SA1.A1_XLONGIT,
SC5.C5_OBS
FROM %Table:SC5% SC5 /*WITH(NOLOCK) */
INNER JOIN %Table:SA1% SA1 /*WITH(NOLOCK)*/
ON A1_FILIAL = %EXP:FWXFILIAL('SA1')%
AND A1_COD = SC5.C5_CLIENTE
AND A1_LOJA = SC5.C5_LOJACLI
AND SA1.%notDel%
WHERE SC5.C5_FILIAL = %EXP:FWXFILIAL('SC5')%
AND SC5.C5_DTENTR >= %EXP:cDtIni%
AND SC5.C5_DTENTR <= %EXP:cDtFin%
AND SC5.C5_ROTEIRO >= %EXP:MV_PAR03%
AND SC5.C5_ROTEIRO <= %EXP:MV_PAR04%
AND SC5.C5_NOTA = ''
AND SC5.C5_SERIE = ''
AND SC5.%notDel%
ORDER BY SC5.C5_FILIAL,SC5.C5_DTENTR,SC5.C5_ROTEIRO,SC5.C5_NUM
EndSQl
RETURN(NIL)
STATIC FUNCTION SqlItens(cNum)
Local cWhere := ''
cWhere := '%' + cCFOP + '%'
BeginSQL Alias "TRD"
%NoPARSER%
SELECT C6_PRODUTO,
B1_DESC,
C6_UM,
C6_ENTREG,
C6_QTDVEN,
CASE WHEN (SELECT TOP(1) ZC_TARA FROM SZC010 WITH(NOLOCK) WHERE ZC_UNIDADE = C6_SEGUM) IS NOT NULL THEN (C6_UNSVEN * (SELECT TOP(1) ZC_TARA FROM SZC010 WITH(NOLOCK) WHERE ZC_UNIDADE = C6_SEGUM)) ELSE 0 END + C6_QTDVEN AS PESOBRUTO,
C6_UNSVEN,
C6_PRCVEN
FROM %TABLE:SC6%
INNER JOIN %TABLE:SB1% WITH(NOLOCK)
ON B1_FILIAL = ' '
AND B1_COD = C6_PRODUTO
AND SB1010.D_E_L_E_T_ <> '*'
WHERE C6_FILIAL = %EXP:FWXFILIAL('SC6')%
AND C6_NUM = %EXP:cNum%
//AND (C6_QTDVEN - C6_QTDENT) > 0
AND C6_CF NOT IN %EXP:cWhere%
AND SC6010.D_E_L_E_T_ <> '*'
ORDER BY C6_ITEM
EndSQl
RETURN(NIL)
no retorno da função oWsdl:GetSoapResponse() (linha 266) é retornado o seguinte erro:
The server cannot service the request because the media type is unsupported.
Conseguem me ajudar a como resolver esse erro, procurei no TDN não consegui achar nada a respeito?
Segue trecho do fonte,
#INCLUDE 'PROTHEUS.CH'
#INCLUDE 'APWEBSRV.CH'
#INCLUDE 'TBICONN.CH'
#INCLUDE 'TBICODE.CH'
#INCLUDE 'XMLXFUN.CH'
#INCLUDE 'FILEIO.CH'
#INCLUDE 'TOTVS.CH'
#INCLUDE 'RESTFUL.CH'
#INCLUDE 'TOPCONN.CH'
User Function ADLOG055P()
Private oResp := ''
Private aSays := {}
Private aButtons := {}
Private cCadastro := "Exportação Ravex"
Private nOpca := 0
Private cPerg := 'ADLOG055P'
Private nId := 0
Private cErro := ''
Private cCFOP := "( "+Alltrim(GETMV("MV_#CFOPRD"))+" )"
Private cEndereco := ''
Private cBairro := ''
Private cCidade := ''
Private cCep := ''
Private cEstado := ''
Private nLTRC := 0
Private nTotReg := 0
Private cPedidos := ''
Private aRot := {}
Private aRots := {}
PRIVATE aSimple := {}
PRIVATE aComplex := {}
PRIVATE oWsdl := NIL
PRIVATE lRet := NIL
PRIVATE aOps := {}
Private cRetWs := ''
Private oXml := NIL
U_ADINF009P(SUBSTRING(ALLTRIM(PROCNAME()),3,LEN(ALLTRIM(PROCNAME()))) + '.PRW',SUBSTRING(ALLTRIM(PROCNAME()),3,LEN(ALLTRIM(PROCNAME()))),'Programa consumir de webservice ravex para Importacao de Pedidos Ravex')
//+
+
//|Cria grupo de perguntas. |
//+
+
MontaPerg()
//+
+
//|Monta Form Batch - Interface com o usuário. |
//+
+
Aadd(aSays,"Este programa tem a finalidade de Consumir WebService Ravex " )
Aadd(aSays,"Exportar Pedidos para o Ravex" )
Aadd(aButtons, { 5,.T.,{|o| Pergunte(cPerg,.T.) }})
Aadd(aButtons, { 1,.T.,{|o| nOpca:=1, o:oWnd:End(), Processa({||IMPORTPED()},"Consumindo WebService","Aguarde...")}})
Aadd(aButtons, { 2,.T.,{|o| nOpca:=2, o:oWnd:End() }})
FormBatch(cCadastro, aSays, aButtons)
RETURN(NIL)
STATIC FUNCTION IMPORTPED()
Local cError := ''
Local cWarning := ''
Local cXml := ''
Local oXML := NIL
DelClassIntF() // COMANDO PARA LIMPAR A MEMORIA WILLIAM COSTA CHAMADO 041161 || ADM.LOG || DIEGO || INTEGRACAO RAVEX 02/05/2018
// Cria o objeto da classe TWsdlManager
oWsdl := TWsdlManager():New()
oWsdl:lProcResp := .F.
oWsdl:nTimeout := 900
//se a pergunta não tiver preenchida corretamente da mensagem de erro.
IF EMPTY(MV_PAR01) .OR.;
EMPTY(MV_PAR01) .OR.;
ALLTRIM(MV_PAR04) == ''
MSGSTOP("OLÁ " + Alltrim(cUserName) + ", Parâmetros não cadastrados corretamente, impossivel continuar.", "ADLOG055P-01")
RETURN(NIL)
ENDIF
lRet := oWsdl:ParseURL( " app.ravex.com.br/sivirafull_homo/service.asmx?WSDL " )
IF lRet == .F.
CONOUT( "Erro: " + oWsdl:cError )
RETURN(NIL)
ENDIF
aOps := oWsdl:ListOperations()
IF LEN(aOps) == 0
CONOUT( "Erro: " + oWsdl:cError )
RETURN(NIL)
ENDIF
// VARINFO( "", aOps )
// Define a operação
lRet := oWsdl:SetOperation("ImportarPedidos")
IF lRet == .F.
CONOUT( "Erro: " + oWsdl:cError )
RETURN(NIL)
ENDIF
cXml := '<?xml version="1.0" encoding="utf-8"?>'
cXml += '<soap:Envelope xmlns:soap=" schemas.xmlsoap.org/soap/envelope/ " xmlns:xsd=" www.w3.org/2001/XMLSchema " xmlns:xsi=" www.w3.org/2001/XMLSchema-instance ">'
cXml += ' <soap:Body>'
cXml += ' <ImportarPedidos xmlns=" app.ravex.com.br/sivirafull_homo/Service.asmx ">'
cXml += ' <Login>'+'olamundo'+'</Login>'
cXml += ' <Senha>'+'olamundo'+'</Senha>'
cXml += ' <Pedidos>'
SqlPedidos()
nTotReg := Contar("TRC","!Eof()")
ProcRegua(nTotReg)
TRC->(DbGoTop())
While TRC->(!EOF())
nLTRC := nLTRC + 1 //soma linha do nó
IncProc("PV: " + TRC->C5_NUM + ' ' + CVALTOCHAR(nLTRC) + '/' + CVALTOCHAR(nTotReg))
//Aadd(aClientes,u_ADLOG043P(TRC->C5_CLIENTE,TRC->C5_LOJACLI)) //Enviar o Cliente para o Ravex
cEndereco := ''
cBairro := ''
cCidade := ''
cCep := ''
IF Alltrim(TRC->A1_SATIV1)="50" .and. Alltrim(TRC->A1_SATIV2)$"51,52,53"
cEndereco := TRC->A1_ENDENT
cBairro := NOACENTO2(TRC->A1_BAIRROE)
cCidade := TRC->A1_MUNE
cCep := TRC->A1_CEPE
cEstado := TRC->A1_ESTE
ElseIf TRC->A1_IMPENT = "S" //Adoro para endereço de entrega diferente e cozinha industrial
cEndereco := TRC->A1_ENDENT
cBairro := NOACENTO2(TRC->A1_BAIRROE)
cCidade := TRC->A1_MUNE
cCep := TRC->A1_CEPE
cEstado := TRC->A1_ESTE
Else
cEndereco := TRC->A1_END
cBairro := TRC->A1_BAIRRO
cCidade := TRC->A1_MUN
cCep := TRC->A1_CEP
cEstado := TRC->A1_EST
Endif
cXml += ' <Pedido>'
cXml += ' <Numero>' + TRC->C5_NUM + '</Numero>'
cXml += ' <OrdemCarregamento>' + ALLTRIM(TRC->C5_ROTEIRO) + '</OrdemCarregamento>'
cXml += ' <SequenciaProgramada>' + TRC->C5_SEQUENC + '</SequenciaProgramada>'
cXml += ' <IdOperadorLogistico>' + '0' + '</IdOperadorLogistico>'
cXml += ' <IdEmbarcador>' + '0' + '</IdEmbarcador>'
cXml += ' <IdRemetente>' + '0' + '</IdRemetente>'
cXml += ' <IdUnidade>' + '0' + '</IdUnidade>'
cXml += ' <EstimativaEntrega>' + SUBSTR(TRC->C5_DTENTR,1,4) + '-' + SUBSTR(TRC->C5_DTENTR,5,2)+ '-' + SUBSTR(TRC->C5_DTENTR,7,2) + "T" + '00:00:00' + '</EstimativaEntrega>'
cXml += ' <CnpjRemetente>' + ALLTRIM(RetField('SM0',1,cEmpAnt+cFilAnt,'M0_CGC')) + '</CnpjRemetente>'
cXml += ' <DataPedido>' + SUBSTR(TRC->C5_DTENTR,1,4) + '-' + SUBSTR(TRC->C5_DTENTR,5,2)+ '-' + SUBSTR(TRC->C5_DTENTR,7,2) + "T" + '00:00:00' + '</DataPedido>'
cXml += ' <CnpjUnidade>' + ALLTRIM(RetField('SM0',1,cEmpAnt+cFilAnt,'M0_CGC')) + '</CnpjUnidade>'
cXml += ' <CnpjCliente>' + POSICIONE('SA1',1,xFilial("SA1")+TRC->C5_CLIENTE+TRC->C5_LOJACLI,'A1_CGC') + '</CnpjCliente>'
cXml += ' <NomeCliente>' + NoAcento2(ALLTRIM(POSICIONE('SA1',1,xFilial("SA1")+TRC->C5_CLIENTE+TRC->C5_LOJACLI,'A1_NOME'))) + '</NomeCliente>'
cXml += ' <EnderecoCliente>' + ALLTRIM(cEndereco) + '</EnderecoCliente>'
cXml += ' <CepCliente>' + ALLTRIM(cCep) + '</CepCliente>'
cXml += ' <BairroCliente>' + ALLTRIM(cBairro) + '</BairroCliente>'
cXml += ' <CidadeCliente>' + ALLTRIM(cCidade) + '</CidadeCliente>'
cXml += ' <EstadoCliente>' + ALLTRIM(cEstado) + '</EstadoCliente>'
cXml += ' <LatitudeCliente>' + STRTRAN(TRC->A1_XLATITU,',','.') + '</LatitudeCliente>
cXml += ' <LongitudeCliente>' + STRTRAN(TRC->A1_XLONGIT,',','.') + '</LongitudeCliente>'
cXml += ' <ValorPedido>' + CVALTOCHAR(TRC->C5_XTOTPED) + '</ValorPedido>'
cXml += ' <PesoLiquido>' + CVALTOCHAR(TRC->C5_PESOL) + '</PesoLiquido>'
cXml += ' <PesoBruto>' + CVALTOCHAR(TRC->C5_PBRUTO) + '</PesoBruto>'
cXml += ' <Cubagem>' + '0' + '</Cubagem>'
cXml += ' <QtdeVolumes>' + CVALTOCHAR(TRC->C5_VOLUME1) + '</QtdeVolumes>'
cXml += ' <QtdeCaixas>' + '0' + '</QtdeCaixas>'
cXml += ' <Observacoes>' + TRC->C5_OBS + '</Observacoes>'
cXml += ' <Itens>'
SqlItens(TRC->C5_NUM)
While TRD->(!EOF())
//IncProc("Item PV: " + TRD->C6_PRODUTO + '||' + ALLTRIM(TRD->B1_DESC))
cXml += ' <ItemPedido>'
cXml += ' <Codigo>' + ALLTRIM(TRD->C6_PRODUTO) + '</Codigo>'
cXml += ' <Descricao>' + ALLTRIM(TRD->B1_DESC) + '</Descricao>'
cXml += ' <Unidade>' + ALLTRIM(TRD->C6_UM) + '</Unidade>'
cXml += ' <Quantidade>' + CVALTOCHAR(TRD->C6_QTDVEN) + '</Quantidade>'
cXml += ' <Cubagem>' + '0' + '</Cubagem>'
cXml += ' <PesoLiquido>' + CVALTOCHAR(TRD->C6_QTDVEN) + '</PesoLiquido>'
cXml += ' <PesoBruto>' + CVALTOCHAR(TRD->PESOBRUTO) + '</PesoBruto>'
cXml += ' <ValorUnitario>' + CVALTOCHAR(TRD->C6_PRCVEN) + '</ValorUnitario>'
cXml += ' </ItemPedido>'
TRD->(dbSkip())
ENDDO //FECHA WHILE DO TRE
TRD->(dbCloseArea())
cXml += ' </Itens>'
aRot := {}
AAdd(aRot,DTOC(STOD(TRC->C5_DTENTR)))
AAdd(aRot,TRC->C5_ROTEIRO)
AAdd(aRot,TRC->C5_NUM)
AAdd(aRots,aRot)
cXml += ' </Pedido>'
TRC->(dbSkip())
ENDDO //FECHA WHILE DO TRC
nLTRC := 0 // Zera o contador de linha do SQL TRC
TRC->(dbCloseArea())
cXml += ' </Pedidos>'
cXml += ' </ImportarPedidos>'
cXml += ' </soap:Body>'
cXml += '</soap:Envelope>'
IncProc("Enviando Pedidos para o WebService Ravex")
CONOUT("cXml: " + cXml)
// Envia a mensagem SOAP ao servidor
lRet := oWsdl:SendSoapMsg(cXml)
IF lRet == .F.
CONOUT("Erro cError: " + oWsdl:cError )
CONOUT("Erro cFaultCode: " + oWsdl:cFaultCode )
RETURN(NIL)
ENDIF
// Pega a mensagem de resposta
cRetWs := oWsdl:GetSoapResponse()
oXml := XmlParser(cRetWs, "_", @cError, @cWarning )
IF (oXml == NIL)
MsgStop("OLÁ " + Alltrim(cUserName) + CHR(13) + CHR(10) + ;
"Roteiro Inicial: " + MV_PAR03 + " Roteiro Final: " + MV_PAR04 + CHR(13) + CHR(10) + ;
"Com erro entre em contato com a T.I." + CHR(13) + CHR(10) + ;
"Msg Erro: " + cError, "ADLOG055P-03")
CONOUT(DToC(Date()) + " " + Time() + " Falha ao gerar Objeto XML : " + cError + " / " + cWarning)
RETURN(NIL)
ENDIF
IF Type('oXml:_SOAP_ENVELOPE:_SOAP_BODY:_NS1_SIMPLESTARTPROCESSRESPONSE:_RESULT:_ITEM[6]') <> "U"
cIdFluig := ALLTRIM(oXml:_SOAP_ENVELOPE:_SOAP_BODY:_NS1_SIMPLESTARTPROCESSRESPONSE:_RESULT:_ITEM[6]:TEXT)
cIdFluig := SUBSTR(cIdFluig,AT('=',cIdFluig) + 1,LEN(cIdFluig))
CONOUT( DToC(Date()) + " " + Time() + " ID FLUIG SALVO" )
/*
RECLOCK("SC7",.F.)
SC7->C7_XFLUIG := cIdFluig
MSUNLOCK()
*/
ELSE
MsgStop("OLÁ " + Alltrim(cUserName) + CHR(13) + CHR(10) + ;
"Roteiro Inicial: " + MV_PAR03 + " Roteiro Final: " + MV_PAR04 + CHR(13) + CHR(10) + ;
"Com erro entre em contato com a T.I." + CHR(13) + CHR(10) + ;
"Msg Erro: " + cError, "ADLOG055P-04")
CONOUT( DToC(Date()) + " " + Time() + " Não retornou a tag." )
RETURN(NIL)
ENDIF
IncProc("Processamento Finalizado")
RETURN(NIL)
STATIC FUNCTION MontaPerg()
Private bValid := NIL
Private cF3 := NIL
Private cSXG := NIL
Private cPyme := NIL
U_xPutSx1(cPerg,'01','Data Entrega de ?','','','mv_ch01','D',08,0,0,'G',bValid,cF3 ,cSXG,cPyme,'MV_PAR01')
U_xPutSx1(cPerg,'02','Data Entrega Ate ?','','','mv_ch02','D',08,0,0,'G',bValid,cF3 ,cSXG,cPyme,'MV_PAR02')
U_xPutSx1(cPerg,'03','Roteiro Ini de ?','','','mv_ch03','C',03,0,0,'G',bValid,cF3 ,cSXG,cPyme,'MV_PAR03')
U_xPutSx1(cPerg,'04','Roteiro Fin Ate ?','','','mv_ch04','C',03,0,0,'G',bValid,cF3 ,cSXG,cPyme,'MV_PAR04')
Pergunte(cPerg,.T.)
RETURN(NIL)
STATIC FUNCTION NoAcento2(cString)
Local cChar := ""
Local nX := 0
Local nY := 0
Local cVogal := "aeiouAEIOU"
Local cAgudo := "áéíóú"+"ÁÉÍÓÚ"
Local cCircu := "âêîôû"+"ÂÊÎÔÛ"
Local cTrema := "äëïöü"+"ÄËÏÖÜ"
Local cCrase := "àèìòù"+"ÀÈÌÒÙ"
Local cTio := "ãõÃÕ"
Local cCecid := "çÇ"
Local cMaior := "<"
Local cMenor := ">"
For nX:= 1 To Len(cString)
cChar:=SubStr(cString, nX, 1)
IF cChar$cAgudo+cCircu+cTrema+cCecid+cTio+cCrase
nY:= At(cChar,cAgudo)
If nY > 0
cString := StrTran(cString,cChar,SubStr(cVogal,nY,1))
EndIf
nY:= At(cChar,cCircu)
If nY > 0
cString := StrTran(cString,cChar,SubStr(cVogal,nY,1))
EndIf
nY:= At(cChar,cTrema)
If nY > 0
cString := StrTran(cString,cChar,SubStr(cVogal,nY,1))
EndIf
nY:= At(cChar,cCrase)
If nY > 0
cString := StrTran(cString,cChar,SubStr(cVogal,nY,1))
EndIf
nY:= At(cChar,cTio)
If nY > 0
cString := StrTran(cString,cChar,SubStr("aoAO",nY,1))
EndIf
nY:= At(cChar,cCecid)
If nY > 0
cString := StrTran(cString,cChar,SubStr("cC",nY,1))
EndIf
Endif
Next
If cMaior$ cString
cString := strTran( cString, cMaior, "" )
EndIf
If cMenor$ cString
cString := strTran( cString, cMenor, "" )
EndIf
cString := StrTran( cString, CRLF, " " )
For nX:=1 To Len(cString)
cChar:=SubStr(cString, nX, 1)
If (Asc(cChar) < 32 .Or. Asc(cChar) > 123) .and. !cChar $ '|'
cString:=StrTran(cString,cChar,".")
Endif
Next nX
//Especifico Adoro devido a erro XML não solucionado versao 3.10
cString := StrTran(cString,"&","e")
Return(cString)
STATIC FUNCTION SqlPedidos()
Local cDtIni := DTOS(MV_PAR01)
Local cDtFin := DTOS(MV_PAR02)
BeginSQL Alias "TRC"
%NoPARSER%
SELECT SC5.C5_NUM,
SC5.C5_FILIAL,
SC5.C5_EMISSAO,
SC5.C5_DTENTR,
SC5.C5_ROTEIRO,
SC5.C5_CLIENTE,
SC5.C5_LOJACLI,
SA1.A1_SATIV1,
SA1.A1_SATIV2,
SA1.A1_ENDENT,
SA1.A1_BAIRROE,
SA1.A1_MUNE,
SA1.A1_CEPE,
SA1.A1_IMPENT,
SA1.A1_END,
SA1.A1_BAIRRO,
SA1.A1_MUN,
SA1.A1_CEP,
SA1.A1_ESTE,
SA1.A1_EST,
SC5.C5_PBRUTO,
SC5.C5_PESOL,
SC5.C5_SEQUENC,
SC5.C5_XTOTPED,
SC5.C5_VOLUME1,
SA1.A1_CGC,
SA1.A1_XLATITU,
SA1.A1_XLONGIT,
SC5.C5_OBS
FROM %Table:SC5% SC5 /*WITH(NOLOCK) */
INNER JOIN %Table:SA1% SA1 /*WITH(NOLOCK)*/
ON A1_FILIAL = %EXP:FWXFILIAL('SA1')%
AND A1_COD = SC5.C5_CLIENTE
AND A1_LOJA = SC5.C5_LOJACLI
AND SA1.%notDel%
WHERE SC5.C5_FILIAL = %EXP:FWXFILIAL('SC5')%
AND SC5.C5_DTENTR >= %EXP:cDtIni%
AND SC5.C5_DTENTR <= %EXP:cDtFin%
AND SC5.C5_ROTEIRO >= %EXP:MV_PAR03%
AND SC5.C5_ROTEIRO <= %EXP:MV_PAR04%
AND SC5.C5_NOTA = ''
AND SC5.C5_SERIE = ''
AND SC5.%notDel%
ORDER BY SC5.C5_FILIAL,SC5.C5_DTENTR,SC5.C5_ROTEIRO,SC5.C5_NUM
EndSQl
RETURN(NIL)
STATIC FUNCTION SqlItens(cNum)
Local cWhere := ''
cWhere := '%' + cCFOP + '%'
BeginSQL Alias "TRD"
%NoPARSER%
SELECT C6_PRODUTO,
B1_DESC,
C6_UM,
C6_ENTREG,
C6_QTDVEN,
CASE WHEN (SELECT TOP(1) ZC_TARA FROM SZC010 WITH(NOLOCK) WHERE ZC_UNIDADE = C6_SEGUM) IS NOT NULL THEN (C6_UNSVEN * (SELECT TOP(1) ZC_TARA FROM SZC010 WITH(NOLOCK) WHERE ZC_UNIDADE = C6_SEGUM)) ELSE 0 END + C6_QTDVEN AS PESOBRUTO,
C6_UNSVEN,
C6_PRCVEN
FROM %TABLE:SC6%
INNER JOIN %TABLE:SB1% WITH(NOLOCK)
ON B1_FILIAL = ' '
AND B1_COD = C6_PRODUTO
AND SB1010.D_E_L_E_T_ <> '*'
WHERE C6_FILIAL = %EXP:FWXFILIAL('SC6')%
AND C6_NUM = %EXP:cNum%
//AND (C6_QTDVEN - C6_QTDENT) > 0
AND C6_CF NOT IN %EXP:cWhere%
AND SC6010.D_E_L_E_T_ <> '*'
ORDER BY C6_ITEM
EndSQl
RETURN(NIL)
Por favor Acessar ou Registrar para participar da conversa.
- danielruffino
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 1
- Obrigados Recebidos: 0
4 anos 5 meses atrás #32887
por danielruffino
Respondido por danielruffino no tópico Erro retorno WebService classe TWsdlManager
Boa Tarde.
Will, conseguiu resolver esse erro?
Estou com o mesmo problema.
at.
Will, conseguiu resolver esse erro?
Estou com o mesmo problema.
at.
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- WebServices (Integração)
- Erro retorno WebService classe TWsdlManager
Tempo para a criação da página:0.103 segundos