Um dos grandes feitos do XML é a possibilidade de transferir dados de uma forma padronizada, estruturada e com um vocabulário personalizado. Neste artigo, irei demonstrar um processo de transmissão de dados via ASP e XML, utilizando estes recursos.
Primeiro passo: selecionando a massa a ser exportada
Podemos utilizar o DOM para criar o documento XML. Opcionalmente, podemos criar o documento com response.write, mas esta forma é mais sujeita a falhas de programação.
<%
set xmlDoc = server.CreateObject("MSXML2.DOMDocument.3.0" )
xmlDoc.async = false
set tabela = xmlDoc.createElement("tabela")
set oConnection = server.CreateObject("ADODB.Connection" )
oConnection.open ( banco_de_dados )
set oRecordset = oConnection.execute( "select * from tabela" )
do while not oRecordset.eof
set registro = xmlDoc.createElement( "registro" )
For n = 0 To oRecordset.Fields.Count - 1
campo = oRecordset.Fields.Item(n).name
if oRecordset.Fields.Item(n).type = adLongVarChar or _
oRecordset.Fields.Item(n).type = adLongVarWChar then
set memo = xmlDoc.createElement( campo )
memo.text = oRecordset( campo )
registro.appendChild memo
else
registro.setAttribute campo, oRecordset( campo )
end if
Next
tabela.appendChild registro
loop
xmlDoc.appendChild tabela
%>
Segundo passo: Enviando dados para o servidor destino
Há duas soluções possíveis:
1. Enviar os dados em um campo textarea de um formulário
Nesta, basta incluir este código após o trecho acima:
<form action="http://destino/recebe.asp" method="post">
<textarea readonly name=xmlDoc><%= xmlDoc.xml %></textarea><input type="submit">
</form>
O incoveniente é que o campo não pode exceder o limite de 102.399 caracteres (http://support.microsoft.com/support/kb/articles/Q273/4/82.ASP?LN=EN) e que a aplicação que recebe o documento precisa certificar-se que os dados são coerentes.
2. Enviar os dados usando o XMLHTTP
<%
Set oXMLHTTP = Server.CreateObject("MSXML2.XMLHTTP")
oXMLHTTP.open "POST", "http://destino/recebe.asp", false
oXMLHTTP.send(xmlDoc)
'Exibe o retorno do servidor. Como se trata de um documento XML, usamos as tags XMP para exibir o seu conteúdo, sem que o browser interprete-o. Opcionalmente, poderíamos transformar este documento em HTML, ou interagir com a base de dados local, dependendo da resposta.
response.write "<xmp>" & oXMLHTTP.responseXML.xml & "</xmp>
%>
O incoveniente aqui é que a máquina que processa este script precisa estar rodando o Windows 2000 ou Windows NT 4.0, com IE 5.01 ou superior instalado, não sendo suportado pelas versões 9x do Windows. Há também alguns problemas com web proxies, caso estejam sendo usados. Observados estes requisitos, funciona muito bem e elimina a necessidade de intervenção do usuário, sendo a opção recomendada.
No próximo passo, iremos adotar a segunda forma, para fins de exemplos.
Terceiro passo: Recebendo os dados no servidor e processando-os
Uma vez que os dados já foram enviados para o servidor, precisamos apenas recebê-los, verificar sua consistência e efetuar o devido processamento:
Recebe.asp
<%
Response.ContentType = "text/xml" 'Devemos retornar um documento XML
set xmlDoc = Server.CreateObject("MSXML2.DOMDocument.3.0")
xmlDoc.load(Request) 'Aqui, carregamos os dados enviados
set xmlResposta = Server.CreateObject("MSXML2.DOMDocument.3.0")
set resposta = xmlResposta .createElement("resposta")
if xmlDoc.parseError <> 0 then
resposta.setAttribute "status", "Falha: " & _
xmlDoc.parseError.srcText & _
xmlDoc.parseError.reason & " Linha " & _
xmlDoc.parseError.line & " Col " & _
xmlDoc.parseError.linepos
else
'Aqui, faremos o que for necessário com os dados recebidos: alteração de banco de dados, inclusão dos novos registros, etc.
resposta.setAttribute "status", "Processado sem problemas"
end if
xmlResposta.appendChild resposta
xmlResposta.save(Response) 'Retornamos o resultado do processamento para quem os enviou
%>
Done! Conseguimos exportar alguns dados de um servidor para outro, usando o XML para descrever os dados e o objeto XMLHTTP para envio dos mesmos. Essa solução se aplica em diversos casos:
- Processamento de pedidos feitos por sites de terceiros
- Dois sites trocando informações em esquemas de parceria
- Uma aplicação offline transmitindo dados para o servidor central
- E o que mais sua imaginação permitir!
Comentários sobre o código são bem-vindos.
0 comentários:
Postar um comentário