DEV Community

Murilo Bernardo
Murilo Bernardo

Posted on

Como integrar Faceted Search com Interactive Grid no Oracle APEX

Recentemente, um dev perguntou se dava pra usar Faceted Search com Interactive Grid (IG) no APEX.

Por padrão, o APEX só suporta Faceted Search em Cards e Classic Reports, mas com um pequeno ajuste dá pra expandir esse comportamento.

Abaixo mostro o passo a passo prático usando a Sample App – Cards como base. 👇


🧱 1. Preparando o ambiente

Instale a aplicação de exemplo Sample Cards.

Ela já traz uma página com Faceted Search e uma região de Cards.

Depois, duplique a região de Cards e altere o tipo para Interactive Grid, dentro de um Tab Container — assim dá pra ver as duas regiões filtrando os mesmos dados.


⚙️ 2. Ligando o Faceted Search ao IG

Os facets (como Department, Manager, Job etc.) não são page items comuns, mas ainda armazenam valores de sessão.

Isso significa que você pode referenciá-los diretamente na query do IG, usando seus nomes (P12_DEPTNO, P12_JOB, etc.).

Crie uma Dynamic Action no evento Change do facet (ex: P12_DEPTNO):

  • Event: Change
  • Item(s): P12_DEPTNO
  • True Action: Refresh
  • Affecting Region: Search Results (IG)


💡 3. Ajustando a query do IG

Mesmo sem aparecer na lista de itens, basta adicionar o nome manualmente em Page Items to Submit.

Depois, use apex_string.split com o separador : na cláusula WHERE:

sql
where (
  :p12_deptno is null
  or to_char(m.deptno) member of apex_string.split(:p12_deptno, ':')
)
Enter fullscreen mode Exit fullscreen mode


🔎 4. Adicionando o campo de busca (P12_SEARCH)

Além dos filtros, o campo de busca do Faceted Search (P12_SEARCH) também pode ser usado para refinar os resultados do Interactive Grid.

A ideia é simples: o valor digitado nesse campo será aplicado como filtro LIKE em várias colunas do IG — por exemplo: ENAME, JOB, MGR, DEPTNO, MIMETYPE e FILENAME.

Basta incluir a condição abaixo na cláusula WHERE da sua query:

sql
and (
  :p12_search is null
  or upper(m.ename)     like '%' || upper(:p12_search) || '%'
  or upper(m.job)       like '%' || upper(:p12_search) || '%'
  or upper(to_char(m.deptno)) like '%' || upper(:p12_search) || '%'
  or upper(m.mimetype)  like '%' || upper(:p12_search) || '%'
  or upper(m.filename)  like '%' || upper(:p12_search) || '%'
)
Enter fullscreen mode Exit fullscreen mode

Top comments (0)