Existem casos onde é preciso ordenar o resultado de um for each de acordo com a necessidade do usuário.
Uma forma usual seria preparar um for each para cada ordenação que o usuário poderia solicitar.
Para exemplificar segue um for each de cadastro de cidades onde pode ser ordenado por código ou nome da cidade de acordo com o informado na variável tp-ordem:
define variable tp-ordem as character no-undo.
assign tp-ordem = "cidade".
case tp-ordem:
when "cidade" then
for each cidade no-lock
by cidade.cidade:
display cidade.estado cidade.cidade.
end.
when "estado" then
for each cidade no-lock
by cidade.estado:
display cidade.estado cidade.cidade.
end.
otherwise
for each cidade
no-lock:
display cidade.estado cidade.cidade.
end.
end case.
Agora para simplificar este código usando um simples if no by do for each:
define variable tp-ordem as character no-undo.
assign tp-ordem = "cidade".
for each cidade no-lock
by if tp-ordem = "cidade" then cidade.cidade else cidade.estado:
display cidade.estado cidade.cidade.
end.
Muito interessante a dica do código simplificado com o ‘by if’.
Obrigada!