Telescope (core)

Expressões WHERE nas entidades das interfaces do Telescope

ADS.FAQ-7735
O Telescope permite estabelecer condições que restringem o universo de registros no contexto de uma interface específica. Estas condições deverão ser informadas através de expressões informadas no uso das entidades das interfaces (entity usages).

Estas expressões possuem uma sintaxe muito próxima do SQL permitindo que se escreva praticamente qualquer coisa que se escreveria no operador WHERE de uma query SQL.

As expressões também permitem fazer referências a parâmetros do contexto da aplicação. Isso é feito informando-se o nome do parâmetro desejado entre colchetes e permite as seguintes opções:


O gerador irá reconhecer o parâmetro informado e irá trata-lo conforme o caso.

Além disso, temos dois tipos diferentes de entity usages: Temos a entidade base (base usage) e temos as entidades que estão relacionadas a elas (lookup usages). O Telescope trata as expressões where diferentemente dependendo do tipo de entity usage.

Base usages

As expressões where da entidade base são aplicadas em TODAS as consultas, ou seja, é impossível acessar um registro que não atenda a esta condição utilizando esta interface. Estas expressões podem fazer referencia a qualquer entidade que participa da interface, desde que o respectivo alias seja utilizado corretamente.

Lookup usages

As expressões where das entidades lookup são aplicadas apenas na geração das listas de valores, quer sejam elas montadas explicitamente em componentes tipo OPCAO ou através de componentes de autocomplete. Ou seja, são as opções oferecidas ao usuário.
A expressão registrada nas entidades lookup pode fazer referência apenas para a própria entidade e para entidades que são lookups da mesma (sub-lookups), ou seja, não pode fazer referencia à entidade base e nem a outras lookups "irmãs".
Além disso, o fato de um registro de uma das entidades de lookup não estar mais atendendo a condição registrada na expressão where não impede que o registro seja apresentado, apenas deixará de sugerir este valor na inclusão/alteração do registro da interface.

(!)

No caso de domínios que possuem as opções de valores preparadas explicitamente em seu componente (ex: OPCAO), existe um artifício que agrega automaticamente o valor corrente à lista de opções, marcando-a com o sinal (!). Isso ocorre, tipicamente, quando vamos alterar um registro cuja lookup era inicialmente válido e agora não é mais. Exemplo: Digamos que vamos alterar um pedido que o Cliente não é mais ativo. A interface irá permitir acessar o registro normalmente. Na alteração, a lista de opções para clientes irá mostrar todos os ativos e apenas neste caso, irá também apresentar a opção do cliente atual com um sinal (!) após o seu nome.

Exemplo

No APPREF, temos um atributo ativo para a entidade Clientes. Na interface CAD_PEDIDO, temos uma condição clie.ativo = 'S' na lookup de clientes.
Note que ao iniciar a digitação de um novo pedido, clientes inativos não são apresentados na lista de opções.
Posteriormente, se um cliente for inativado, os pedidos deste cliente continuam a aparecer na listagem (se o domínio for OPCAO, um (!) irá aparecer ao lado do nome do cliente). Ao abrir para alterar um pedido, a lista de opções será preenchida com todos os clientes ativos seguido do cliente atual do pedido (inativo) sinalizado com um (!) após seu nome. Será possível manter o cliente atual ou alterar para qualquer clienet ativo. Uma vez alterado para um cliente ativo, não será possível alterar de volta para o cliente inativo.