Exemplo de integração com J-Integra usando SOAP e TWSDLManager via AdvPL

Hoje vou mostrar como fazer uma integração com J-Integra utilizando o protocolo SOAP e a classe TWSDLManager via AdvPL.

Primeiramente jovens, esse exemplo bacanudo foi desenvolvido e disponibilizado pelo grande Edson Santos ( LinkedIn ).

Basicamente, para essa integração funcionar, você deve montar uma string com o conteúdo do XML que será enviado, depois instanciar a classe TWSDLManager em uma variável e fazer o envio das informações.

Com isso, você consegue encaixar ela dentro de pontos de entrada, como por exemplo, o MATA020 (em MVC), na seção MODELCOMMITNTTS.

Abaixo o trecho desenvolvido pelo Edson:


//Pegando a data e hora atual
cData := SubStr(dToS(dDataBase), 1, 4) + "-" + SubStr(dToS(dDataBase), 5, 2) + "-" + SubStr(dToS(dDataBase), 7, 2) //YYYY-MM-DD
cHora := Time()

//Pegando se é um fornecedor ativo
cFornAtivo := Iif(M->A2_MSBLQL == "2 ", "S", "N")

//Pegando a operação (se é inclusão, alteração ou exclusão
cOperacao := ""
If nOper == 3
	cOperacao := "I"
ElseIf nOper == 4
	cOperacao := "A"
ElseIf nOper == 5
	cOperacao := "E"
EndIf

//Zera as variáveis de erro e aviso
cErros := ""
cAvisos := ""
lHouveErro := .F.
cMsgErro := ""
cMsgSuces := ""

//Montando o XML que será enviado
cStringRet += ""  + CRLF
cStringRet += "" + CRLF
cStringRet += "" + CRLF
cStringRet += "" + CRLF
cStringRet +=     "" + CRLF
cStringRet +=         "1"+ CRLF
cStringRet +=         "1"+ CRLF
cStringRet +=         "" + SM0->M0_CGC + ""+ CRLF
cStringRet +=         "CADASTRO_FORNECEDOR"+ CRLF
cStringRet +=         "" + cData + " " + Alltrim(cHora) + " "+ CRLF
cStringRet +=         "1"+ CRLF
cStringRet +=         "PROTHEUS"+ CRLF
cStringRet +=         "1"+ CRLF
cStringRet +=         "MV"+ CRLF
cStringRet +=         ""+ CRLF
cStringRet +=         ""+ CRLF
cStringRet +=     "" + CRLF
cStringRet +=     "" + CRLF
cStringRet +=         "" + CRLF
cStringRet +=         "" + CRLF
cStringRet +=         "" + cOperacao + "" + CRLF
cStringRet +=         "" + CRLF
cStringRet +=         "" + CRLF
cStringRet +=         "" + M->A2_COD + M->A2_LOJA + "" + CRLF
cStringRet +=         "FORNECEDOR " + Alltrim(M->A2_NOME) + "" + CRLF
cStringRet +=         "" + Alltrim(M->A2_NREDUZ) + "" + CRLF
cStringRet +=         "" + Alltrim(M->A2_TIPO) + "" + CRLF
cStringRet +=         "F" + CRLF
cStringRet +=         "" + CRLF
cStringRet +=         "" + CRLF
cStringRet +=         "" + Alltrim(M->A2_CGC) + "" + CRLF
cStringRet +=         "" + Alltrim(M->A2_INSCR) + "" + CRLF
cStringRet +=         "" + Alltrim(M->A2_INSCRM) + "" + CRLF
cStringRet +=         "" + CRLF
cStringRet +=         "" + CRLF
cStringRet +=         "" + CRLF
cStringRet +=         "" + cFornAtivo + "" + CRLF        
cStringRet +=         "" + CRLF
cStringRet +=         "" + CRLF
cStringRet +=         "" + CRLF
cStringRet +=         "" + CRLF
cStringRet +=         "" + CRLF
cStringRet +=         "" + CRLF
cStringRet +=         "" + CRLF
cStringRet +=             "" + Alltrim(M->A2_END) + "" + CRLF
cStringRet +=             "" + CRLF
cStringRet +=             "" + Alltrim(M->A2_ENDCOMP) + "" + CRLF
cStringRet +=             "" + M->A2_CEP + "" + CRLF
cStringRet +=             "" + Alltrim(M->A2_BAIRRO) + "" + CRLF
cStringRet +=             "" + Alltrim(M->A2_MUN) + "" + CRLF
cStringRet +=             "" + M->A2_COD_MUN + "" + CRLF
cStringRet +=             "" + M->A2_EST + "" + CRLF
cStringRet +=         "" + CRLF
cStringRet +=         "" + CRLF
cStringRet +=         "" + CRLF
cStringRet +=             "" + CRLF
cStringRet +=                 "" + cOperacao + "" + CRLF //VERIFICAR O TIPO DE ALTERACAO
cStringRet +=                 "" + CRLF
cStringRet +=                 "1" + CRLF
cStringRet +=                 "" + Alltrim(M->A2_CONTATO) + "" + CRLF
cStringRet +=                 "" + Alltrim(M->A2_DDD + M->A2_TEL) + "    " + CRLF         
cStringRet +=             "" + CRLF
cStringRet +=         "" + CRLF
cStringRet +=     "" + CRLF
cStringRet += "]]>"+ CRLF
cStringRet += ""+ CRLF
cStringRet += ""+ CRLF
cStringRet += ""+ CRLF

