Utilize qualquer Web Service a partir do Progress 4GL Luis B. Campos System Engineer Agenda Introdução Web Service Basics WSDL Analyzer Chamando um Web Service a partir do 4GL 2 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Web Service Client Disponível no OpenEdge® 10.0A AppServer não é necessário Client de uma aplicação diferente 3 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Web Services – Por que? Conectividade heterogênea Na arquitetura SOA eles tornam os serviços distribuídos possíveis Denominador comun menor que o EDI ou CORBA 4 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Web Services – Por que? Provedores de Web service disponíveis – Produtos: OpenEdge, Oracle, IBM DB/2, SalesForce.com, etc. – Serviços: Google, e-Bay, Commonwealth of Massachusetts, etc. Plataformas de Desenvolvimento: OpenEdge, .NET™, J2EE, Apache, WebSphere. 5 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Web Services – Por que não? Pode não ser eficiente Pode não estar disponível 6 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Web Service Basics - Onde? OpenEdge Reference Architecture Usuários Camada de Apresentação Serviços Empresariais Camada de Integração Camadas de Serviços de Negócio Camadas de Acesso a Dados Fontes de Dados Gerenciadas 7 © 2005 Progress Software Corporation Fontes de Dados Não Gerenciadas Chame Qualquer Web Service a partir do Progress 4GL Agenda Introdução Web Service Basics WSDL Analyzer Chamando um Web Service a partir do 4GL 8 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Web Service Basics – SOAP Message Simple Object Header Header Entry Header Entry … Access Protocol Envelope Body Body Entry Header opcional Entradas podem ser SOAP Faults (erros) Body Entry … 9 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Web Service Basics - WSDL Web Service Description Language Define Interface Codificação dos dados Transporte Endereço do serviço Contrato entre o client e o server 10 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Anatomia de uma Sessão Web Service WSDL Request WSDL Response OpenEdge 4GL Client SOAP Request Um provedor de Web Service SOAP Response SOAP Request SOAP Response 11 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Agenda Introdução Web Service Basics WSDL Analyzer – Introdução – Demonstração do Analyzer Chamando um Web Service a partir do 4GL 12 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Dicionário 4GL/WSDL 4GL WSDL AppServer™..…......….............Web service Persistent procedure..............Port type (interface) Internal procedure..................Operation 13 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Linha de Comando do WSDL Analyzer Gera a documentação 4GL para um web service C:\temp> bprowsdldoc http://api.google.com/GoogleSearch.wsdl google Documentation written to file:///c:\temp\google\index.html C:\temp> 14 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Anatomia do Projeto do Client WSDL Request WSDL Analyzer WSDL Response Documentos Gerados 15 © 2005 Progress Software Corporation Provedor do Web Service OpenEdge 4GL Client Chame Qualquer Web Service a partir do Progress 4GL Documentos Gerados Service Port type Data types index conexão & chamada dados complexos Operation Index 16 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Snapshots do Analyzer: Documentação do Serviço 17 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Snapshots do Analyzer: Documento do Serviço 18 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Snapshots do Analyzer : Port Type – Sumário da Conexão 19 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Snapshots do Analyzer : Port Type – Sumário da Operation 20 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Snapshots do Analyzer : Port Type – Exemplo da Operation 21 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Snapshots do Analyzer : Port Type – Parâmetros da Operation 22 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Snapshots do Analyzer : Port Type – Exemplo de Parâmetros Complexos 23 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Dados Complexos como TEMP-TABLE addCustomers Procedure prototype PROCEDURE addCustomers: DEFINE INPUT PARAMETER TABLE FOR customerList. DEFINE OUTPUT PARAMETER TABLE FOR conflictList. END PROCEDURE. 24 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Dados Complexos como TEMP-TABLE Exemplo DEFINE TEMP-TABLE customerList NAMESPACE-URI http://mycompany.com/schemas/customerList NAMESPACE-PREFIX "cust“ FIELD CustNum AS INTEGER FIELD Name AS CHARACTER XML-NODE-TYPE "Attribute“ FIELD Country AS CHARACTER FIELD Comments AS CHARACTER INDEX CustNum IS PRIMARY UNIQUE CustNum INDEX Name Name INDEX Comments IS WORD-INDEX Comments. 25 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Dados Complexos como TEMP-TABLE Parâmetros customerList This value is defined as a TEMP-TABLE. This value can also be expressed as a CustomerTable element in The http://mycompany.com/schemas/customerList namespace. As such, this parameter can be passed as a CHARACTER or LONGCHAR value containing an XML document. View example of XML. 26 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Agenda Introdução Web Service Basics WSDL Analyzer Chamando um Web Service a partir do 4GL – – – – Mapeamento de tipos de dados Conexão e chamada Manipulação do Header Manipulação de Erros 27 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Simples Mapeamento de Tipo de Dados XML Schema Data Type Progress 4GL Data Type string CHARACTER boolean LOGICAL decimal DECIMAL integer INTEGER float, double, duration CHARACTER CHARACTER e LONGCHAR podem sempre ser usados Para mapeamentos completos, veja a documentação 28 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Dados Complexos Representados de duas formas: 1. LONGCHAR/CHARACTER de documentos XML serializados 2. ProDataSet ou TEMP-TABLE quando possível (10.1A) Analyzer mostra exemplos de ambos. 29 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Conexão e Chamada Exatamente como um AppServer CREATE SERVER web-svc-handle. web-svc-handle:CONNECT(“-WSDL wsdl-url ws-connect-parms”). RUN port-type-name SET port-type-handle ON web-svc-handle. RUN operation IN port-type-handle(parameters). CREATE SERVER app-server-handle. app-server-handle:CONNECT(“appserver-connect-parms”). RUN persistent-proc PERSISTENT SET procedure-handle ON app-server-handle. RUN internal-proc IN procedure-handle(parameters). 30 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Resultados Google no Browser 31 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Exemplo de Conexão Selecionado 32 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Exemplos de Conexão e Chamada Colados 33 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Definições de Variáveis 34 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Connect e Set Port 35 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Chamada ao Google 36 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Resultado da Pesquisa Utilizando DOM 37 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Carga da TEMP-TABLE com os Resultados 38 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Resultados no 4GL Client 39 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Objetos 4GL SOAP Header Envelope SOAP-HEADER … SOAP-HEADER-ENTRYREF Header Header Entry Header Entry SOAP-HEADER-ENTRYREF … Body Body Entry 40 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL SOAP Headers Define um callback port-type-handle:SET-CALLBACK-PROCEDURE( “REQUEST-HEADER | RESPONSE-HEADER”, “request-handler-name”, web-service-handle). Escreve um callback PROCEDURE request-handler-name: DEFINE INPUT PARAMETER soap-header-handle AS HANDLE. DEFINE INPUT PARAMETER operation-namespace AS CHARACTER. DEFINE INPUT PARAMETER operation-local-name AS CHARACTER. END. 41 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Anatomia de um Erro no Web Service WSDL Request WSDL Response OpenEdge 4GL Client SOAP Request Provedor do Web Service SOAP Response (FAULT) 42 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL 4GL SOAP Fault Envelope fault code Body fault actor fault string Body Entry 43 © 2005 Progress Software Corporation <faultdetail> Chame Qualquer Web Service a partir do Progress 4GL Fault Objects do 4GL ERROR-STATUS SOAP-FAULT fault info SOAP-FAULT-DETAIL XML 44 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL SOAP Fault - Faultstring An error was detected while executing the Web Service request. (10893) 45 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL SOAP Fault - Detail <detail> <errorMessage> msg=The server application returned the error: Invoice not found; targetException=ERROR condition: The Server application has returned an error. (7243) (7211)] </errorMessage> <requestID> 172247e5b58beb30:5bb966:fb4fdb744a:-7fff#9 </requestID> </detail> 46 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Resumo Chamar um web service é fácil Use o WSDL Analyzer OpenEdge 4GL Client Web Service ou AppServer? 47 © 2005 Progress Software Corporation SOA-07: Call Any Web Service from the Progress 4GL Perguntas? 48 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL Obrigado! 49 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL 50 © 2005 Progress Software Corporation Chame Qualquer Web Service a partir do Progress 4GL