sexta-feira, 22 de fevereiro de 2002

Ah sim, Data Islands!

Outro recurso interessante do IE, disponível desde a versão 4, é a possibilidade de ligar elementos HTML a uma fonte de dados baseada em XML, as famosas (?) data islands, ou "ilhas de dados". A idéia é enviar uma pequena quantidade de dados para o client e permitir que estes sejam processados por lá mesmo.


Para entender melhor, consideremos o seguinte exemplo: Você possui uma lista de nomes e telefones e deseja mostrá-la para o usuário. Sem grandes novelas, você faria algo do tipo:

<%
'Conexão com o banco de dados
set rs = conn.execute( "select id, nome, telefone from tabela" )
response.write "<table>"
do while not rs.eof
   response.write " <tr><td>" & rs("nome") & "</td><td>" & rs("telefone") & "</td></tr>"
   rs.MoveNext
loop
response.write "</table>"
%>

Qual o problema com esse código ? Nenhum, para falar a verdade. Mas, caso seja necessária a alteração dos mesmos dados, teremos um pouco mais de trabalho. Esse ponto vamos abordar em outra matéria: no momento, vamos nos ater apenas à fonte de dados. Ao invés de "chumbar" os dados na tabela, poderíamos fazer assim:

<%
'Conexão com o banco de dados
set rs = conn.execute( "select id, nome, telefone from tabela" )
set oXMLDoc = Server.CreateObject("MSXML2.DOMDocument")
oXMLDoc.async = false
set oRoot = oXMLDoc.createElement("lista")
do while not rs.eof
   set oItem = oXMLDoc.createElement("i")
   set oID = oXMLDoc.createElement("id")
   oID.text = rs("id")
   oItem.appendChild oID
  
   set oNome = oXMLDoc.createElement("nome")
   oNome.text = rs("nome")
   oItem.appendChild oNome
  
   set oFone = oXMLDoc.createElement("tel")
   oFone.text = rs("telefone")
   oItem.appendChild oFone
   oRoot.appendChild oItem
   set oID   = nothing
   set oItem = nothing
   set oNome = nothing
   set oFone = nothing
   rs.MoveNext
loop
oXMLDoc.appendChild oRoot
%>
<xml id="dsoLista"><%= oXMLDoc.xml %></xml>
<table datasrc="#dsoLista">
 <tr>
  <td><span datafld="nome"></span></td>
  <td><span datafld="telefone"></span></td>
 </tr>
</table>

"Qual a diferença ?"
A diferença é que ligamos a tabela à uma fonte de dados XML, e depois dois elementos SPAN aos "campos" desta fonte. Isso possibilitou ao browser mostrar a tabela inteira, sem que tivéssemos a necessidade de escrever cada linha da tabela, pois ele entendeu que cada elemento "i" era um registro.  É importante notarmos que criamos um objeto DOMDocument, que é uma instância de um documento XML, cujo conteúdo criamos dinamicamente, baseado no recordset. Piece of cake!


"Que vantagem Maria leva ?"
Que tal a possibilidade de manipular esses dados no client ? Poderíamos fazer:

<SCRIPT>
function Primeirao(){
 alert( dsoLista.selectSingleNode("//nome") + " é o primeirão da lista" )
}
</SCRIPT>
<input type="button" onclick="Primeirao()" value="Quem é o primeiro da lista ?" />

É muito importante frisar que essa possibilidade de ligar controles à elementos de um documento XML contido em um Data Island é viável de ser implementado quando o volume de dados não é montruoso e quando podemos garantir que o client seja IE, como, por exemplo, em ambientes de intranets/extranets. Para aplicações comerciais na internet, tome cuidado com a implantação deste recurso, pois ele será solenemente ignorado em outros browsers.


Não deixe de ler a continuação desta saga, onde veremos como podemos aproveitar melhor os recursos de data binding.



Esta matéria foi postada originalmente no ASP4Developers por Rubens N. Farias (site), que na época era "pós-graduado em análise de sistemas orientados a objetos, MCP, MCSD, MCAD, MCSD.NET e consultor em TI, além de idealizador do projeto ASP4Developers. Desenvolve sistemas sob medida, focados na satisfação do usuário, com qualidade e custo realista.". Hoje, vai saber...

0 comentários: