APIs e Microsserviços

25 ago, 2014

Empilhando mensagens de validação no Oracle APEX via PL/SQL utilizando sua API

Publicidade

Olá, pessoal! Como vocês estão?

Hoje vou demonstrar como utilizar a API do APEX no PL/SQL para empilhar as mensagens durante o processo de validação.

Nela é possível empilhar as mensagens de validação na ordem de seus acontecimentos e demonstrar ao usuário todas as mensagens de uma única vez. Assim, o usuário pode corrigir todos os erros de uma única vez e consequentemente ganhar tempo. Também é possível vincular a mensagem com o item que está sendo feito a validação, além de direcionar o local de exibição das mensagens de validação.

É muito comum durante o desenvolvimento de novos formulários criarmos uma validação para cada item no Oracle APEX. Por exemplo:

ll08

É uma forma muito interessante de trabalhar; entretanto, é um pouco difícil a manutenção e às vezes para um desenvolvedor que já tem um bom conhecimento em PL/SQL, é mais simples se todas as validações forem executadas em um único bloco. Além disso, ainda permite uma maior flexibilidade na criação das validações, já que permite colocar as validações em objetos de banco de dados, pois existe uma limitação de 3900 caracteres no cadastro de validações.

Para isso, podemos utilizar a API: APEX_ERROR.

Por exemplo:

ll09

Veja que serão exibidas duas mensagens de validação:

  1. Caso o número da matrícula já esteja sendo utilizado por outro funcionário;
  2. Caso a data de nascimento informada não tenha entre 11 e 99 anos. Nesse caso, vinculado ao item P2_DT_NASCIMENTO.

Exemplo de utilização

A API APEX_ERROR permite adicionar as mensagens de validação que serão exibidas ao usuário na ordem de seu processamento. É possível vincular a mensagem a um item, uma linha de um formulário tabular ou apenas uma mensagem no nível de página. Também é possível determinar o local onde a mensagem será exibida (em uma página de erro, junto ao item ou simplesmente na região de mensagem) apenas passando as constantes abaixo para o parâmetro P_DISPLAY_LOCATION:

c_inline_with_field            constant varchar2(40):='INLINE_WITH_FIELD';
c_inline_with_field_and_notif  constant varchar2(40):='INLINE_WITH_FIELD_AND_NOTIFICATION';
c_inline_in_notification       constant varchar2(40):='INLINE_IN_NOTIFICATION';
c_on_error_page

A utilização da API do APEX permite a criação de condicionais e qualquer tipo de validação, baseado em cadastro de alguma tabela ou até mesmo uma validação utilizando SQL dinâmico.

Veja abaixo um exemplo de como utilizar a API APEX_ERROR:

Declare

recFuncionarios tb_funcionario%rowtype;
begin


    if(v('REQUEST') = 'CREATE')then
    
       begin
         
        select *
          into recFuncionarios
          from tb_funcionario f
         where f.matricula = v('P2_MATRICULA');
         
         apex_error.add_error(p_message          => 'O código da matrícula '||v('P2_MATRICULA')||' informado já está sendo utilizado para o funcionário '||recFuncionarios.nome,
                              p_display_location => apex_error.c_inline_in_notification);
        
         exception when no_data_found then
            null;
        end;

    end if;


    if(months_between(trunc(sysdate),to_date(v('P2_DT_NASCIMENTO'),'DD/MM/RRRR'))/12 not between 11 and 99)then

       apex_error.add_error(p_message          => 'Data de nascimento inválida!',
                            p_page_item_name   => 'P2_DT_NASCIMENTO',
                            p_display_location => apex_error.c_inline_with_field_and_notif); 
       
    end if;
    
end;
  1. Foi criada uma condicional para efetuar a validação da matrícula do funcionário apenas quando for efetuada a inclusão do registro. Essa mensagem não será associada a nenhum item.
  2. A validação da data de nascimento está vinculada ao item P2_DT_NASCIMENTO. Ou seja, a mensagem também será exibida juntamente com o item.

Para saber mais informações sobre a API, acesse este link.

Como criar uma validação

Mas como faço para criar a validação no APEX? Simples, basta criar uma validação do tipo PL/SQL que retorne um erro ORA!

1. Selecione o tipo da validação, no caso PL/SQL:

ll10

2. Selecione o tipo esperado de retorno, no caso PL/SQL Error:

ll11

3. Informe o código que efetuará a validação. E na propriedade “Error Message”, informe “Error”:

ll12

Pronto. Simples, fácil e rápido!

Pessoal, este artigo demonstrou como utilizar facilmente o recurso de empilhar as mensagens de validação do Oracle APEX via PL/SQL utilizando a API APEX_ERROR. Existem inúmeras APIs no APEX, que permitem flexibilizar o desenvolvimento tornando ainda mais produtivo e também a aplicação mais consistente.

Até a próxima!

Para acessar a aplicação demo da nossa série de artigos, utilize este link.

  • Usuário: DEMO
  • Senha: imasters