Consultem a vossa base de dados com uma abordagem orientada para objectos

Tradução automática de Deepl

Depois de saber como pode criar, actualizar e apagar dados, eis uma nova entrada na série ORDA. Neste post, verá como pode consultar a sua base de dados num modo orientado para objectos. Com ORDA, as consultas são mais leves, mais legíveis, e pode navegar por todo o modelo de dados usando conceitos orientados para objectos !

Além disso, ORDA torna possível consultar muito facilmente várias tabelas relacionadas, gerir relações recursivas na mesma tabela, e utilizar vários operadores lógicos numa única consulta. Além disso, não tem de se preocupar em estabelecer relações entre tabelas… manual ou automaticamente !

Consulta com o exemplo da DataStore

COMEÇAR COM A CONSULTA DA ORDA

Como quando se faz uma consulta sobre uma tabela, a consulta com ORDA é feita sobre um dataclass (que corresponde a uma tabela).

Há várias maneiras de consultar um dataclass. O seguinte fornece uma rápida visão geral. Para informação mais aprofundada sobre a query() método, verificar a documentação.

1- Fornecer a consulta como uma única corda

Aqui está uma pergunta para obter todos os empregados cujo primeiro nome começa com ‘S’:

C_OBJECT($employees)
$employees :=ds.Employee.query("firstName='S@'
“) // Query on Employee table

2- Fornecer a consulta e os valores separadamente, utilizando marcadores de lugar

Agora, digamos que queres ter todos os empregados cujo primeiro nome comece com ‘D’ ou ‘E’. Note-se que os valores a aplicar são compensados na consulta e são referidos com :1, :2, … :n, como se mostra abaixo:

C_OBJECT($employees)
$employees :=ds.Employee.query("firstName=:1 ou firstName=:2"; "D@"; "E@"
) // Query on Employee table

Variação: Também se pode utilizar os marcadores de lugar através de uma colecção para fornecer os valores. Como o exemplo abaixo demonstra:

C_OBJECT($employees;$params)
// You can use a collection to provide values to apply in the query
$params:=New object
$params .parameters:=New collection("D@"; "E@")
$employees :=ds.Employee.query("firstName=:1 ou firstName=:2";$params) // Query on Employee table

algumas regalias da nova forma de consulta

UTILIZAR FACILMENTE UMA LIGAÇÃO RECURSIVA NUMA ÚNICA TABELA

Considere esta ligação recursiva na tabela “Empregado”:

Usando a forma clássica

Este código solicita todos os empregados cujo primeiro nome comece com a letra ‘A’, com um gerente com um apelido que comece com a letra ‘S’:

ARRAY LONGINT(_managersIDs;0)
QUERY ([Empregado];[Empregado]primeiroNome;"="; "A@")
CREATE SET ([Empregado]; "a")
QUERY ([Empregado];[Empregado]últimoNome;"="
;"S@")
SELECTION TO ARRAY ([Empregado]ID;_identificação de gestores)
QUERY WITH ARRAY ([Empregado]ID de gestores;_identificação de gestores)
CREATE SET ([Empregado]; "s")
INTERSECTION ("a"; "s"; "resultado")
USE SET ("resultado")
CLEAR SET ("a")
CLEAR SET ("s")

usando orda

Esta pergunta é muito mais leve…

C_OBJECT($entitySelection)
$entitySelection := ds.Employee.query("firstName=:1 and manager.lastName=:2"; "A@"; "S@")

Não espere … comece a usar ORDA para código mais curto, mais limpo e mais legível!

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.