msdn06_capa.JPG

Clique aqui para ler todos os artigos desta edição

 

Integração de sistemas com XML

por Alexandre Tarifa e Ícaro Bombonato

 

O XML é um padrão para identificação e descrição de dados. Ele tornou-se fundamental no mercado atual por facilitar a integração de dados entre aplicativos em qualquer tipo de plataforma (sistema operacional, banco de dados e linguagem de programação). Neste artigo, você verá como manipular arquivos XML utilizando o ADO.NET.

Será montada uma aplicação que simula a integração entre dois sistemas de duas empresas distintas através de arquivos XML. A primeira empresa (Empresa Alpha) terá um arquivo XML (pedido.xml) com as informações de alguns pedidos. A segunda empresa (Empresa Beta) receberá o arquivo XML de pedidos e efetuará a cotação de preços - que estarão em outro arquivo XML (produtos.xml) de produtos. O sistema vai gerar um terceiro arquivo XML com as informações dos pedidos e seus devidos preços, o qual deverá ser enviado à Empresa Alpha.

 

O que é XML?

A linguagem XML (Extensible Markup Language - Linguagem extensível de formatação) tem sido considerada uma revolução. O XML foi desenvolvido pelo W3C (World Wide Web Consortium) visando à padronização dos diversos formatos existentes anteriormente, que não ofereciam grande eficiência. A linguagem foi definida em um formato universal para dados estruturados, que podem ser tabelas, dados de configurações, etc. As regras para escrever um documento XML foram muito bem definidas, a fim de que pudessem ser utilizadas em qualquer tipo de plataforma.

 

Integração de sistemas

A integração de sistemas parece inevitável e tem se tornado cada vez mais comum entre as empresas. O grande problema é que, na maioria das vezes, os sistemas apresentam grande dificuldade de integração em função de diversos motivos, como banco de dados diferentes, linguagens diferentes ou até mesmo ambientes diferentes. O uso de arquivos textos é comum em diversas soluções, o que torna extremamente complicado a implementação e resulta em perda de tempo no desenvolvimento. O XML se propõe a resolver essas questões e permite uma organização muito maior, onde podemos demonstrar os dados de forma clara e organizada e, inclusive, reproduzir uma tabela de banco de dados de forma bem simples.

 

Codificação do sistema

O primeiro passo será criar os dois arquivos XML (pedido.xml e produtos.xml), conforme mostrado nas Listagens 1 e 2. Para criar os arquivos, use o Bloco de Notas do Windows.

 

 

 

list0102.jpg

 

Existem diversas regras para a criação de um arquivo XML. As principais são:

 

code01.jpg

 

Para verificar se o arquivo XML está correto, basta abri-lo na Internet Explorer, conforme mostrado na Figuras 1 (produtos.xml) e na Figura 2 (pedido.xml).

 

 

image002.jpg

Figura 1. Visualização do arquivo produtos.xml

 

image004.jpg

Figura 2. Visualização do arquivo pedido.xml

 

Para criar o projeto use, o Visual Studio.NET. Selecione o menu File / New Project e, na janela aberta, selecione as seguintes opções:

·         Project Types: Visual Basic Projects

·         Templates: Windows Forms

·         Name: Integracao_XML

·         Location: C:\Msdn Magazine

Em seguida, clique no botão OK e repare que será criado automaticamente um formulário chamado Form1. Abra o Form1, exiba a janela de propriedades (F4) e altere as propriedades name para frmXML e text para “Msdn Magazine – Integração de sistemas com XML”. Monte um formulário semelhante ao da Figura 3, com os seguintes itens: um DataGrid, três Buttons, um OpenFileDialog e um SaveFileDialog. Configure as propriedades dos controles de acordo com a Tabela 1.

 

image006.jpg

Figura 3. Design do formulário.

 

Tabela 1. Propriedades dos controles do formulário.

DataGrid

 

Name

dgdXML

ReadOnly

True

Button 1

 

Name

btnAbrir

Text

Abrir Pedido

Button 2

 

Name

btnCotacao

Text

Cotar Preços

Enabled

False

Button 3

 

Name

btnGravar

Text

Gravar

OpenFileDialog

 

Name

ofdAbrir

SaveFileDialog

 

Name

sfdSalvar

 

No Solution Explorer, adicione um DataSet (Add / Add New Item) chamado dsResultado.xsd. Usaremos um dataset tipado pois ele oferece maior facilidade de manipulação. O Dataset tipado é uma classe derivada do Dataset que herda todos os seus métodos, eventos e propriedades. Isso permite o acesso às tabelas e colunas pelo nome, em vez de pela coleção. O DataSet será utilizado para a gravação do XML de retorno para a Empresa Beta. Insira um element (via toolbox) no DataSet e adicione os campos conforme a Figura 4. O element serve para descrever os dados contidos nele; os elementos também podem conter outros elementos e atributos.

 

image008.jpg

Figura 4. Dataset – dsResultado

 

Uma vez criados o formulário e o DataSet, a próxima etapa é a codificação. Selecione o formulário frmXML e pressione F7, ou selecione o menu View / Code para exibir a janela de codificação. Teremos dois DataSets que serão manipulados em todos os momentos, portanto, eles devem ser declarados antes do evento Form_Load, a fim de que possam ser sempre utilizados.

 

Dim dsPedido As New DataSet

Dim dsResultado As New dsResultado

 

Digite o código da Listagem 3 no evento btnAbrir_Click, onde será carregado o DataGrid dgdXML com o conteúdo do arquivo XML pedido.xml (Figura 5). O controle Open File Dialog é responsável pela janela de seleção de arquivos, e o usuário deverá selecionar o arquivo XML a ser utilizado na aplicação.

 

image010.jpg

Figura 5. Formulário com o DataGrid carregado após a seleção do arquivo pedido.xml.

 

