In 4D v17 R6, le query ORDA diventano sempre più potenti e concise. Questo post è dedicato a coloro che hanno bisogno di criteri di ricerca più sofisticati di una semplice sintassi come“name = Smith‘”. Con questa release di R, è possibile utilizzare qualsiasi metodo di progetto o espressione 4D nel metodo query() metodo membro utilizzando delle formule.
Quale modo migliore per spiegare questa funzione se non con un esempio? Scaviamo nei dettagli.
HDI: esempio di query ORDA con formule
SCRIVERE UNA DOMANDA UTILIZZANDO UNA FORMULA
Il metodo query() è stato aggiornato per supportare un singolo Formula come parametro.
Esempio
Nella classe di dati Students , cerchiamo gli studenti con un punteggio in inglese superiore al loro punteggio medio complessivo.
Si noti che ogni entità è accessibile dalla formula con il comando This con il comando
C_OBJECT($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}
// The studentAverage project method computes the student's overall average in all subjects
$formula :=Formula(This.grades.english>studentAverage (This))
$students :=ds.Students.query($formula)
Utilizzare una formula con altri criteri di ricerca
Le formule possono essere facilmente combinate con altri criteri di ricerca. Di seguito è riportato un esempio che mostra come fare.
Esempio
Nella classe di dati Students , continuiamo a cercare gli studenti con un punteggio in inglese superiore alla media generale e il cui paese è l’Inghilterra.
L’oggetto $formula viene utilizzato come valore segnaposto, come qualsiasi altro.
C_OBJECT($formula;$students)
C_TEXT ($country) // $country = "France"
$formula :=Formula(This.grades.english>studentAverage (This))
$students :=ds.Students.query(":1 e paese=:2";$formula;$country)
utilizzare una formula nella stringa di query
Una formula può anche essere inserita nella stringa di query con un’istruzione eval().
Sebbene ciò possa essere comodo per codificare rapidamente una query, si perderanno i vantaggi derivanti dall’uso di un oggetto formula (come il completamento automatico, i colori nell’editor di codice e le chiamate di ricerca).
C_OBJECT($students)
C_TEXT ($country) // $country = "France"
$students :=ds.Students.query("eval(This.grades.english > studentAverage (This)) and country=:1";$country)
NOTA: Anche il metodo query() sull’oggetto selezione entità è stato aggiornato per supportare le formule. Per saperne di più, consultare la documentazione.