Exibir alerta no forms

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
douglasmattos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 75
Registrado em: Seg, 19 Mar 2012 2:28 pm

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.

Selecionar tudo

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;
/

DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

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.
douglasmattos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 75
Registrado em: Seg, 19 Mar 2012 2:28 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?
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

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.
douglasmattos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 75
Registrado em: Seg, 19 Mar 2012 2:28 pm

Entendi,

vou fazer um teste aqui.
douglasmattos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 75
Registrado em: Seg, 19 Mar 2012 2:28 pm

Bom dia,

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

:(
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Podes postar a trigger do bloco do forms?
douglasmattos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 75
Registrado em: Seg, 19 Mar 2012 2:28 pm

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:

Selecionar tudo

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;	

DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Olá,

Coloque a seguinte linha, logo após o alerta, para indicar que a trigger deu problema:

Selecionar tudo

RAISE FORM_TRIGGER_FAILURE;
Você pode, como alternativa, ter uma trigger "WHEN_VALIDATE-ITEM" no campo específico que quer fazer a validação.
douglasmattos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 75
Registrado em: Seg, 19 Mar 2012 2:28 pm

Fiz os teste com as das opções.

Selecionar tudo

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

Selecionar tudo

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
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 75
Registrado em: Seg, 19 Mar 2012 2:28 pm

Coloquei a validação no campo com

Selecionar tudo

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:

Selecionar tudo

go_item(':same_caixa.cd_imatec');
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 12 visitantes