Uma
alternativa para manipular XML’s é através de SDT’s, que naturalmente podem
exportar (ToXml) e importar (FromXml), informações nesse formato. Estaremos nesse Post
explorando um pouco essa praia.
1. Criando o Structured Data
Type
A
primeira coisa a ser feita é criar um SDT de exemplo, que pode conter
informações a respeito de um determinado Cliente.
Lembre-se
que um SDT pode ser criado automaticamente através de uma transação previamente
criada, apenas pelo processo de arrastá-la para a estrutura vazia.
2. Alimentando o SDT
Criando
uma variável do tipo SDT Cliente, será possível armazenar os valores,
correspondentes aos campos definidos na estrutura. Um evento Start em um webpanel é suficiente
para manipular essa variável.
Event Start
&cliente.Codigo = 1
&cliente.Nome = "João da Silva"
&cliente.Endereco = "Rua 1, 2"
&cliente.Bairro = "Centro"
&cliente.Cidade = "Rio Claro"
EndEvent
Um
pouquinho de conhecimento sobre coleções ou Data Provider, e você gera uma
lista de clientes a partir desse exemplo simples. Uma dica simples crie uma variável &clientes do tipo SDT Cliente e marque-a
como coleção. Em seguida, para adicionar um elemento na coleção programe.
&cliente = new()
&cliente.Codigo = 1
&cliente.Nome = "João da Silva"
&cliente.Endereco = "Rua 1, 2"
&cliente.Bairro = "Centro"
&cliente.Cidade = "Rio Claro"
&clientes.add(&Cliente)
&cliente = new()
&cliente.Codigo = 2&cliente.Nome = "Manuel da Silva"
&cliente.Endereco = "Rua 2, 1"
&cliente.Bairro = "Vila Betinha"
&cliente.Cidade = "Rio Claro"
&clientes.add(&Cliente)
EndEvent
Ou seja,
para cada novo &cliente é
necessário um &cliente = new().
3. Manipulando o XML
Em
seguida, uma pequena operação sobre essa variável SDT exporta a informação
armazenada em um formato Texto/XML.
&cliente.Codigo = 1
&cliente.Nome = "João da Silva"
&cliente.Endereco = "Rua 1, 2"
&cliente.Bairro = "Centro"
&cliente.Cidade = "Rio Claro"
&texto = &cliente.ToXml()
EndEvent
E o
resultado pode ser apresentado na interface.
Simples não, o Genexus se encarregou de exportar a informação previamente armazenada, no formato XML.
4. O que fazer com esse tal XML?
Você poderia estar se perguntando por que dessa confusão toda, talvez não esteja tão inspirado quanto os inventores dessa coisa, talvez precise de férias, sei lá, mas uma resposta boa e simples seria, o que aconteceria se você passasse &texto como parâmetro para outro
objeto. Uma boa resposta seria, estaria
passando todas as informações referentes a um determinado cliente. Mas lembre-se que essa se encontra em um formato
texto.
Para testar crie um segundo webpanel, e declare a regra Parm abaixo, com
a variável &clienterecebido definida como Varchar(300), que receberia o valor da variavel &texto passada por parâmetro.
parm(&clienterecebido);
Esse texto recebido poderia então ser convertido em uma variável SDT novamente, usando
um método simples.
Event Start&cliente.FromXml(&clienterecebido)
EndEvent
E o resultado seria a reconstrução da variável original &cliente com
todos os valores previamente carregados.
Conclusão
Então podemos concluir o seguinte, XML é excelente para transferir
informações de um lado para outro, de sistema para outro sistema, e foi por
essa razão que o formato ‘pegou’. Hoje já surgiram outros mais leves como o JSON, também manipulável pelo Genexus, mas ambos consistem em mecanismos eficientes para fazer
sistemas ou objetos conversarem.
Mas não para por ai, teste, por exemplo, armazenar o XML em uma variável
de sessão, talvez você reconsidere a forma que anda armazenando os contextos de
seu sistema.
Tão útil quanto um cabo para fazer uma 'chupeta' de uma bateria a outra, lembra da última vez quando ficou parado em um local escuro, com a bateria arriada, com a namorada impaciente no banco do carona, talvez até meio arrependidada de ter saido com 'o vacilão', e alguém apareceu com um cabinho milagroso. Então, nunca se sabe se você não terá que fazer uma 'chupeta' nos seus sistemas.
3 comentários:
Mas como eu faço a passagem de parâmetro com os dados do cliente para esta nova webpanel?
Para passar parâmetro você pode programar um painel que chame o objeto, e em seguida realizando uma operação:
Painel.call(&par1, &par2), onde &par1,2 são os parâmetros passados.
Você também pode testar isso sem programar esse webpanel, bastando escrever na URL os parâmetros:
http://localhost/seuprograma/Painel.Aspx?&par1, &par2
Postar um comentário