Chamar trigger de outro lugar

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
gpsilva
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 21
Registrado em: Qua, 27 Jul 2005 7:39 am
Localização: Maracaí
Contato:

Pessoal,
Bom dia.

Estou desenvolvendo um form onde existe um código na trigger WHEN-NEW-BLOCK-INSTANCE a nivel de bloco. O código dessa trigger deverá ser executado em um outro momento. Para não ter que reescrever esse código novamente, o que pergunto é: Há uma maneira de SÓ chamar a trigger em um outro lugar e verificar se a execução dela falhou ou não??

Form 6i
Oracle Applications 11.5.10
Banco Oracle 10.1.0.5.0

Genivaldo
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother, tudo bem?

Tem como fazer sim.
Segue um exemplo abaixo, da Buit-In EXECUTE_TRIGGER, este exemplo peguei do próprio Help do Forms.

Dá uma olhada nele e, faça a adaptação para o teu caso.

Selecionar tudo

/*  

** Built-in:  EXECUTE_TRIGGER 
** Example:   Execute a trigger dynamically from the PL/SQL 
**            code of a Menu item, depending on a menu 
**            checkbox. 
*/ 
DECLARE 
  Cur_Setting   VARCHAR2(5); 
  Advanced_Mode BOOLEAN; 
BEGIN 
  /* 
  ** Check whether the 'Advanced' menu item under the 
  ** 'Preferences' submenu is checked on or not. 
  */ 
  Cur_Setting :=  Get_Menu_Item_Property 
                    ('Preferences.Advanced',CHECKED); 
  /* 
  ** If it is checked on, then Advanced_Mode is boolean 
  ** true. 
  */ 
  Advanced_Mode := (Cur_Setting = 'TRUE'); 
  /* 
  ** Run the appropriate trigger from the underlying form 
  ** 
  */ 
  IF Advanced_Mode THEN 
    Execute_Trigger('Launch_Advanced_Help'); 
  ELSE 
    Execute_Trigger('Launch_Beginner_Help'); 
  END IF; 
END; 
Qualquer dúvida, manda ai.
gpsilva
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 21
Registrado em: Qua, 27 Jul 2005 7:39 am
Localização: Maracaí
Contato:

Trevisolli,
Boa tarde.

Eu tentei implementar aqui mas não deu certo. Talvez se eu disser do que preciso você pode me dar uma outra idéia. Na verdade eu tenho um form com dois blocos, sendo que no primeiro existirá um campo que vai determinar a quantidade de registros que o usuário tem que inserir no segundo bloco. Ou seja, se nesse do 1º bloco estiver 5, então o 2º bloco deverá ter 5 registros. Só que não estou conseguindo controlar essa inserção devido a outros eventos, como delete e limpeza (quando ele está inserindo mas só limpa o registro).

você poderia me dar um help??


Grato,
Genivaldo
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother, não sei se entendi direito...
Mas, vou tentar...

Seguinte, no bloco 01, você tem um campo quantidade.
Quando você digita 05 neste campo, vai para um outro bloco que, deverá, obrigatóriamente, ter 05 linhas, contendo valores de um determinado select?
Seria isso?
Daí ocorre que, não está populando corretamente?
Caso seja isso, o que ocorre, tela em branco?
gpsilva
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 21
Registrado em: Qua, 27 Jul 2005 7:39 am
Localização: Maracaí
Contato:

Colega,

É quase isso. Realmente no 1º bloco um campo chamado "quantidade" irá determinar o nº de registros do 2º bloco. Só que os registros do 2º bloco serão inseridos manualmente, por um usuário. Ele não pode inserir mais e nem menos do que estiver colocado nesse campo "quantidade". Se nele tiver o valor 5, então o user deverá inserir 5 registros no bloco 2. O que acontece é que não estou conseguindo controlar alguns eventos. Por exemplo: Imagine que o cara colocou 5 registros e salvou. beleza! Só que depois ele abre essa mesma tela e exclui uma linha. Como pegar o que sobrou e confrontar com o campo "quantidade"?? Pois nesse caso ele não pode fazer isso.


Genivaldo
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother, no caso de ele digitar 05 no primeiro bloco, você pode guardar este valor numa variável global.

Quando ele for no segundo bloco, excluir uma linha, no PRE-COMMIT, por exemplo, você poderia fazer um loop no teu bloco, contar as linhas e comparar com essa variável global.

Se forem diferentes os valores, você pode dar um RAISE neste ponto.

Creio que não terá muito problema em realizar este procedimento.
Qualquer dúvida, manda ai.
gpsilva
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 21
Registrado em: Qua, 27 Jul 2005 7:39 am
Localização: Maracaí
Contato:

Trevisolli ,

Estou realizando uns testes aqui e, aparentemente, está funcionando com base em sua dica.

Aproveitando a oportunidade e sem querer abusar, como eu faria para instalar o Form/Reports em minha casa e desenvolver algo para ser executado lá? Tenho o Oracle Express Edition 10g. Os desenvolvimentos que realizo são na empresa onde trabalho. Eu quero colocar essas ferramentas em casa para poder aprimorar. Minha ultima experiência com essa tentativa não foi nada legal, pois não consegui conectar essas ferramentas no banco.

Existe algum material do tipo aqui no forum ou você pode me orientar??

Abraços,
Genivaldo
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Seguinte, uma dica de quem também não entende muito de instalações.. rs...

Para se instalar forms e reports, costumo utilizar o método NEXT/NEXT e, a única coisa que me orientaram, que não deve ser feito é, instalar as ferramentas de desenvolvimentos na mesma HOME do banco.

Por exemplo, se teu banco em casa, está instalado em C:\Oracle\..., minha dica seria instalar as ferramentas de desenvolvimento em C:\Oradev.

Do mais, sem crise pra se instalar.

Mas, qualquer dúvida, manda ai que a gente abre um tópico, para este caso em específico, ok?

Creio que nessa parte, se for o caso da tua necessidade, os DBAs aqui podem te auxiliar melhor.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Uma forma fácil de verificar o número de linhas do segundo bloco é fazendo assim:
* Quando o usuário for validar o primeiro bloco, dê um POST. (ou seja, todas informações vão para as tabelas SEM ser comitadas).
* Depois, faça um SELECT COUNT referente a tabela do bloco2.

Se não fechar, dá a mensagem e o RAISE e manda o usuário fazer direito!


Acho que outra forma é colocar um campo calculado que CONTA o número de linhas... Dai você compara esse campo calculado com o campo onde o usuário informa a qtd.

Deve haver milhares de outras formas pra se fazer isso... O jeito é testar alguma que sirva pra você! :-o
gpsilva
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 21
Registrado em: Qua, 27 Jul 2005 7:39 am
Localização: Maracaí
Contato:

Bom dia, dr_gori.

O que quis dizer com POST? Como eu faria isso??


Grato,
Genivaldo
gpsilva
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 21
Registrado em: Qua, 27 Jul 2005 7:39 am
Localização: Maracaí
Contato:

está, achei um exemplo do help e form e estou tentando implementar. O problema é que o POST é um procedimento restrito. Agora coloquei na trigger KEY-COMMIT a nivel de FORM. Estou testando. Já retorno se tive sucesso ou não.


Grato,
Genivaldo
Responder
  • Informação
  • Quem está online

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