Em 4D v17 R6, as consultas ORDA estão a tornar-se cada vez mais poderosas e concisas. Este post no blog é para aqueles que precisam de critérios de pesquisa mais sofisticados do que apenas uma simples sintaxe como“nome = Smith“. Com este lançamento R, pode usar qualquer método de projecto ou expressão 4D no query() método de membro, utilizando fórmulas.
Que melhor forma de explicar esta característica do que com um exemplo? Vamos investigar os detalhes.
HDI: Exemplo de consultas ORDA utilizando fórmulas
ESCREVA UMA PERGUNTA UTILIZANDO UMA FORMULA
O query() método de membro foi actualizado para suportar um único Formula objecto como parâmetro.
Exemplo
Na DataClass Students , procuramos estudantes com uma pontuação em inglês superior à sua pontuação média global.
Note-se que cada entidade é acedida pela fórmula com a This comando.
C_OBJECT// The studentAverage project method computes the student's overall average in all subjects($formula;$students)
// In the Students dataClass, grades is an object field containing students' grades for each subject
// Example of JSON representation of the grades object field:
// {math:50,english:90,history:85}
$formula :=Formula(This.grades.english>studentAverage (This))
$students :=ds.Students.query($formula)
utilizar uma Fórmula com outros critérios de pesquisa
As fórmulas podem ser facilmente combinadas com outros critérios de pesquisa. Abaixo está um exemplo para lhe mostrar como.
Exemplo
Na DataClass Students , continuamos a procurar estudantes com uma pontuação em inglês superior à sua média geral E cujo país é a Inglaterra.
O objecto $formula é utilizado como um valor de lugar reservado, como qualquer outro.
C_OBJECT($formula;$students)
C_TEXT ($country) // $country = "France"
$formula :=Formula(This.grades.english>studentAverage (This))
$students :=ds.Students.query(":1 e país=:2";$formula;$country)
utilizar uma fórmula na cadeia de consulta
Uma fórmula também pode ser inserida na cadeia de consulta com uma declaração eval().
Embora isto possa ser conveniente para codificar rapidamente uma consulta, faltar-lhe-ão as vantagens de usar um objecto de fórmula (tal como auto-completamento, cores no editor de código, e quem faz a pesquisa).
C_OBJECT($students)
C_TEXT ($country) // $country = "France"
$students :=ds.Students.query("eval(This.grades.english > studentAverage (This))) e country=:1";$country)
NOTA: O comando query() método de membro sobre o objecto de selecção da entidade também foi actualizado para apoiar fórmulas. Verifique a documentação para saber mais.