Acrescente valores às suas consultas ORDA genéricas

Tradução automática de Deepl

Por esta altura já deve ter reparado que as consultas ORDA não são apenas leves e legíveis, elas também facilitam a navegação através de todo o modelo de dados usando conceitos orientados para objectos! Neste post do blogue, mostramos-lhe como escrever consultas poderosas e fáceis de manter. Um dos métodos recomendados foi fornecer a consulta e os valores separadamente através de marcadores de lugar. 4D v17 R5 dá mais um passo em frente ao permitir-lhe escrever consultas ORDA genéricas: diga olá aos placeholders nomeados para os valores!

HDI: Exemplo de marcadores de lugar nomeados para valores em consultas ORDA

Estes novos titulares de lugares são fornecidos como parâmetros do objecto nas definições da consulta. Uma vez que um objecto é um mapa chave/valor, é muito fácil de os utilizar nas suas consultas.

Um exemplo vale por mil palavras

Aqui está uma consulta para obter um cliente chamado Charlie com um cliente leal como comentário. Isto diz-lhe alguma coisa? Se não, deve consultar este post para refrescar a sua memória.

C_OBJECT($clients)
$clients :=ds.Clients.query("nome = :1 e comentário = :2"; "Charlie@"; "Cliente Leal")

A consulta também pode ser escrita como:

C_OBJECT($settings;$clients)
$settings :=New object
$settings .parameters:=New object("givenName"; "Charlie@"; "givenComment"; "Loyal client")
$clients :=ds.Clients.query("name = :givenName and comment = :givenComment";$settings)

Basta utilizar o espaço reservado com o seu nome prefixado por “:” .

O seu código é de fácil leitura e manutenção, contudo, uma vantagem ainda maior é poder escrever consultas genéricas cujos parâmetros de valor podem provir de diferentes fontes (uma interface do utilizador ou um pedido).

E que tal um padrão como este?

Pode também fornecer aos seus utilizadores uma interface de consulta onde estes podem escolher os critérios de pesquisa e os valores a aplicar.

O código abaixo é para uma interface que permite a um vendedor navegar por uma lista dos seus clientes. Retorna o conteúdo filtrado de acordo com o ID do vendedor.

C_OBJECT$settingsparameters($formData;$settings;$clients)
C_TEXT ($queryString)

$formData :=New object
DIALOG ("QueryEditor";$formData)
CLOSE WINDOW

if (OK=1)
//The logged sales person can only browse their clients
$queryString :="salesPersonUserId = :givenUserId"
//The $formData object comes from the user's interface with search criteria filled

//It contains the sales person's user id and some additional search criterias (name and city)

$settings :=New object

$settings .parameters:=$formData

If ( givenName$queryString#Null)
$queryString :=$queryString+" e nome = :givenName"
End if If ($settings.parameters.givenCity. #Null)
$queryString :=$queryString+" e city.name = :givenCity"
End if

$clients :=ds.Clients.query(

;$settings)
end if

Os exemplos acima estão a consultar uma DataClass, mas se verificar a documentação, verá que também é aplicável em colecções!

Como pode ver, construir consultas de forma dinâmica é canja. Descarregue e execute o HDI para saber mais!

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.