Listagem 3 – Código do evento Click do botão btnAbrir

Private Sub btnAbrir_Click( _

  ByVal sender As System.Object, _

  ByVal e As System.EventArgs) _

  Handles btnAbrir.Click

 

  'Abre uma caixa de dialogo para seleção do arquivo

  ofdAbrir.Title = "Selecione o arquivo de pedidos"

  ofdAbrir.Filter = "xml files (*.xml)|*.xml"

  ofdAbrir.ShowDialog()

 

  'Verifica se foi selecionado algum arquivo

  If Me.ofdAbrir.FileName = String.Empty Then

     MsgBox("Selecione o arquivo XML", _

     MsgBoxStyle.Information, "MSDN Magazine")

     Exit Sub

  End If

 

  'Limpa o dataset

  dsPedido.Reset()

  'Lê o arquivo xml selecionado

  dsPedido.ReadXml(Me.ofdAbrir.FileName)

  'Preenche o grid com o arquivo informado

  Me.dgdXML.DataSource = dsPedido.Tables(0)

 

  'Ativa o botão de cotação

  btnCotacao.Enabled = True

End Sub

 

O código da Listagem 4 deverá ser implementado para o evento click do botão btnCotacao, que selecionará o arquivo XML de produtos (produtos.xml), fará a relação com o arquivo de pedido e gerará a cotação a partir da comparação do código contido nele (Figura 6). Utilizaremos o DataSet (dsResultado.xsd) já criado para exibir o resultado com os dados do pedido e o preço dos produtos.

 

 

image012.jpg

Figura 6. Resultado gerado após a cotação dos produtos.

 

Listagem 4 – Código do evento Click do botão btnCotacao

Private Sub btnCotacao_Click( _

  ByVal sender As System.Object, _

  ByVal e As System.EventArgs) _

  Handles btnCotacao.Click

  'Abre a caixa de dialogo para seleção do arquivo

  Me.ofdAbrir.ShowDialog()

  Me.ofdAbrir.Title = "Selecione o arquivo de preços"

 

  'Dataset com as informações do arquivo selecionado

  Dim dsCotacao As New DataSet

  dsCotacao.ReadXml(Me.ofdAbrir.FileName)

 

  'Define a coluna codigo como PrimaryKey, para

  'facilitar na busca e evitar conflitos

  Dim PrimaryKeyColumns(0) As DataColumn

  PrimaryKeyColumns(0) = dsCotacao.Tables(0).Columns("codigo")

  dsCotacao.Tables(0).PrimaryKey = PrimaryKeyColumns

 

  'Define constraint para o campo "codigo" ser unico

  dsCotacao.Tables(0).Columns("codigo").Unique = True

  dsCotacao.EnforceConstraints = True

 

  'Declaração das váriaves

  Dim codigo As Integer

  Dim nome As String

  Dim qtde As Integer

  Dim precoUnit As Double

  Dim precoTotal As Double

 

  'Cria um DataRow

  Dim drPedido As DataRow

 

  'Limpa o Dataset de resultados

  dsResultado.Clear()

 

  'Percorre os pedidos e atribui a devida cotação

  'aos mesmos

  For Each drPedido In dsPedido.Tables(0).Rows

      With drPedido

           codigo = .Item("codigo")

           nome = .Item("nome")

           qtde = .Item("qtde")

      End With

 

      precoUnit = dsCotacao.Tables(0).Rows.Find(codigo).Item("preco")

      precoTotal = precoUnit * qtde

 

      'Inclui o pedido com a cotação no dataset

      dsResultado.pedido.AddpedidoRow(codigo, nome, qtde, precoUnit, precoTotal)

  Next

  'Exibe os dados no grid

  Me.dgdXML.DataSource = dsResultado.pedido

 

  'Libera o botão de gravação

  btnGravar.Enabled = True

 

End Sub

 

O código do botão btnGravar (Listagem 5) gravará o resultado da cotação (dsResultado) em um arquivo XML (Figura 7). Agora temos um arquivo no qual os produtos do pedido que foi enviado pela Empresa Alpha estarão com os preços definidos pela Empresa Beta.

 

image014.jpg

Figura 7. Arquivo final gerado através do botão “Gravar”

 

Listagem 5 – Código do evento Click do botão btnGravar

Private Sub btnGravar_Click( _

  ByVal sender As System.Object, _

  ByVal e As System.EventArgs) _

  Handles btnGravar.Click

 

  'Indica onde o arquivo será salvo

  sfdSalvar.Title = "Selecione o arquivo de preços"

  sfdSalvar.Filter = "xml files (*.xml)|*.xml"

  sfdSalvar.ShowDialog()

 

  If Me.sfdSalvar.FileName = String.Empty Then

     MsgBox("Selecione o arquivo XML", _

       MsgBoxStyle.Information, "MSDN Magazine")

     Exit Sub

  End If

 

  'Grava o XML com a devida cotação

  'Este XML pode ser enviado para o cliente tratar

  'de acordo com as necessidades

  dsResultado.WriteXml(Me.sfdSalvar.FileName, _

      XmlWriteMode.IgnoreSchema)

 

  'Ativa os botões de ação

  btnAbrir.Enabled = True

  btnCotacao.Enabled = False

  btnGravar.Enabled = False

 

End Sub

 

Conclusão

O XML facilita a integração de sistemas. Utilizando o ADO.NET (DataSet), podemos ler e escrever os arquivos XML de uma maneira simples e objetiva. Sempre que necessitar de integração entre empresas, sistemas e plataformas, aposte no XML e faça uso dos benefícios aqui apresentados.

 

Referências:

http://www.asp.net

http://www.codificando.net

http://www.linhadecodigo.com.br

http://www.msdnbrasil.com.br