Consumindo um WebService SOAP através da TWSDLManager – Maratona AdvPL e TL++ 516

Nesse vídeo demonstraremos a utilização da classe TWSDLManager, que serve para consumir um WebService do tipo SOAP através das definições de sua WSDL.

Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function zExe516
Realiza a integração com um WebService SOAP através do WSDL
@type  Function
@author Atilio
@since 05/04/2023
@see https://tdn.totvs.com/display/tec/Classe+TWsdlManager
@obs 
    
    **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/

User Function zExe516()
    Local aArea      := FWGetArea()
    Local cURL       := "http://127.0.0.1:8091/ws/ZWSCLIENTES.apw?WSDL"
    Local cOperation := "VIEWCLI"
    Local oWSDL
    Local lRet
    Local cMsgWS     := ""
    Local cResp      := ""
    Local cJsonResp  := ""

    //Monta a mensagem que será enviada
    cMsgWS := ' <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://127.0.0.1:8091/"> ' + CRLF
    cMsgWS += '    <soapenv:Header/> ' + CRLF
    cMsgWS += '    <soapenv:Body> ' + CRLF
    cMsgWS += '       <ns:VIEWCLI> ' + CRLF
    cMsgWS += '          <ns:CVIEWRECE>C0000101</ns:CVIEWRECE> ' + CRLF
    cMsgWS += '       </ns:VIEWCLI> ' + CRLF
    cMsgWS += '    </soapenv:Body> ' + CRLF
    cMsgWS += ' </soapenv:Envelope> ' + CRLF

    //Instancia em um objeto e desabilita o check de CAs em caso de http ao invés de https, referência:
    //   https://centraldeatendimento.totvs.com/hc/pt-br/articles/5151712642839-Cross-Segmento-TOTVS-Backoffice-Linha-Protheus-ADVPL-Mensagem-An-exception-occurred-ar-1-0-WsdlParser-Exception-Could-not-parse-schema-http-schemas-xmlsoap-org-wsdl-
    oWsdl          := TWSDLManager():New()
	oWsdl:nTimeout := 120
    oWsdl:bNoCheckPeerCert := .T.

    //Faz o parse do WSDL
    If oWsdl:ParseURL(cUrl)
        
        //Define a operação que será consumida do WS
        lRet := oWsdl:SetOperation(cOperation)

        //Se deu certo, envia o texto e pega a resposta
        If lRet
            oWsdl:SendSoapMsg(cMsgWs)
            cResp := oWsdl:GetParsedResponse()

            //Se houver resposta do WS
            If ! Empty(cResp)
                cJsonResp := SubStr(cResp, At("{", cResp))
                ShowLog(cJsonResp)
            EndIf
        EndIf
    EndIf

    FWRestArea(aArea)
Return

Bom pessoal, por hoje é só.

Abraços e até 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