Preview only show first 10 pages with watermark. For full document please download

Visual Foxpro - Utilizando Xml Web Services

Manipulando XML via VFP.

   EMBED


Share

Transcript

iMasters - Por uma Internet mais criativa e dinâmica Página 1 Nilton Paulino Sexta-feira, 12 de dezembro de 2003 Utilizando XML Web Services Olá pessoal! Tudo bem com vocês? É um prazer poder publicar mais uma edição desta coluna. Obrigado pelo carinho que tenho recebido daqueles que me escrevem e também meu muito obrigado àqueles que têm enviado a coluna para outros. Estamos indo bem! Como mencionei na coluna passada, esta semana estaríamos começando a colocar em prática a utilização dos Web Services. Antes de começarmos a produzir nossos próprios Web Services é muito importante que aprendamos a consumí-los. Consumindo Web Services Como nosso principal objetivo é passar a idéia de como funcionam os Web Services, estaremos utilizando um Web Service para consultas ao CPF de clientes para saber se há pendências ou não. Este componente foi escrito apenas para fins didáticos, mas retrata uma figura de utilização diária em todo estabelecimento comercial e, portanto, de necessidade de qualquer aplicativo comercial ou financeiro. Instanciar Web Services para serem utilizados numa aplicação desenvolvida em Visual FoxPro é algo extremamente simples e há mais de uma forma de fazê-lo. Como estou trabalhando com o VFP 8.0, o que vou mostrar aqui pode diferenciar um pouco daqueles que usam versões anteriores, mas nada que não permita a utilização dos exemplos aqui apresentados. Para usufruir das facilidades do IntelliSense para trabalharmos com o Web Service é necessário registrá-lo. Proceda da seguinte forma: 1. Acesse o menu Tools / IntelliSense Manager. 2. Na página Types, clique no botão Web Services, conforme figura 1 abaixo. Figura 1 - IntelliSense Manager 3. Ao clicar no botão Web Services é apresentado o seguinte diálogo: Figura 2 - Registro de Web Services Usuários de versões anteriores a 8.0 devem obter um diálogo como o seguinte: Figura 2b - Registro de Web Services em versões anteriores a 8.0 http://imasters.uol.com.br/artigo/1614/visual_foxpro/utilizando_xml_web_services/imprimir/ 9/28/2010 8:36:30 AM iMasters - Por uma Internet mais criativa e dinâmica Página 2 4. Informe o endereço exibido na figura 2 para registrar o Web Service no seu IntelliSense, e finalmente clique em Register. Uma mensagem como a seguinte deverá aparecer: Figura 3 - Registro bem sucedido 5. Clique em Ok e depois em Done para sair. Feche o IntelliSense Manager. Agora que nosso Web Service está registrado podemos utilizá-lo conforme nossa necessidade. Inicialmente vou demonstrar duas formas de instanciação do componente de Web Service. Uma baseada na versão 8.0 e outra na versão 7.0 do VFP. Os demais exemplos serão baseados apenas na versão 8.0, bastando apenas que você faça as modificações baseadas no primeiro exemplo, caso não esteja usando a 8.0. Instanciando o Web Service na versão 8.0 1. Crie um novo arquivo de programa chamado conecta8.prg 2. Ative a Toolbox e clique na categoria My XML Web Services 3. Clique e arraste o componente cpf(consulta_cpf) para dentro da janela de programa conforme a figura 4: Figura 4 - Código para instanciar o Web Service no VFP 8.0 No código exibido na janela acima tudo já está preparado para utilizarmos os métodos de nosso Web Service bastando apenas que comecemos a codificar. Instanciando o Web Service na versão 7.0 1. Crie um novo arquivo de programa chamado conecta7.prg 2. Digite LOCAL loCPF AS Consulta_cpf, ou escolha a partir do IntelliSense como mostra a figura 5: Figura 5 - Instanciando o Web Service no VFP 7.0 3. Quando estamos usando o IntelliSense, ao dar Enter o código de instanciação do objeto já estará pronto como mostra a figura 6: http://imasters.uol.com.br/artigo/1614/visual_foxpro/utilizando_xml_web_services/imprimir/ 9/28/2010 8:36:30 AM iMasters - Por uma Internet mais criativa e dinâmica Página 3 Figura 6 - Código de instanciação gerado pelo IntelliSense Observe que ao digitar loCPF., os métodos do nosso Web Service já aparecem para que possamos escolher qualquer deles. Após a escolha de qualquer método o IntelliSense já exibe também a lista de parâmetros para o mesmo. Independente da versão do VFP que você estiver usando agora é só adicionar o código necessário para executar cada método. Vamos começar executando o método ListarClientes, conforme código a seguir: Listagem 1 LOCAL locpf AS "XML Web Service" * LOCAL locpf AS "MSSOAP.SoapClient30" * Do not remove or alter following line. It is used to support IntelliSense for your XML Web service. *__VFPWSDef__: locpf = http://foxweb.foxtotal.com.br/cpf/consulta_cpf.wsdl , consulta_cpf , cpfSoapPort LOCAL loException, lcErrorMsg, loWSHandler, lcXML TRY loWSHandler = NEWOBJECT( "WSHandler",IIF(VERSION(2)=0,"",HOME()+"FFC")+"_ws3client.vcx") locpf = loWSHandler.SetupClient ("http://foxweb.foxtotal.com.br/cpf/consulta_cpf.wsdl", "consulta_cpf", "cpfSoapPort") * Call your XML Web service here. ex: leResult = locpf.SomeMethod() * Chama método ListarClientes lcXML = loCPF.ListarClientes * Converte XML retornado em um cursor VFP XMLTOCURSOR(lcXML,"crsClientes",4) * Visualiza o resultado numa janela Browse BROWSE LAST CATCH TO loException lcErrorMsg="Error: "+TRANSFORM(loException.Errorno)+" - "+loException.Message DO CASE CASE VARTYPE(locpf)#"O" * Handle SOAP error connecting to web service CASE !EMPTY(locpf.FaultCode) * Handle SOAP error calling method lcErrorMsg=lcErrorMsg+CHR(13)+locpf.Detail OTHERWISE * Handle other error ENDCASE * Use for debugging purposes MESSAGEBOX(lcErrorMsg) FINALLY ENDTRY As linhas em destaque são aquelas que foram acrescentadas ao código original criado pelo VFP. São responsáveis por recuperar os dados no Web Service, converter o resultado obtido em formato XML para cursor e então apresentar os dados numa janela Browse. O resultado deve ser parecido com o seguinte: http://imasters.uol.com.br/artigo/1614/visual_foxpro/utilizando_xml_web_services/imprimir/ 9/28/2010 8:36:30 AM iMasters - Por uma Internet mais criativa e dinâmica Página 4 Figura 7 A inclusão de um novo cliente é algo muito simples. Aproveitando como referência o código da Listagem 1, apenas vamos substituir o código em azul pelo seguinte: loCPF.IncluiCliente("54345678901","MARIA APARECIDA") Ao executarmos o código da listagem 1 com a linha acima, teremos o cliente MARIA APARECIDA inclusa na nossa tabela de clientes do banco de dados. Agora vamos consultar se há pendências para o número de CPF do cliente, incluindo o código a seguir ao código da listagem 1, fazendo a substituição do código em destaque por este: * Chama método Consulta lcXML = loCPF.Consulta("82980861120") * Converte XML retornado em um cursor VFP XMLTOCURSOR(lcXML,"crsPendencia",4) * Visualiza o resultado numa janela Browse IF RECCOUNT("crsPendencia") <= 0 MESSAGEBOX("Nenhuma pendência para o cliente") ELSE BROWSE LAST ENDIF Quando houver alguma pendência para o CPF consultado, o resultado será exibido numa janela Browse como a seguinte: Figura 8 Procurei descrever com clareza os procedimentos desde o registro de um Web Service para uso até a forma de consumi-los em seus sistemas. Agora você mesmo pode testar os demais métodos do nosso Web Service de consulta a CPF. Qualquer dúvida na utilização destes exemplos, não deixe de me mandar um e-mail. Na nossa próxima coluna estarei mostrando como construir um Web Service. Usaremos este mesmo exemplo da consulta do CPF para facilitar o entendimento. Outras informações sobre Web Services Como comentei na coluna anterior, o acesso aos Web Services é realizado através do SOAP Toolkit da Microsoft. Caso você ainda não o possua instalado, faça o download do site da MS no endereço http://msdn.microsoft.com/soap/. Encontre Web Services prontos para serem utilizados: http://www.uddi.org http://msdn.microsoft.com/uddi Um grande abraço e até a próxima semana. http://imasters.uol.com.br/artigo/1614/visual_foxpro/utilizando_xml_web_services/imprimir/ 9/28/2010 8:36:30 AM