Boa tarde,
A funcionalidade de filtros automáticos das grids está já numa fase bastante rica em features embora não completa ainda.

Funcionalidades implementadas:

Como usar:
<dif:grid
id="ucs${difrequest.parameters.prefixid}_grid"
ajaxEvent="ajaxUCs"
readonly="true"
recordsperpage="15"
height="700"
autoSearch="true"
autoFilter="true"
groupColumn="<%=Cursos.Fields.NAMECURSO%>">
O parâmetro autoFilter por norma como referido está a true por default logo não é necessário colocar.
Pinned Filters:
Os pinned filters podem ser definidos pelo user ou pela aplicação.
Os do user persistem na sessão do mesmo. Os de aplicação aparecem sempre.
São declarados da seguinte forma:
JSONResponseDataSetGrid<Cursos> response = new JSONResponseDataSetGrid(Cursos.getDataSetInstance());
response.addPinnedFilters(Cursos.FK().tableGrausCursoByCdGrau1().CODEGRAU());
Não é necessário adicionar nem o campo ao response por addField, nem à grid por <dif:column>, no entanto relativamente ao último é aconselhável que seja feito dado que o título da coluna criada (escondida) que será o mesmo do filtro será calculada automaticamente via a informação o modelo de dados Reveng. Principalmente para relações é pouco eficaz e nunca tem tradução em EN.
Os pinned filters são facilitadores para filtros comuns que ficam à mão para ativar. Mas por default não tem qualquer filtro definido.
Required Filters:
Similares aos pinnedFilters mas estes são obrigatórios e tem um valor default.
Se for eliminado o valor ou o mesmo for null não temos dados para consultar.
Não é possível eliminar um filtro required.
Notas:
Adicionar os campos necessários
Devem ser adicionados à grid campos hidden que sejam úteis para filtragem. Mesmo que não se deseje listar os mesmos por questões de espaço.
Campos de relação
Quando desejamos colocar uma coluna de relação (ex: estado de um item) mostramos a sua descrição
<dif:column
title="${messages.descricao}"
attribute="<%=TableStatus.Fields.DESCSTATUS%>"
width="100"/>
Este campo possibilitará a filtragem por texto da descrição. Mas não irá despoletar a escolha por lista de valores, ou seja pela tabela de estados.
Para tal é necessário adicionar o campo que estabelece a relação, o campo PK. Se o mesmo não faz sentido listar (o que é muitas vezes verdade por não ter significado de negócio) então usar como HIDDEN.
<dif:column
title="${messages.codigo}"
attribute="<%=TableStatus.Fields.CODESTATUS%>"
width="80px"
align="right"/>
<dif:column
title="${messages.descricao}"
attribute="<%=TableStatus.Fields.DESCSTATUS%>"
width="100"/>
Campos com CheckConstraints
Campos com opções rígidas. Por exemplo: S/N, C(rédito)/D(ébito), etc. São muitas vezes colocados na Grid através de CalcFields. Estes são caixas negras para a inteligência dos filtros automáticos.
Para que tenhamos um filtro com a escolha de valores que o sistema sabe que esse campo pode ter necessitamos do campo original e não do seu calcField. Mais uma vez podemos ter o campo com o calcField para exibição e o campo original como HIDDEN para possibilitar o filtro.
Com os melhores cumprimentos,
Best regards,
Pedro Viegas
Director Departamento de Desenvolvimento
(Development Manager)
Digitalis Informática Lda
R&D: http://development.digitalis.pt
