Operações lógicas sobre selecções de entidades

Tradução automática de Deepl

A série ORDA continua! Neste post de blogue veremos como utilizar operadores lógicos nas selecções de entidades!

Estas operações permitem-lhe obter intersecções, uniões, ou diferenças entre duas selecções de entidades como pode fazer com os conjuntos clássicos 4D.

Exemplo de operadores lógicos nas selecções de entidades

No clássico 4D, utilizam-se conjuntos para realizar operações lógicas em vários resultados de consulta. Deve criar um conjunto após cada consulta, realizar a operação lógica nos conjuntos, e finalmente actualizar a selecção actual da tabela em questão com o conjunto de resultados. É um pouco pesado! Felizmente, com a ORDA as coisas estão a tornar-se muito mais leves! Cada consulta dá-lhe uma selecção de entidade à qual os operadores lógicos podem ser directamente aplicados!

A ORDA fornece os seguintes métodos para realizar operações lógicas em duas selecções de entidades:

and(): obter a intersecção entre duas selecções de entidades (entidades pertencentes a ambas)

or(): obter a união entre duas selecções de entidades (entidades pertencentes a uma ou à outra)

minus(): obter a diferença entre duas selecções de entidades (entidades pertencentes a uma e não à outra)

Estes métodos também podem ser aplicados a uma selecção de entidade e a uma entidade individual.

Exemplo

Um exemplo vale mais que mil palavras! Vamos dar uma vista de olhos aos empregados e às suas preferências alimentares.

CLÁSSICO 4D:

//A named selection "meat" is created before
// ...
QUERY BY ATTRIBUTE([Empregado];[Empregado]food; "peixe";=;Verdadeiro)
CREATE SET ([Empregado]; "peixe")
USE NAMED SELECTION ("carne")
CREATE SET ([Empregado]; "carne")
UNION ("peixe"; "carne"; "resultado")
USE SET ("resultado")
CLEAR SET ("carne")
CLEAR SET ("peixe")
CLEAR SET ("resultado")

ORDA:

Aqui, temos um método que recebe uma selecção de entidade como parâmetro. Devolvemos a união da selecção da entidade $eatingMeat e a selecção da entidade $eatingFish.

C_OBJECT($eatingFish;$1;$eatingMeat;$result)

$eatingMeat :=$1
//Get employees eating fish
$eatingFish :=ds.Employee.query("food.fish=:1";True)
//Get the union of the 2 entity selections $eatingMeat and $eatingFish
$result:=$eatingMeat.or($eatingFish)
$0 :=$result

Avatar
• Proprietário do produto - Marie-Sophie Landrieu -Yvert entrou ao time 4D Product como Proprietária do Produto em 2017. Como tal, está a cargo de escrever as histórias dos usuários e depois traduzi-las em especificações funcionais. Seu papel também é garantir que a implementação da funcionalidade entregue cumpra com as necessidades do cliente. Marie-sophie se formou na Escola de Engenharia de ESIGELEC e começou sua carreira como engenheira da IBM em 1995. Participou em vários projetos (de manutenção e criação) e trabalhou como desenvolvedora de Cobol. Depois trabalhou como designer de UML e desenvolvedora de Java. Suas principais funções foram analisar e redigir requisitos funcionais, coordenar os times de negócio e de desenvolvimento.