Filtros de grids

6 views
Skip to first unread message

Pedro Viegas

unread,
Oct 14, 2024, 12:23:36 PM10/14/24
to DIF2 Mailing list

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:

  1. Auto filter por qualquer campo que exista na grid como column (seja hidden ou não)
  2. Filtragem local ou remota, tal como já é o sort
  3. Filtragem por campos calculados apenas é suportado na filtragem local
  4. Campos data tem filtragem própria por interevalos pré-definidios
  5. Campos com listas de valores associados (seja FK ou CK) mostram a lista de valores para escolha de um (não suporte multiselect ou outras operações diferentes de = para LOVs)
  6. Campos pinned são persistidos na sessão
  7. Esta funcionalidade como o AutoSearch é ativada por default em todas as grids em que é possível. Raras exceções existem que se tem que ligar por parâmetro

 

     

 

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

 

signature_3900513481

Reply all
Reply to author
Forward
0 new messages