Aprenda PL/SQL

Exibir alerta no forms

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
  

Mensagemem Sex, 22 Dez 2017 9:35 am

Galera, bom dia!

Estou com uma dúvida e gostaria de saber se é possível resolver.
Criei um Trigger em uma tabela e esta funcionando perfeitamente. faço uma validação e se entrar em uma determinada condição mostra uma mensagem de erro. a mensagem aparerece no rodape do forms.


Gostaria de saber se é possível exibir essa mensagem tipo um alerta...quando entrar na condição o sistema exibir um alerta na tela.

segue a trigger.

Código: Selecionar todos
CREATE OR REPLACE TRIGGER DBAMV.TRG_U_VERIF_CD_IMATEC
Before  update
ON dbamv.same_caixa
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
--Pragma Autonomous_Transaction;

Begin
    IF (UPDATING) THEN
        DECLARE
       
            Cursor cCD_IMATEC Is
                SELECT count(*)
                  FROM dbamv.same_caixa_agrupamento
                WHERE cd_imatec = :new.cd_imatec;
             
        vqt_imatec NUMBER;
       
        Begin
            OPEN cCD_imatec;
                FETCH cCD_imatec INTO vqt_imatec;
            Close cCD_imatec;
            IF :new.cd_imatec > 0 then
                 IF vqt_imatec > 0 Then
                     raise_application_error( -20002, 'Código Imatec já utilizado !!! = '||vqt_imatec);
                 END IF;
                 
            END IF;     
           
        END;
    END IF;
End;
/

douglasmattos

Mensagemem Sex, 22 Dez 2017 11:31 am

Olá,

1-Por que não faz a verificação nas triggers do próprio forms? visto ser uma validação simples e não ficar aumentando a complexidade da estrutura e negócio no banco de dados.

2- Dependendo ainda do negócio talvez constraints UNIQUE na tabela resolva seu problema de ter de criar triggers.
DanielNN
Localização: Fortaleza - CE

att,

Daniel N.N.

Mensagemem Sex, 22 Dez 2017 1:19 pm

DanielNN,

Eu já criei uma chave primaria na tabela....até ai tranquilo. se a pessoa tenta salvar a informa apertando F10 por exemplo o forms ta um erro no rodapé e não deixa salvar...

A ideia era mostrar essa mensagem em um alerta mesmo. tipo (O Código já esta sendo utilizado, por favor tente outro código...).

Não sou muito experiente em desenvolvimento de forms.... quando você fala utilizar as triggers do proprio forms, onde eu utilizo?
douglasmattos

Mensagemem Sex, 22 Dez 2017 1:42 pm

Existem algumas maneiras mas tu podes, por exemplo, criar uma trigger pre-insert (no caso de inserção) no bloco de dados que possui sua informação. Aí tu farias a consulta se o ID existe e lançarias o alerta, impedindo sua gravação.
DanielNN
Localização: Fortaleza - CE

att,

Daniel N.N.

Mensagemem Sex, 22 Dez 2017 2:29 pm

Entendi,

vou fazer um teste aqui.
douglasmattos

Mensagemem Qua, 03 Jan 2018 10:28 am

Bom dia,

Fiz o teste e não deu certo. No pre-insert o forms traz um alerta para cada registro...

:(
douglasmattos

Mensagemem Qua, 03 Jan 2018 10:37 am

Podes postar a trigger do bloco do forms?
DanielNN
Localização: Fortaleza - CE

att,

Daniel N.N.

Mensagemem Qui, 04 Jan 2018 8:28 am

Bom dia DanielNN.

Fiz o teste hoje novamente. Só que dessa vez não exibiu nenhuma alerta....
Só da o erro no rodapé: FRM-40509 Erro do Oracle: não é possivel ATUALIZAR o registro. (devido a trigger)
Detalhe, a query nesse caso esta retornando 1

esse foi o código que testei aqui:

Código: Selecionar todos
declare
   Vresult number(5);
   alerta number(5);
begin

      SELECT count(*) into Vresult
      FROM dbamv.same_caixa_agrupamento
     WHERE cd_imatec = :same_caixa.cd_imatec;   
   
   if Vresult >= 1 then
      set_alert_property('alert_caixa',alert_message_text,'Código já utilizado, por favor utilizar outro código !!!' );
    alerta:=show_alert('alert_caixa');
   end if;
end;   

douglasmattos

Mensagemem Qui, 04 Jan 2018 8:47 am

Olá,

Coloque a seguinte linha, logo após o alerta, para indicar que a trigger deu problema:
Código: Selecionar todos
RAISE FORM_TRIGGER_FAILURE;

Você pode, como alternativa, ter uma trigger "WHEN_VALIDATE-ITEM" no campo específico que quer fazer a validação.
DanielNN
Localização: Fortaleza - CE

att,

Daniel N.N.

Mensagemem Qui, 04 Jan 2018 10:52 am

Fiz os teste com as das opções.

Código: Selecionar todos
RAISE FORM_TRIGGER_FAILURE;

Quando eu coloquei o código acima na PRE-INSERT (isso no bloco) não exibiu o alerta. lembrando que eu tenho uma trigger na tabela que valida essa informação.

Se eu utilizar o
Código: Selecionar todos
WHEN_VALIDATE-ITEM
funciona de boa. como esta validando o campo ele mostra o alerta normalmente.

A idéia mesmo era saber se é possivel pegar esse erro que a Trigger da tabela gera e exibir o alerta no sistema....

Mas de qualquer forma vou ir utilizando a validação do campo por enquanto.
douglasmattos

Mensagemem Qui, 04 Jan 2018 11:29 am

Coloquei a validação no campo com
Código: Selecionar todos
WHEN_VALIDATE-ITEM
, quando clica para sair do campo o forma valida os dados e exibe a mensagem. Porem só exibe a mensagem na primeira vez, se eu clica no campo novamente e depois clicar para sair o forms não exibe mais a mensagem.

é possível deixar que ele sempre exiba a mensagem até o usuário alterar os dados no campo? tipo só vai conseguir ir para o próximo campo se o valor estiver correto.

depois que exibi o alerta eu coloquei para voltar para o item com:
Código: Selecionar todos
go_item(':same_caixa.cd_imatec');
douglasmattos



Voltar para Forms

Quem está online

Usuários navegando neste fórum: Bing [Bot] e 2 visitantes