//Instancia a classe na variável oWsdl
oWsdl := TWsdlManager():New()

//Define o modo de trabalho como "VERBOSE"
oWsdl:lVerbose := .T.          

//Tenta fazer o parse da URL
lRet := oWsdl:ParseURL("http://localhost:8180/jintegra-core/servicestst/WebservicePadraotst?wsdl") 
If lRet
    
    //Tenta definir a operação
    lRet := oWsdl:SetOperation("processar")
    If ! lRet 
        MsgAlert("Erro SetOperation: " + oWsdl:cError, "Atenção")
        lContinua := .F.
    EndIf
    
    //Se for continuar o processamento
    If lContinua
        //Envia o XML montado
        lRet := oWsdl:SendSoapMsg( cStringRet )
        
        //Se houve falha, exibe a mensagem
        If ! lRet
            MsgAlert("Erro SendSoapMsg: " + oWsdl:cError, "Atenção")
			
        Else
		
            //Pega a resposta do SOAP e transforma em Objeto a resposta
            cMsgRet := oWsdl:GetSoapResponse()
            oLido := XmlParser(cMsgRet, "_", @cErros, @cAvisos)
            
            //Se existir alguma mensagem de Warning, e quiser exibir, basta descomentar a linha do MsgInfo
            If ! Empty(cAvisos)
                //MsgInfo("Aviso(s) ao converter em objeto: " + cAvisos, "Atenção")
            EndIf
			
			//Se existe a tag de erro
            If At('', cMsgRet) > 0
                cMsgErro := oLido:_S_ENVELOPE:_S_BODY:_NS2_MENSAGEMRETORNO:_MENSAGEM:_MOTIVOERRO:_DESCRICAO:TEXT
                lHouveErro := .T.

            Else
                cMsgSuces := oLido:_S_ENVELOPE:_S_BODY:_NS2_MENSAGEMRETORNO:_MENSAGEM:_SUCESSO:_DESCRICAO:TEXT
                lHouveErro := .F.
            EndIf
			
            //Se houve erro ou deu certo, mostra a mensagem
            If lHouveErro
                MsgStop("Erro na Integração: " + cMsgErro, "Atenção")
            Else    
                MsgInfo("Sucesso na Integração: " + cMsgSuces, "Atenção")
            EndIF                                
        EndIf
    EndIf
	
Else
    MsgAlert("Erro ParseURL: " + oWsdl:cError, "Atenção")
EndIf

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação