In un precedente post del blog, si è appreso come costruire criteri di ricerca sofisticati e complessi applicando formule in una query ORDA. Per fornire ulteriori strumenti di sviluppo completi e potenti, è disponibile un nuovo metodo ORDA: orderByFormula(). Con l’aiuto di formule, è ora possibile ordinare una selezione di entità utilizzando criteri complessi in un metodo di progetto o in un’espressione 4D.
HDI: Esempi per ordinare una selezione di entità con una formula
I criteri di ordinamento vengono valutati quando la formula viene fornita come stringa o come Formula al metodo orderByFormula() al metodo.
Ordinare con una formula come stringa
Qui abbiamo una classe di dati, Companies, e ordiniamo tutte le aziende in base ai loro profitti (profitti = ricavi – costi).
Si noti che l’entità è accessibile tramite il comando This .
C_OBJECT($companies;$orderedCompanies)
$companies :=ds.Companies.all()
$orderedCompanies :=$companies.orderByFormula ("Questo.ricavi - Questo.costi")
Ordinare con un oggetto formula
Qui ordiniamo le aziende usando gli stessi criteri, ma invece di una stringa, usiamo un oggetto Formula e ordiniamo per ordine decrescente.
C_OBJECT($companies;$orderedCompanies;$formula)
$formula := Formula(This.revenue - This.costs)
$companies :=ds.Companies.all()
$orderedCompanies:=$companies.orderByFormula ($formula;dk descending)
Si noti che l’uso di un Formula offre alcuni vantaggi (come il completamento automatico, i colori nell’editor di codice e così via) rispetto all’uso di una formula come stringa.
Il metodo orderByFormula() offre ancora più opzioni. Per maggiori dettagli, consultare la documentazione e scaricare l’HDI qui sopra.
su Ordinare una selezione di entità
È ora possibile inserire una dichiarazione order by all’interno del metodo membro query() stesso. Questo è un grande vantaggio quando si lavora in modalità client/server, perché si possono combinare la query e l’azione di ordinamento nella stessa richiesta, riducendo il numero di richieste inviate al server e il traffico di rete.
C_OBJECT($companies)
$companies :=ds.Companies.query("revenue> :1 order by costs desc";5000)