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.
0 comentários:
Postar um comentário