terça-feira, 3 de maio de 2022

APEX - APLICAÇÃO COM BARRA DE PESQUISA

Uma funcionalidade interessante que encontramos em algumas aplicações é a barra de pesquisa, que permite fazer pesquisas em toda a aplicação. Existem várias maneiras de implementá-la em apex. Nesse artigo, gostaria de compartilhar uma implementação simples dessa funcionalidade.


Uma aplicação de exemplo pode ser acessada em: APP COM BUSCA







São 3 passos principais:

  1. Criar as tabelas e a aplicação. 
  2. Criar uma view para a pesquisa.
  3. Criar itens e ações dinâmicas na página global.

CRIAR TABELAS E APLICAÇÃO


Para o nosso exemplo, criaremos 3 tabelas , TB_PROFESSORES, TB_TURMAS e TB_ALUNOS. 


TABELAS


Copie o código abaixo e navegue para Sql Workshop -> Sql Scripts -> Create. Dê um nome para   o script em  Script Name. Cole o código que foi copiado e clique em Run. Depois clique em Run Now. Permaneça nesta página, pois agora criaremos nossa aplicação.

Obs: Por favor, certifique-se de copiar o inteiro código para não ter problemas na execução do script.





APLICAÇÃO


Depois de verificar que o script foi executado com êxito, clique em Create App. Ele criará uma aplicação com base nos objetos que acabamos de criar. Dê uma nome para a aplicação e clique em Create Application.

Logue na aplicação com o seu usuário do Workspace.

Obs: Edite as páginas 2, 4 e 6. Em cada uma vá em Navigation e desabilite a função Warn on Unsaved Changes.


CRIAR VIEW


Antes de criar a view que usaremos para a pesquisa, vamos inserir alguns dados em nossas tabelas. Copie o código abaixo em navegue para Sql Workshop -> Sql CommandsCole o código que foi copiado e clique em Run.

Obs: Os dados abaixo foram criados com ferramenta de geração de pessoas para fins didáticos.




Agora criaremos a view que usaremos como fonte para fazer as pesquisas. Copie o código abaixo em navegue para Sql Workshop -> Sql CommandsCole o código que foi copiado e clique em Run.


Obs: As informações da coluna pagina devem corresponder às páginas dos relatórios da aplicação. No exemplo, o relatório de professores está na página 2, o de turmas, ná página 4 e o de alunos, na página 6.


PÁGINA GLOBAL


Criaremos uma região com 3 itens e ações dinâmicas na página global, ou página 0, da nossa aplicação. 

REGIÃO


Identification

  • Title: Buscar
  • Type: Static Content

Layout

  • Position: Before Navigation Bar

Appearance

  • Template: Interactive Report
  • Template Options:
    •         Remove Borders
    •         Item Spacing: None
    •         Item Width: Strech Form Fields    
    •         Label Alignment Right
    •         Top Margin: None
    •         Bottom Margin: None
    •         Left Margin: None
    •         Right: None

Advanced

  • Static ID: buscar
  • Custom Attributes:  style=" background-color: #f0f0f0;  width: 100%;"

























ITENS

Na regiao "buscar" que acabamos de criar vamos criar 3  itens: P0_ITEM_BUSCA, P0_PAGINA_BUSCA e P0_CONTEUDO_BUSCA. 


P0_ITEM_BUSCA

Será o item onde será digitada a pesquisa. Terá as seguintes características:


Identification

  • Name: P0_ITEM_BUSCA
  • Type: Text Field with autocomplete

Label

  • Pesquisar ...

Search

  • Contains & Ignore Case

Appearance

  • Template Optional - Floating
  • Template Options
    • Stretch Form Item
    • Top Margin: None
    • Bottom Margin: None
    • Left Margin: None
    • Right Margin: None

List of Values

  • Type: SQL Query
  • SQL Query:
    • SELECT NOME FROM VW_BUSCA

Advanced

  • Post Text:
    • <button type="button"  title="Pesquisar" aria-label="Pesquisar" id="btnBuscar" style="height: 100%;" class="t-Button t-Button--noLabel t-Button--icon t-Button--large"><span aria-hidden="true" class="t-Icon fa fa-search"></span></button>

Source

  • Type: Null
  • Used: Always, replacing any existing value in session state

Security

  • Session State Protection: Unrestricted
  • Store value encrypted in session state: off
  • Escape special characters: on

























P0_PAGINA_BUSCA 

