No primeiro e segundo episódios desta trilogia, demonstrámos o básico da ORDA utilizando caixas de listagem, entidades, e selecções de entidades. Também mostrámos a forma de utilizar caixas de listagem semelhantes com fontes de dados distintas e como utilizar a expressão Meta info para melhorar os gráficos das caixas de listagem.
Hoje vamos ter ainda mais diversão, com menos código!
Download Genealogia – 3º Episódio
Menos código, mais diversão!
Com base na estrutura recursiva que discutimos anteriormente, o nosso objectivo hoje é exibir uma árvore genealógica (como se mostra abaixo).
Para cada casal, queremos mostrar os seus pais, avós e filhos (se os tiverem).
A lista da esquerda mostrará todos os casais para os quais encontraremos quatro pais e oito avós. Este vai ser o principal desafio.
Para exibir casais à esquerda, podemos limitar a procura a homens com parceiros:
Género=falso // boolean field
e parceiro # nulo
Mas também precisamos de ter a certeza de que ambos têm pais:
e Pai # nulo
e Mãe # nula
E depois teremos de verificar se há avós, etc., etc.
Magia e lógica
Se 4D (e ORDA) pode ser consultado para encontrar quatro avós para o parceiro de X, isso também significa que X tem um parceiro e que o seu parceiro também tem um pai e uma mãe. Portanto, no final, é bastante simples! Só temos de verificar que cada membro do casal como quatro avós!
Género=falso // search for men only (his partner's name will be displayed next to his)
e Pai.Pai # nulo // check for the man's grandparents
e Pai.Mãe # nulo
e Mãe.Pai # nulo
e Mãe.Mãe # nulo
e Parceiro.Pai.Pai # nulo // check for his partner's grandparents
e Parceiro.Pai.Mãe # nulo
e Parceiro.Mãe.Pai # nulo
e Parceiro.Mãe.Mãe # nulo
Feito! Esta é a selecção da entidade que será utilizada no lado esquerdo do formulário.
Acabou-se o código?
Quase. Excepto para os filhos que iremos gerir mais tarde, não é necessário mais código!
Basta lembrar que na caixa de listagem de propriedades existe uma propriedade chamada item actual. Basta dar-lhe um nome … e depois utilizá-lo! Neste caso, o item actual é “homem”. Assim, assim que clicar em qualquer linha da caixa de listagem, a entidade man é actualizada e pode utilizar e exibir os seus atributos sem qualquer codificação.
Não só os seus atributos, mas também todos os atributos de entidades relacionadas, e os atributos de entidades relacionadas de entidades relacionadas … por isso na sua forma pode exibir expressões como:
man.Lastname
man.Father.Lastname
man.Father.Father.Lastame
man.Partner.Lastname
man.Partner.Father.Lastname
man.Partner.Father.Father.Lastname
Ou expressões mais complexas como:
man.Father.Father.Lastname+" "+man.Father.Father.Firstname
Como dissemos: Sem código! Apenas expressões! Basta prestar atenção ao utilizar copy-paste … pode por vezes revelar-se o seu maior inimigo 🙂
E as crianças?
Elas também são bastante simples. Durante o evento On selection change, basta criar uma selecção de entidades de crianças (ver episódio 2), e depois percorrer esta selecção de entidades para construir os nomes e as imagens!
(Form event=On Selection Change)
childrenPortraits :=childrenPortraits*0 // erase picture
childrenNames :="" // erase names
$_children :=GetChildren (men) // get the entity selection of children
For each ($child;$_children)
COMBINE PICTURES (childrenPortraits;childrenPortraits;Horizontal concatenation;$child.Portrait_0)
childrenNames :=childrenNames+$child.Firstname+" ("+String($child.Birthday)+") "
End for each
Conclusão (ou início!)
Com estes três episódios, demos-lhe uma pequena amostra do poder da ORDA. Alguns dos resultados que mostrámos foram quase impossíveis de obter usando 4D de uma forma regular e simples. Enormes números de linhas de código, matrizes, memória, e cálculos teriam sido necessários para alcançar os mesmos resultados. Não estamos a dizer que cada base de dados 4D deveria ser reescrita com ORDA (“Se não estiver avariada, não a conserte” é uma das minhas citações favoritas), mas é bastante óbvio que para as suas bases de dados futuras ou actuais (se precisarem de ser melhoradas), ORDA será uma grande ajuda e uma grande poupança de tempo!