Num post de blog anterior, aprendeu como construir critérios de pesquisa sofisticados e complexos aplicando fórmulas numa consulta ORDA. Para lhe fornecer ainda mais ferramentas de desenvolvimento completas e poderosas, está disponível um novo método ORDA: orderByFormula(). Com a ajuda de fórmulas, pode agora encomendar uma selecção de entidade utilizando critérios complexos num método de projecto ou expressão 4D.
HDI: Exemplos para encomendar uma selecção de entidade com uma fórmula
Os critérios de encomenda são avaliados quando a fórmula é dada como uma string ou uma Formula objetar ao orderByFormula() método.
Encomendar com uma fórmula como uma corda
Aqui temos uma DataClass, Companies, e encomendamos todas as empresas com base nos seus lucros (lucros = receitas – custos).
Note-se que a entidade é acedida através do This comando.
C_OBJECT($companies;$orderedCompanies)
$companies :=ds.Companies.all()
$orderedCompanies :=$companies.orderByFormula ("This.revenue - This.costs")
Encomendar com um objecto de fórmula
Aqui encomendamos as empresas utilizando os mesmos critérios, mas em vez de uma string, estamos a utilizar um comando Formula objecto e estamos a ordenar por ordem decrescente.
C_OBJECT($companies;$orderedCompanies;$formula)
$formula := Formula(This.revenue - This.costs)
$companies :=ds.Companies.all()
$orderedCompanies:=$companies.orderByFormula ($formula;dk descending)
Note-se que utilizando um Formula O objecto oferece algumas vantagens (tais como auto-completamento, cores no editor de código, etc.) em relação à utilização de uma fórmula como string.
O orderByFormula() método tem ainda mais opções. Consulte a documentação e descarregue o IDH acima para mais detalhes.
sobre como encomendar uma selecção de entidade
Pode agora inserir uma declaração order by dentro do próprio método de membro query(). Este é um enorme benefício quando se trabalha em modo cliente/servidor, porque se pode combinar a consulta e a acção de encomenda no mesmo pedido, reduzindo o número de pedidos enviados para o servidor e o tráfego da sua rede.
C_OBJECT($companies)
$companies :=ds.Companies.query("revenue> :1 order by cost desc";5000)