A idéia é que além do efeito visual obtido em uma navegação, no preenchimento de grids, por exemplo, tenhamos também um bom desempenho, ou seja, sempre um pequeno número de registros ordenados e processados corretamente. Desta forma sem ler o resultado da navegação gerada, você estará correndo grandes riscos em sua aplicação, visto que o usuário não gostará muito de esperar minutos para que uma resposta seja apresentada na interface.
Um exemplo de programação que utiliza when pode ser vista a seguir.
for each
order ManualTitle when not &ManualTitle.IsEmpty()
order ProcessId when &ProcessId<>0
where ProcessId = & ProcessId when & ProcessId<>0
where ManualTitle like '%'+&ManualTitle+'%' when not &ManualTitle.IsEmpty()
Um pequeno detalhe, pois quando optar por
programar com a cláusula when, todas as
ordenações devem ser colocadas o when, caso contrário teremos um erro de sintaxe.
for each
order UserManualTitle
order ProcessId when &ProcessId<>0
error: Expecting 'EndFor'
command to close the 'For Each' block (Events, Line: 50, Char: 9)
error:
'{0}' is an unexpected expression. (Events, Line: 50, Char: 25)
error:
Unexpected command 'where' (Events, Line: 51, Char: 3)
error:
'{0}' is an unexpected expression. (Events, Line: 51, Char: 9)
error: Unexpected command 'where' (Events, Line: 52, Char: 3)
O operador like também contribui para uma situação de pesquisa não otimizada na base.
Uma saída (existem outras) para essa
situação é criar um índice composto por várias ordenações, usando vírgulas, e
eliminando-se a cláusula when quando for possível.
for each
order ProcessId, UserManualTitle
where ProcessId = &ProcessId
where UserManualTitle like '%'+&UserManualTitle+'%'
O resultado é uma pesquisa melhor,
otimizada e mais rápida, apesar do efeito visual final não ser muito bom, visto que a
consulta dependeria de dados para ser processada, desta forma o usuário teria uma interface vazia onde teria que fornecer informações para ver alguma coisa.
Considere otimizada o fato de Start from e Loop while apresentar valores condicionais ao invés de FirstRecord e NotEndOfTable. Pode parecer meio estranha a principio, mas
o resultado é muito melhor, principalmente na web onde tudo é mais lento, e o
fato do usuário determinar o que quer ver, já significa que não perderá tempo
com informações inúteis.
Enfim, cuidado com a cláusula when, principalmente em sistemas Web, caso contrário seu chefe vai colocar o exército chines atrás de voce.
Nenhum comentário:
Postar um comentário