ORDA – Genealogia – Episódio um

Tradução automática de Deepl

Todos podemos concordar que a ORDA é uma grande característica da 4D V17. Uma espécie de revolução na forma de pensar e de programar. As bases de dados 4D nunca serão vistas da mesma forma que antes.

ORDA permite conceber aplicações avançadas em menos tempo, com código mais legível e limpo. Para lhe mostrar o poder da ORDA, preparámos uma série de dicas para si, divididas em três episódios. Neste primeiro episódio, vamos demonstrar como as ligações devem agora ser consideradas mais como entidades e colecções de entidades, e vamos mostrar-lhe como as caixas de listagem podem agora ser baseadas em selecções de entidades, em vez de selecções ou arrays.

Download Genealogia – Episódio um

Usando relações recursivas

A fim de demonstrar o poder do 4D e do ORDA, utilizaremos uma base de dados altamente recorrente, utilizando uma única tabela chamada PEOPLE.

Esta tabela contém cinco campos principais: Sobrenome, Nome, Aniversário, Género e ID (que é obviamente único).
Depois vêm mais três campos: ID do pai, ID da mãe e ID do parceiro que liga cada pessoa a outras três pessoas, se existirem (parceiro) ou se forem conhecidas (mãe e pai).

definição da relação

Agora vamos concentrar-nos na definição da relação. Em ambos os sentidos (1 a N e N a 1), as relações podem ser nomeadas. Usando ORDA, estes nomes vão tornar-se muito significativos e úteis. Nas muitas para uma direcção, o nome não é apenas uma cadeia, é uma entidade da tabela das PESSOAS, da mesma forma que a entidade das PESSOAS onde a relação tem origem. Na direcção de um para muitos é ainda mais, o nome representa uma selecção de entidade.

Sem antecipar demasiado, pode adivinhar que com a notação de objecto, poderá utilizar PEOPLE.Pai, bem como PEOPLE.Crianças-Pai, para chegar a uma única pessoa (o pai) ou a um grupo de pessoas (os filhos).

blank

Um novo tipo de caixa de listagem

blank

Até agora, o conteúdo das caixas de listagem (a fonte de dados) ou eram arrays ou selecções. De agora em diante, o conteúdo pode também vir de uma colecção ou de uma selecção de entidade. Vejamos então como uma selecção de entidade pode ser utilizada dentro de uma caixa de listagem.

Antes de mais, é necessário criar a selecção de entidades utilizando a nova função ds. Neste exemplo, vamos criar uma simples selecção de entidade contendo todas as PESSOAS encomendadas por aniversário, apelido, e nome próprio. Isto pode ser feito numa única linha, como se mostra abaixo. Isto é tudo o que tem de saber por agora sobre ds!

people:= ds.PEOPLE.all().orderBy("Aniversário asc, Último nome asc, Primeiro nome asc")

Uma vez obtida a selecção da entidade people, basta defini-la como propriedade da caixa de listagem e está – quase – terminada!

“ESTE” é fantástico

Como nas caixas de listagem regulares, o conteúdo de cada coluna deve ser definido. No nosso caso, desde que utilizemos uma selecção de entidade, o conteúdo de cada coluna será definido como uma expressão. Para tal, utilizaremos uma nova palavra-chave (“This“) que se referirá ao item actual da selecção da entidade.

Para exibir people nomes e aniversários, a expressão pode ser tão simples como:
Isto.Lastname
Isto.Firstname
Isto.Lastname + " " + Isto.Firstname
Isto.Birthday

Agora vem o poder e a diversão: se quiser exibir o Último Nome do Pai, o Aniversário da Mãe, ou o Primeiro Nome do Parceiro, basta usar os nomes das entidades que deu nas definições de relacionamento (Pai, Mãe, Parceiro, etc.) e escrever:

Isto.Father.Lastname
Isto.Mother.Birthday
Isto.Parter.Firstname

Claro, pode ir ainda mais longe se quiser saber os nomes dos quatro avós do Parceiro do actual people escrevendo: This:

Isto.Partner.Father.Father.Lastname
Isto.Partner.Father.Mother.Lastname
Isto.Partner.Mother.Father.Lastname
Isto.Partner.Mother.Mother
.Lastname

Um último passo (para hoje!): Também quero mostrar o número de filhos e irmãos que esta pessoa tem. Posso fazer isso ?
Claro, isso é bastante fácil. Para as crianças, basta utilizar a selecção da entidade ChildrenAsFather definida na definição da relação. Como em qualquer selecção de entidade, tem uma propriedade de comprimento. Basta definir a expressão desta forma:
This.ChildrenAsFather.length + This.ChildrenAsMother.length // uma delas será igual a zero, ChildrenAsFather.length para as mulheres e vice-versa.

Para os irmãos, será necessário “subir” para a mãe (ou pai) e “descer” para os filhos. Assim, a expressão seria :
Isto. Mother.ChildrenAsMother.length - 1 // minus 1 to remove the current people from the number of his/her siblings :-)

blank

E aqui está o resultado… sem uma única linha de código !

blank

Para continuar, fique atento!

Roland Lannuzel
- Proprietário do produto & Especialista 4D - Depois de estudar electrónica, a Roland entrou nas TI industriais como desenvolvedor e consultor, construindo soluções para clientes com uma variedade de bases de dados e tecnologias. No final dos anos 80, apaixonou-se pela 4D e utilizou-a para escrever aplicações comerciais que incluem sistemas de contabilidade, facturação e correio electrónico. Juntando-se à empresa em 1997, as valiosas contribuições de Roland incluem a concepção de especificações, ferramentas de teste, demonstrações, bem como formação e palestras para a comunidade 4D em muitas conferências. Ele continua a moldar activamente o futuro da 4D, definindo novas características e ferramentas de desenvolvimento de bases de dados.