Como fazer uma validação antes de fechar o Form/EBS?

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
Avatar do usuário
Porva
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 342
Registrado em: Seg, 29 Jan 2007 7:36 am
Localização: São Paulo/SP
Rafael S. Nunes
São Paulo/SP

Srs,

Preciso fazer uma validação em um forms antes de gravar. Já desativei a função core do botão 'Salvar' do menu template do Forms no Oracle EBS, mas se o usuário fechar a tela com F4 ou clicando no botão 'X' do Form, surge a mensagem padrão se o usuário desejo gravar.

Se o usuário clicar em 'Sim', as alterações no bloco serão gravadas, eu preciso capturar essa trigger pra por uma validação antes, alguém sabe como poderia ser feito?

Obs.: acabei de testar e aparentemente fechando a tela pelo botão 'X' ele dispara a WHEN-WINDOW-CLOSED e CLOSE-WINDOW, mas fechando pelo F4 não dispara nenhuma delas.
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

Não está conseguindo validar na WHEN-VALIDATE-RECORD ou WHEN-VALIDATE-BLOCK ?
Avatar do usuário
Porva
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 342
Registrado em: Seg, 29 Jan 2007 7:36 am
Localização: São Paulo/SP
Rafael S. Nunes
São Paulo/SP

hmm, não encontrei a trigger WHEN-VALIDATE-BLOCK

na WHEN-VALIDATE-RECORD algumas 'built-ins' não são permitidas, como POST por exemplo! :(

já testei a FORMS_DDL('COMMIT') e standard.commit, e infelizmente elas não fazer um update (sem commit definitivo) no banco para que eu possa fazer a validação necessária antes de commitar em definitivo.
Avatar do usuário
Porva
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 342
Registrado em: Seg, 29 Jan 2007 7:36 am
Localização: São Paulo/SP
Rafael S. Nunes
São Paulo/SP

complementando, minha necessidade é a seguinte:

em um bloco multi record eu posso ter vários lançamentos para a mesma exportação em datas diferentes por exemplo, e cada uma delas eu informo o Volume da exportação daquele lançamento.

mas o total dessas exportações somadas em várias linhas do bloco não podem ultrapassar o volume que foi descarregado no porto!

eu preciso validar isso no bloco, porém não posso fazer um LOOP pois não é aceito no WHEN-VALIDATE-RECORD.

também não posso usar uma coluna de fórmula (SUM) pois existem combinações específicas nesses registros e a propriedade Formula = SUM soma tudo o que estiver no bloco.

minha ideia seria fazer o POST (sem commit) pra validar no banco, mas também não é permitido.

já testei os comandos que citei na mensagem anterior, mas quando faço o select ele ainda não pega as alterações para que eu valide e possa abortar/rollback com "RAISE form_trigger_failure" se for o caso.

Exemplo:

Prancha 1: Volume descarregado no porto = 25 toneladas
Prancha 2: Volume descarregado no porto = 5 toneladas

Lançamentos no bloco:
Prancha 1 - Volume = 10 toneladas
Prancha 2 - Volume = 5 toneladas
Prancha 1 - Volume = 20 toneladas

o form tem que bloquear o cadastro da Prancha 1 pois a soma dela (30 toneladas) ultrapassaria o volume descarregado!
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

Ignore o WHEN-VALIDATE-BLOCK kkkkk

Eu faria o seguinte:
* Eu usaria um campo formula pra somar. MAS, em vez de somar o campo principal, eu criaria um campo "oculto", e nele eu poderia colocar todo o tipo de validação possível.

Por exemplo:
* Registro 1 - Volume 10 - CampoHidden - 0
* Registro 2 - Volume 20 - CampoHidden - 20
SOMA do campo Hidden= 20.

Dessa forma você pode ter um controle total do que somar.
Basta na WHEN-VALIDATE-RECORD do campo VOLUME você setar o valor a ser somado ou não no campo Hidden.
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

Hmmm.. Agora eu vi que você ta inserindo múltiplas pranchas no mesmo tempo.
Ou seja, não tem como fazer isso via Formula.

Acho que neste caso, eu faria assim:
* Na POST-TEXT-ITEM do volume, eu colocaria um POST e tentaria fazer ali a validação manual usando SELECT SUM.
Avatar do usuário
Porva
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 342
Registrado em: Seg, 29 Jan 2007 7:36 am
Localização: São Paulo/SP
Rafael S. Nunes
São Paulo/SP

Thomas, valeu pelas dicas e atenção, só via suas mensagens agora.

mas eu fiz mais ou menos o seguinte, vou transcrever o que lembro de cabeça:

Desativei o botão Salvar do menu core do EBS assim, na trigger KEY-COMMIT do módulo/form eu abortei a ação padrão dele colocando uma mensagem para alertar o usuário a clicar num botão customizado 'Salvar' e com um RAISE form_trigger_failure para abortar a ação.

tive que ocultar o fechamento do form pelo botão 'X' da window (propriedade Form Close = No) pois se um bloco estiver em modo de alteração (CHANGE), o form pergunta automaticamente se desejaria salvar, então tinha que abortar essa ação também.

no meu botão customizado Salvar, eu fiz um POST para gravar o bloco todo no banco (sem commit) e poder fazer o select com a validação que eu quisesse, com SUM, agrupando do jeito que fosse necessário, e se a validação não passar eu simplesmente emito uma mensagem e aborto a gravação, mas se tudo estiver ok, eu faço o COMMIT definitivo.

ah, outra observação, o WHEN-VALIDATE-RECORD não permite que eu faça um LOOP no bloco, eu sequer posso tirar o foco do registro corrente pois é uma builtin restrita, então tive que optar pela forma que descrevi.
Avatar do usuário
Porva
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 342
Registrado em: Seg, 29 Jan 2007 7:36 am
Localização: São Paulo/SP
Rafael S. Nunes
São Paulo/SP

Visualmente ficou assim:

Imagem
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

Perfeito! Obrigado por mandar a solução!
Responder
  • Informação