Colocar titulares para os caminhos de atributo nas consultas ORDA

Tradução automática de Deepl

As características da ORDA continuam a vir com 4D v17 R5! Num post anterior no blogue, mostrámos-lhe como criar consultas genéricas com os titulares de lugares nomeados para valores. Este post vai focar como utilizar marcadores de lugar para caminhos de atributos (nomes de campos em tabelas).

HDI: Exemplo de marcadores de lugar para caminhos de atributos em consultas ORDA

Estão disponíveis dois tipos de lugares reservados:

Marcadores de lugar indexados

Vejamos um exemplo que utiliza os lugares indexados para os caminhos dos atributos. Queremos encontrar clientes cujos nomes comecem com “Bravo” e tenham “Novo cliente” no campo de comentários:

C_OBJECT($clients)
$clients :=ds.Clients.query(":1 = "Bravo@" e :2 = "Novo cliente""; "nome"; "comentário")

Os espaços reservados são inseridos como :paramIndex (porexemplo,:1, :2, … com um incremento de 1) na cadeia de consulta. Os seus valores correspondentes são fornecidos pela sequência do(s) parâmetro(s) de valor.

caracteres de lugar nomeados

Também se pode utilizar marcadores de lugar nomeados. Utilizam o mesmo conceito que os placeholders nomeados para os valores. Os parâmetros são inseridos como :paramName e os seus valores são fornecidos na cadeia de consulta:

C_OBJECT($clients;$settings)
$settings :=New object
$settings .attributes:=New object("pathOfName"; "name"; "pathOfComment"; "comment")
$clients :=ds.Clients.query(":pathOfName = 'Bravo@' e :pathOfComment = 'Novo cliente'";$settings)

Porquê utilizar placeholders?

Vejamos o licencesInfo campo de objectos. Indica o número de licenças numa licençaNome: estilo de número.

{"licencesInfo":
{"4DDevPro":10, //This client has 10 4DDevPro licences
"4DServerV17_2":18,
"4DWebappserverV17_2":23}
}

Para encontrar o número de licenças “4DDevPro”, pode escrever esta consulta:

C_OBJECT($clients)
$clients :=ds.Clients.query("licençasInfo.4DDevPro >=0")

Mas agora vejam isto licencesInfo campo de objectos. Pode-se ver que a utilização de placeholders para caminhos de atributos pode ser especialmente útil ao consultar um objecto cujos nomes de propriedade não estejam em conformidade com a notação de pontos:

{"licencesInfo":
{"4D Dev. Pro":10, //This client has 10 4D Dev. Pro licences
"4D Server V17.2":18,
"4D Web app/server V17.2":23}
}

Neste caso particular, fornecer os parâmetros como um conjunto de cordas resolve o problema porque será interpretado pela consulta como um caminho de atributo.

C_OBJECT($clients)
$clients :=ds.Clients.query(":1 >=0";New collection("licensesInfo"; "4D Dev. Pro"))

Essa não é a única vantagem de utilizar placeholders. Há também um aspecto de segurança acrescido, uma vez que a utilização de placeholders impede a inserção de código malicioso. Também não há mais necessidade de se preocupar com questões de formatação ou de carácter. A lista prossegue …

Os exemplos acima estão a consultar uma classe de dados, mas se verificar a documentação, verá que também é aplicável em colecções. Também descobrirá mais exemplos que mostram porque é que a utilização de marcadores de lugar é uma boa escolha!

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.