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.
Existem diversas regras para a criação de um arquivo XML. As principais são:
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).
Figura 1. Visualização do arquivo produtos.xml
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.
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.
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.
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.
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.
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: