Olá amigos,
Estou com mais uma dúvida que já vi, revi, então resolvi consultá-los, pois sei que raramente saio do fórum com as mãos vazias.
Tenho uma trigger KEY-COMMIT com diversas validações.
Tanto que preciso usar o comando GO_BLOCK e varrer todos os registros de determinado bloco (mais de uma vez).
Estou com um probleminha.
A cada Go_Block feito, os registros são validados automaticamente... Sendo assim, caso tenha um item obrigatório qe esteja nulo, uma mensagem de erro é disparada todas as vezes que o Go_Block é chamado...
Penso em dois cenários que corrigiriam essas situações, mas não sei se são possíveis...
1) Desabilitar a validação do bloco dinamicamente, antes de eu chamar esses Go_Block's. (Existe alguma forma?)
2) Fazer a validação dos registros ANTES da Key-Commit, e, no caso de haver algum item com problemas de validação, a Key-Commit nem ser executada. (Será possível?)
Conto com a ajuda de vocês,
E desde já MUITO obrigado!
Abraços!
Validações - Go_block / Key-COMMIT
-
- Rank: DBA Sênior
- Mensagens: 389
- Registrado em: Ter, 27 Jul 2010 1:34 pm
- Localização: Sapiranga - RS
- Contato:
Quem falou que programar era fácil??
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
E que tal fazer as validaçãoes dentro da trigger WHEN-VALIDATE-RECORD desta forma se tu trocar de registro/ de bloco/ dar o comando de commit ele já valida o registro.
-
- Rank: Programador Júnior
- Mensagens: 20
- Registrado em: Seg, 14 Jun 2010 11:17 am
- Localização: São Paulo, SP
Guilherme
Valeu pelo retorno, gfkauer...
Não posso fazer essas validações na WHEN-VALIDATE-RECORD, porque estou contabilizando valores de todos os registros, ou seja, preciso percorrer por todos os registros na KEY-COMMIT mesmo...
Não posso fazer essas validações na WHEN-VALIDATE-RECORD, porque estou contabilizando valores de todos os registros, ou seja, preciso percorrer por todos os registros na KEY-COMMIT mesmo...
-
- Rank: DBA Sênior
- Mensagens: 389
- Registrado em: Ter, 27 Jul 2010 1:34 pm
- Localização: Sapiranga - RS
- Contato:
Quem falou que programar era fácil??
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Exatamente quais tipos de validação você precisa implementar?
Se forem cálculos simples (somatórios ou média de uma coluna) pode-se fazer um campo do tipo Calculation e basear-se neste valor para efetuar a validação.
São poucos os tipos de triggers de validação que permitem navegar entre campos ou blocos...
Se forem cálculos simples (somatórios ou média de uma coluna) pode-se fazer um campo do tipo Calculation e basear-se neste valor para efetuar a validação.
São poucos os tipos de triggers de validação que permitem navegar entre campos ou blocos...
-
- Rank: Oracle Guru
- Mensagens: 448
- Registrado em: Ter, 16 Jun 2009 3:07 pm
- Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS
[]s
Programador Junior
Parobé RS
[]s
Cara da pra setar todos os itens pra validos na mão
Quanto a tua duvida de fazera validação dos registros antes da key-commit :
Por padrão as trigger key são executadas antes. Mas tu pode colocar na tua key-commit um VALIDATE(FORM_SCOPE) que ira disparar as validações de todo o forms.
Da mesma maneira tu pode usar um VALIDATE(RECORD_SCOPE) se quiseres apenas disparar as validações a nivel de registro, alías é só ir mudando o parâmetro do VALIDATE para ir mudando o scopo da validação.
Se tiveres problemas para implementar isso posta aee.
SET_ITEM_PROPERTY('NOME_DO_BLOCO.NOME_DO_ITEM', ITEM_IS_VALID, PROPERTY_TRUE);
Por padrão as trigger key são executadas antes. Mas tu pode colocar na tua key-commit um VALIDATE(FORM_SCOPE) que ira disparar as validações de todo o forms.
Da mesma maneira tu pode usar um VALIDATE(RECORD_SCOPE) se quiseres apenas disparar as validações a nivel de registro, alías é só ir mudando o parâmetro do VALIDATE para ir mudando o scopo da validação.
Se tiveres problemas para implementar isso posta aee.
-
- Rank: Programador Júnior
- Mensagens: 20
- Registrado em: Seg, 14 Jun 2010 11:17 am
- Localização: São Paulo, SP
Guilherme
gfkauer,
Os cálculos que lhe falei já existem hoje no forms... na trigger key-commit, e tenho que evitar mexer neles propriamente...
O que estou fazendo antes dos cálculos é somar os campos de todos os registros de um bloco para comparar com o valor "total" que está em outro bloco.
Dependendo dessa comparação, realizo o cálculo que está lá ou não.
Sergio,
O VALIDATE(FORM_SCOPE) seria perfeito para mim, desde que ele retornasse algum valor. porque caso eu encontre FALHA na validação, não executaria nenhum dos passos seguintes da minha trigger.
Obrigado!
Os cálculos que lhe falei já existem hoje no forms... na trigger key-commit, e tenho que evitar mexer neles propriamente...
O que estou fazendo antes dos cálculos é somar os campos de todos os registros de um bloco para comparar com o valor "total" que está em outro bloco.
Dependendo dessa comparação, realizo o cálculo que está lá ou não.
Sergio,
O VALIDATE(FORM_SCOPE) seria perfeito para mim, desde que ele retornasse algum valor. porque caso eu encontre FALHA na validação, não executaria nenhum dos passos seguintes da minha trigger.
Obrigado!
-
- Rank: Oracle Guru
- Mensagens: 448
- Registrado em: Ter, 16 Jun 2009 3:07 pm
- Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS
[]s
Programador Junior
Parobé RS
[]s
Cara tu chegou a tentar utiliza-lo
A ideia é que ele vai disparar o erro, e uma vez que disparou um erro o resto do código da key-commit vai parar.
De qualquer maneir tu pode testar com um
A ideia é que ele vai disparar o erro, e uma vez que disparou um erro o resto do código da key-commit vai parar.
De qualquer maneir tu pode testar com um
if form_success then
.....
end if;
-
- Rank: Oracle Guru
- Mensagens: 448
- Registrado em: Ter, 16 Jun 2009 3:07 pm
- Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS
[]s
Programador Junior
Parobé RS
[]s
Também existe a opção(que eu não já utilizei, mas não faria novamente) de replicar o código das tuas validações na key-commit.
-
- Rank: Programador Júnior
- Mensagens: 20
- Registrado em: Seg, 14 Jun 2010 11:17 am
- Localização: São Paulo, SP
Guilherme
Sergio!
Obrigado pela ajuda.
Fiz pelo If form_success... E funcionou... \o/
Só uma informação. Mesmo se disparar a mensagem do VALIDATE, o resto do código da KEY-COMMIT é executado.
Obrigado pela ajuda Sergio e gfkauer!
Abraços!
Obrigado pela ajuda.
Fiz pelo If form_success... E funcionou... \o/
Só uma informação. Mesmo se disparar a mensagem do VALIDATE, o resto do código da KEY-COMMIT é executado.
Obrigado pela ajuda Sergio e gfkauer!
Abraços!
-
- Rank: Programador Júnior
- Mensagens: 20
- Registrado em: Seg, 14 Jun 2010 11:17 am
- Localização: São Paulo, SP
Guilherme
Pessoal,
Tenho mais uma dúvida com relação a esse assunto.
Implementei o código no início da key-commit mais ou menos com a ideia a seguir:
Beleza, o forms valida perfeitamente e salta fora da key-commit, disparando a mensagem de que existem campos requeridos que estao nulos.
Porém, gostaria que o cursor fosse posicionado no primeiro campo nulo requerido, assim como é nas validações comuns.
Preciso fazer algo?
Abçs...
Tenho mais uma dúvida com relação a esse assunto.
Implementei o código no início da key-commit mais ou menos com a ideia a seguir:
BEGIN
VALIDATE(form_scope);
IF NOT Form_Success THEN
:bloco.campo1 := 'informacao';
:bloco.campo2 := 'informacao';
RAISE Form_Trigger_Failure;
END IF;
END;
-- Aqui continuam os calculos da key-commit
Beleza, o forms valida perfeitamente e salta fora da key-commit, disparando a mensagem de que existem campos requeridos que estao nulos.
Porém, gostaria que o cursor fosse posicionado no primeiro campo nulo requerido, assim como é nas validações comuns.
Preciso fazer algo?
Abçs...
-
- Rank: Oracle Guru
- Mensagens: 448
- Registrado em: Ter, 16 Jun 2009 3:07 pm
- Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS
[]s
Programador Junior
Parobé RS
[]s
Ba cara, dae.... pra fazer isto o único jeito que conheço é replicar as validações para dentro da KEY-COMMIT;
Algo tipo :
Ou da pra fazer uma procedure que verifique quais campos nulos não foram informados e navegue para eles.
Algo tipo:
Eu acho que é muito trabalho fazer isto apenas para acusar qual campo está nulo.
De qualquer maneira espero que isso ajude.
Algo tipo :
IF :NOME_BLOCO.NOME_CAMPO IS NULL THEN
GO_ITEM ('NOME_BLOCO.NOME_CAMPO');
..... mensagens de erro......
END IF;
Algo tipo:
IF get_item_property('NOME_BLOCO.NOME_CAMPO', REQUIRED, PROPERTY_TRUE and :NOME_BLOCO.NOME_CAMPO IS NULL THEN
GO_ITEM('NOME_BLOCO.NOME_CAMPO');
---------- mensagens de erro ---------
END IF;
De qualquer maneira espero que isso ajude.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Google [Bot] e 9 visitantes