Neste post eu ensinarei como criar e atribuir valores para um SDT com 3 níveis e mostrar os dados contidos nele em uma Web Panel.
O níveis serão compostos por “Pai”, “Filhos” e “Netos”. Cada Neto ainda terá uma propriedade chamada “Brinquedo”.
Vamos começar criando a estrutura do SDT:
Pressionando as teclas Ctrl+N, será aberto um pop-up contendo os objetos que podem ser criados no Genexus. Escolherei o tipo de dados “Structure Data Type” e o chamarei de Pai.

A estrutura terá o seguinte formato:
Pai:
- idPai
- nomePai
- Filhos:
- idFilho
- nomeFIlho
- Netos:
- idNeto
- nomeNeto
- Brinquedo (Propriedade):
- nomeBrinquedo
- Filhos:
Para criar nível “Brinquedo” como uma propriedade, desmarcar a opção “Is Collection” conforme figura abaixo:
SDT Criado:
Irei utilizar uma Web Panel para exemplificar o uso do SDT.

Serão criadas três variáveis (Uma para cada nível do SDT) para a inserção dos dados.
Pai – Data Type: Pai

Filhos – Data Type: Pai.Filhos

Netos – Data Type: Pai.Filhos.Netos

A primeira coisa a se fazer quando se utiliza um SDT é estanciar a variável utilizando o comando new().
&Pai.idPai = 1
&Pai.nomePai = 'Peter Park'
Os outros níveis seguem o mesmo critério do primeiro nível na atribuição de valores.
&Filhos = New()
&Filhos.idFilho = 1
&Filhos.nomeFilho = 'Hank Pym'
&Netos = New()
&Netos.idNeto = 1
&Netos.nomeNeto = 'Luke Cage'
O nível “Brinquedo” por ser uma propriedade, é atribuído dentro do nível Netos. (Uma propriedade no SDT é muito utilizada quando o SDT serve de base para a criação de um XML).
&Netos.Brinquedo.nomeBrinquedo = 'Moletom'
Para a gravação dos dados dos níveis do SDT, é necessário que seja feito de forma recursiva, sempre gravando todos os dados do último nível no nível anterior até chegar no primeiro nível.
&Filhos.Netos.Add(&Netos)
&Pai.Filhos.Add(&Filhos)
Desta forma o SDT irá conter os dados de um Pai, um Filho e um Neto.
Neste exemplo, irei adicionar alguns filhos e netos para uma melhor visualização na tela.
O código completo do evento start ficou conforme abaixo:
Event Start
&Pai = New()
&Pai.idPai = 1
&Pai.nomePai = 'Peter Park'
&Filhos = New()
&Filhos.idFilho = 1
&Filhos.nomeFilho = 'Hank Pym'
&Netos = New()
&Netos.idNeto = 1
&Netos.nomeNeto = 'Luke Cage'
&Netos.Brinquedo.nomeBrinquedo = 'Moletom'
&Filhos.Netos.Add(&Netos)
&Netos = New()
&Netos.idNeto = 2
&Netos.nomeNeto = 'Jessica Jones'
&Netos.Brinquedo.nomeBrinquedo = 'Garrafa de Whisky'
&Filhos.Netos.Add(&Netos)
&Pai.Filhos.Add(&Filhos)
&Filhos = New()
&Filhos.idFilho = 2
&Filhos.nomeFilho = 'Steve Roger '
&Netos = New()
&Netos.idNeto = 1
&Netos.nomeNeto = 'Tony Stark'
&Netos.Brinquedo.nomeBrinquedo = 'Mão Robótica'
&Filhos.Netos.Add(&Netos)
&Netos = New()
&Netos.idNeto = 2
&Netos.nomeNeto = 'Stephen Strange'
&Netos.Brinquedo.nomeBrinquedo = 'Capa Mágica'
&Filhos.Netos.Add(&Netos)
&Netos = New()
&Netos.idNeto = 3
&Netos.nomeNeto = 'Daniel Rand'
&Filhos.Netos.Add(&Netos)
&Pai.Filhos.Add(&Filhos)
EndEvent
Para criar a estrutura do SDT na Web Panel, basta escolher a opção Attribute/Variable na Tool Box e arrastar para o local no layout que as informações do SDT serão exibidas.

Após arrastar, escolher a variável SDT.

E o layout será criados automaticamente contendo os atributos do nível principal no inicio e os níveis do SDT são convertidos em grids.

Quando executado, o resultado abaixo será exibido:
Neste primeiro post de SDT foi mostrado como criar e atribui valores a um SDT com vários níveis.
Nos próximos posts estarei mostrando como atualizar e deletar os dados de um SDT.
Deixar Um Comentário