Lista no forms

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
AntonioN.
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Dom, 04 Jul 2010 4:18 pm
Localização: sp

Pessoal tudo bem?
Acho que essa é minha primeira postagem,
gostaria de conseguir umas pista de como resolver uma situacao.

1 - Tenho um bloco (base table) multi linha. (esse bloco é detail de um mestre/detalhe)

Onde o usuário, entrará com uma lista de materiais (bloco detail), que deve seguir uma ordem exemplo:

seq. produto

1 laranja
2 manga
3 goiaba
4 mamao
5 acerola

Essas linhas serão inseridas todos de uma só vez e ainda não estarao gravadas no banco. Em tempo de execucao, a cada linha inserida o forms devera ler todas as linhas anteriores e verificar se o numero da sequencia já não está contido nessa lista, validado por when-validate-item (lembrando que ainda não estão gravadas no banco). Posso pegar esses valores como ? (sei que tenho que capturar em when-new-record-instance).

-------------------------------------------------------------------------------------
A segunda duvida é mais chata,
Bom, agora que tenho a lista gravada :

1 laranja
2 manga
3 goiaba
4 mamao
5 acerola

O usuário poderá mudar essa lista da seguinte forma:

Por exemplo, ele constatou que no lugar da manga que é 2, deverá incluir uma outra fruta ex. JACA, então a jaca precisa ficar com seq.2.
Preciso criar um botao de reordenação dessas sequencias,
pois tudo que for de 2 -Jaca, para baixo será reordenado, ficando assim:

( insert ) (ordenadas/update)

1 laranja -- 1 laranja
2 jaca -- 2 jaca
2 manga -- 3 manga
3 goiaba -- 4 goiaba
4 mamao -- 5 mamao
5 acerola -- 6 acerola

Qual melhor jeito de fazer isso ?
( a ordenação de ver ser rearranjada no bloco detail em tempo de execucao, mostrada para o usuário, porém ainda não feito o update no banco, para dá a opção do usuário desistir dessa sequencia, caso queira).

Valeu pessoal Muito Satisfação.
gfkauer
Rank: DBA Sênior
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

Olá AntonioN.
Vamos por partes, para fazer a validação se a sequência já existe você além de verificar em tela terá que validar no banco creio eu. Pois podem existir outros registros com a sequência informada que não estão na tela.

Dentro da When-Validate-Item do campo de sequencia você monta sua validação baseada na tabela no banco. Caso esta não de erro você da um Post, este comando faz com que você valide as informações da tela para o banco, mas não efetua commit. Desta forma quando for fazer a linha seguinte o registro inserido anteriormente ainda não salvo já pode ser lido pelo seu select.
gfkauer
Rank: DBA Sênior
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

Para a reordenação surgiu-me uma duvida, você incluirá o registro 2-Jaca no bloco pai ou em um outro bloco chamado pelo botão?
AntonioN.
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Dom, 04 Jul 2010 4:18 pm
Localização: sp

Testei o comando Post no gatilho so que me apresenta esse erro, quando valido: (dei o " Dentro do gatilho when-validate-item)

frm-40737 :procedimento restrito POST invalido no procedimento gatilho when-validate-item .

Não conseguir saber que tipo de restrição é essa. Como usa esse comando Post ? .

Selecionar tudo

/*   HELP DO FORMS  

** Built-in:  POST and EXIT_FORM
** Example:   Leave the called form, without rolling back the 
**            posted changes so they may be posted and 
**            committed by the calling form as part of the 
**            same transaction. 
*/ 
BEGIN 
  Post; 
 
  /* 
  ** Form_Status should be 'QUERY' if all records were 
  ** successfully posted. 
  */ 
  IF :System.Form_Status <> 'QUERY' THEN 
    Message('An error prevented the system from posting changes'); 
    RAISE Form_Trigger_Failure; 
  END IF; 
  /* 
  ** By default, Exit_Form asks to commit and performs a 
  ** rollback to savepoint. We'vê already posted, so we do 
  ** not need to commit, and we don't want the posted changes 
  ** to be rolled back. 
  */ 
  Exit_Form(NO_COMMIT, NO_ROLLBACK); 
END; 
-------------------------------------------------------------------------------------

O botao estará no bloco detail,
que terá como função, pegar a linha (nova) com a sequencia repetida (que ficará no lugar da antiga) e fazer que a linha antiga para baixo, se reordene :


1 laranja -- 1 laranja
2 jaca (linha nova que deverá ser a seq2) -- 2 jaca
2 manga (essa seq, passará a ser antiga e deverá se reordenar, no caso ficará com a seq. 3) -- 3 manga (nova ordenação)
3 goiaba -- 4 goiaba (nova ordenação)
4 mamao -- 5 mamao (nova ordenação)
5 acerola -- 6 acerola (nova ordenação)



Obrigado!!
AntonioN.
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Dom, 04 Jul 2010 4:18 pm
Localização: sp

Obrigado consegui fazer a validação com o POST.

O comando foi inserido na trigger when-new-record-instance em nível de bloco. E fiz a validação normal por item, como se fosse do banco.
Só tem um problema,
me falaram que o Post da um lock na tabela inteira,
é verdade ? se for terei que partir para outra solução.

grato.

* minha segunda dificuldade ainda permanece.
gfkauer
Rank: DBA Sênior
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

Sim o Post locka a tabela. Sem um post apenas salvando os dados para que sua lógica funcione.
Afinal o que lhe garante que não possui outro usuário inserindo na mesma tabela com as mesmas sequencias?
Responder
  • Informação
  • Quem está online

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