Esse item receberá o número da página para a qual o usuário deverá ser redirecionado. Ele terá as seguintes características:

Identification

  • Name: P0_PAGINA_BUSCA
  • Type: Hidden

Settings

  • Value Protected: off

Source

  • Type: Null
  • Used: Only when current value in session state is null

Security

  • Session State Protection: Unrestricted
  • Store value encrypted in session state: off





















P0_CONTEUDO_BUSCA

A pesquisa feita no item P0_ITEM_BUSCA é perdida quando há redirecionamento para outra página, por isso vamos salvar o seu valor em P0_CONTEUDO_BUSCA. Ela terá as seguintes características:

Identification

  • Name: P0_CONTEUDO_BUSCA
  • Type: Hidden

Settings

  • Value Protected: off

Source

  • Type: Null
  • Used: Only when current value in session state is null

Security

  • Session State Protection: Unrestricted
  • Store value encrypted in session state: off





















AÇÕES DINÂMICAS


Ainda na página global, vamos criar 2 ações dinâmicas. A primeira será do tipo Click e fará o redirecionamento pra a página onde se encontra o conteúdo pesquisado:


AÇÃO CLICK


Identification

  • Name: Buscar

When

  • Event: Click
  • Select Type: jQuery Selector
  • jQuery Selector: #btnBuscar

Client-side-Condition

  • Type: Item is not null
  • Item: P0_ITEM_BUSCA 


Crie uma ação verdadeira com essa características:

Identification

  • Action: Execute Server-side Code

Settings

  • Language: PL/SQL
  • PL/SQL Code:

:P0_CONTEUDO_BUSCA := :P0_ITEM_BUSCA;

        BEGIN

 
   SELECT PAGINA
   INTO   :P0_PAGINA_BUSCA
   FROM   VW_BUSCA
   WHERE  NOME = :P0_ITEM_BUSCA;

EXCEPTION WHEN NO_DATA_FOUND THEN

    :P0_PAGINA_BUSCA := 0;

           END;

  • Items to Submit: P0_ITEM_BUSCA
  • Items to Return: P0_CONTEUDO_BUSCA,P0_PAGINA_BUSCA

Execution Options 

  • Fire on Initialization: off



Crie outra ação verdadeira com essa características:



Identification

  • Execute Javascript Code

Settings

  • Code
    • let pagina = apex.item("P0_PAGINA_BUSCA").getValue();
    • if (pagina != 0 && pagina != "") {  window.location.href = " f?p=&APP_ID.:"+pagina+":&APP_SESSION.::NO:: "; }



AÇÃO PAGELOAD


Essa ação filtrará os relatórios. Terá as seguintes características:

Identification  

  • Name: Filtrar Relatórios                                 

When

  • Event: Page Load                                      

Client-side-Condition

  • Type: Javascript expression
  • Javascript expression:
    • apex.item("P0_PAGINA_BUSCA").getValue() != "" && 
    • apex.item("P0_PAGINA_BUSCA").getValue() != 0 && 
    • apex.item("P0_CONTEUDO_BUSCA").getValue() != "" && 
    • apex.item("P0_CONTEUDO_BUSCA").getValue().toUpperCase() != document.title.toUpperCase() &&  
    • document.getElementsByClassName('.a-IRR-search-field') != "" 












    
                                                     

Crie uma ação verdadeira:


Identification

  •     Javascript Code

Settings

  • Code
    • let buscar = apex.item("P0_CONTEUDO_BUSCA").getValue();
    • $('.a-IRR-search-field').val(buscar);
    • $('.a-IRR-button--search').click();





Crie outra ação verdadeira:

Identification

  •    Execute Serve-side Code     

Settings

  • Language: PL/SQL
  • PL/SQL Code
    •         :P0_CONTEUDO_BUSCA := NULL;




Agora nossa barra de pesquisa está pronta. Poderemos ser redirecionados para a página desejada, inclusive filtrando a pesquisa dentro de um reltório interativo. Talvez pareça desnecessário em uma aplicação tão pequena. No entanto, essa é apenas uma aplicação de exemplo. As aplicações crescem e essa ferramenta poderá ser realmente útil.


















Nenhum comentário:

Postar um comentário

APEX - APLICAÇÃO COM BARRA DE PESQUISA

Uma funcionalidade interessante que encontramos em algumas aplicações é a barra de pesquisa, que permite fazer pesquisas em toda a apli...