<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Murilo Bernardo</title>
    <description>The latest articles on DEV Community by Murilo Bernardo (@murasb).</description>
    <link>https://dev.to/murasb</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3599082%2F4c5782b3-866f-41fc-8d7d-294d6dfcc75d.jpg</url>
      <title>DEV Community: Murilo Bernardo</title>
      <link>https://dev.to/murasb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/murasb"/>
    <language>en</language>
    <item>
      <title>Como integrar Faceted Search com Interactive Grid no Oracle APEX</title>
      <dc:creator>Murilo Bernardo</dc:creator>
      <pubDate>Thu, 06 Nov 2025 14:11:12 +0000</pubDate>
      <link>https://dev.to/murasb/como-integrar-faceted-search-com-interactive-grid-no-oracle-apex-2jcc</link>
      <guid>https://dev.to/murasb/como-integrar-faceted-search-com-interactive-grid-no-oracle-apex-2jcc</guid>
      <description>&lt;p&gt;Recentemente, um dev perguntou se dava pra usar &lt;strong&gt;Faceted Search com Interactive Grid (IG)&lt;/strong&gt; no APEX.&lt;br&gt;&lt;br&gt;
Por padrão, o APEX só suporta Faceted Search em &lt;strong&gt;Cards&lt;/strong&gt; e &lt;strong&gt;Classic Reports&lt;/strong&gt;, mas com um pequeno ajuste dá pra expandir esse comportamento.&lt;/p&gt;

&lt;p&gt;Abaixo mostro o passo a passo prático usando a &lt;em&gt;Sample App – Cards&lt;/em&gt; como base. 👇&lt;/p&gt;


&lt;h2&gt;
  
  
  🧱 1. Preparando o ambiente
&lt;/h2&gt;

&lt;p&gt;Instale a aplicação de exemplo &lt;strong&gt;Sample Cards&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Ela já traz uma página com &lt;strong&gt;Faceted Search&lt;/strong&gt; e uma &lt;strong&gt;região de Cards&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftfq39y3vergmfv5a4yq8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftfq39y3vergmfv5a4yq8.png" alt=" " width="800" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feaff1z0sw8izexuad8e6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feaff1z0sw8izexuad8e6.png" alt=" " width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwxvj0tbmlbd4b1c9qj13.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwxvj0tbmlbd4b1c9qj13.png" alt=" " width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  ⚙️ 2. Ligando o Faceted Search ao IG
&lt;/h2&gt;

&lt;p&gt;Os &lt;em&gt;facets&lt;/em&gt; (como Department, Manager, Job etc.) não são &lt;em&gt;page items&lt;/em&gt; comuns, mas ainda armazenam valores de sessão.&lt;br&gt;&lt;br&gt;
Isso significa que você pode referenciá-los diretamente na query do IG, usando seus nomes (&lt;code&gt;P12_DEPTNO&lt;/code&gt;, &lt;code&gt;P12_JOB&lt;/code&gt;, etc.).&lt;/p&gt;

&lt;p&gt;Crie uma &lt;strong&gt;Dynamic Action&lt;/strong&gt; no evento &lt;code&gt;Change&lt;/code&gt; do facet (ex: &lt;code&gt;P12_DEPTNO&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Event:&lt;/strong&gt; Change
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Item(s):&lt;/strong&gt; &lt;code&gt;P12_DEPTNO&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;True Action:&lt;/strong&gt; Refresh
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Affecting Region:&lt;/strong&gt; &lt;code&gt;Search Results (IG)&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flpqwggl9xlla5hchh70h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flpqwggl9xlla5hchh70h.png" alt=" " width="800" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg2njeqsct234jb09a0vr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg2njeqsct234jb09a0vr.png" alt=" " width="800" height="315"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  💡 3. Ajustando a query do IG
&lt;/h2&gt;

&lt;p&gt;Mesmo sem aparecer na lista de itens, basta adicionar o nome manualmente em &lt;em&gt;Page Items to Submit&lt;/em&gt;.&lt;br&gt;&lt;br&gt;
Depois, use &lt;code&gt;apex_string.split&lt;/code&gt; com o separador &lt;code&gt;:&lt;/code&gt; na cláusula WHERE:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sql
where (
  :p12_deptno is null
  or to_char(m.deptno) member of apex_string.split(:p12_deptno, ':')
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8waazqkmcyuyamgia97.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8waazqkmcyuyamgia97.png" alt=" " width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fux9b6ukgqhgvlwi7gjkt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fux9b6ukgqhgvlwi7gjkt.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔎 4. Adicionando o campo de busca (&lt;code&gt;P12_SEARCH&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;Além dos filtros, o &lt;strong&gt;campo de busca&lt;/strong&gt; do Faceted Search (&lt;code&gt;P12_SEARCH&lt;/code&gt;) também pode ser usado para refinar os resultados do &lt;strong&gt;Interactive Grid&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;Basta incluir a condição abaixo na cláusula &lt;code&gt;WHERE&lt;/code&gt; da sua query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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) || '%'
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8kfi89vjjukh5jidamk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8kfi89vjjukh5jidamk.png" alt=" " width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa909bz0uo1y9zj8ugsec.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa909bz0uo1y9zj8ugsec.png" alt=" " width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>tutorial</category>
      <category>database</category>
      <category>oraclapex</category>
    </item>
  </channel>
</rss>
