Manipulação de janelas

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
binho_oracle
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Qua, 07 Nov 2007 2:20 pm
Localização: são paulo

Olá pessoal. A dúvida é simples, mas
eu não consigo resolver, sou iniciante
total também... :D

Na verdade é assim, depois de atualizar um registro,
o usuário irá clicar no botão OK e esse botão precisa fechar a
janela atual e carregar novamente uma outra, que mostrará
o registro modificado (essa janela já está aberta, mas ela mostra
o registro antigo, antes da modificação), por isso o botão OK
precisa fechar a janela onde a alteração foi feita e "atualizar"
a outra.

Se alguém puder ajudar...
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

E ai binho, beleza?

cara, eu não manjo muito de forms, acho q o código abaixo pode te ajudar..

Selecionar tudo

-- oculta a janela
HIDE_VIEW('SEU_CANVAS');
-- manda o foco pro seu data block
GO_BLOCK('SEU_DATA_BLOCK');
-- atualiza seu data block
EXECUTE_QUERY;
[]'s
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

é pelo jeito que foi descrito parece que faltou o execute_query no seu bloco de destino
binho_oracle
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Qua, 07 Nov 2007 2:20 pm
Localização: são paulo

Vlw pessoal.

Só que eu precisava fechar a janela e não escondê-la (são coisas diferentes não é?). Então tentei trocar o HIDE_VIEW, por um
CLOSE_VIEW, mas acho que não existe... :(

E depois precisava chamar uma outra janela para que seja mostrado o
novo registro que eu acabei de inserir nessa janela que eu
devo fechar. Não sei se esse EXECUTE_QUERY faz isso. O que eu
precisava era só chamar a janela, tipo dando um "refresh" nela, mais
nada.
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

se o camvas não for do tipo sobreposto e sim um canvas de conteudo e estiver em outra janela você pode executar abaixo do hide_view o comando close_window('nome da janela')...


agora para dar um refresh na tela anterior, se for bloco de dados somente pelo execute_query ele vai fazer o que você quer(refresh nos dados), senao você pode atribuir os valores alterados respectivos...
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Pra fechar o form tenta usar

Selecionar tudo

do_key('exit_form');
[]'s
binho_oracle
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Qua, 07 Nov 2007 2:20 pm
Localização: são paulo

Então Tineks mas o "do_key('exit_form'); " fecha
a minha aplicação. O que eu precisava era só fechar um
canvas.
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

Tenta assim:

Selecionar tudo

HIDE_VIEW('TEU_CANVAS');
E se for o caso, manda pra outro bloco:

Selecionar tudo

GO_BLOCK('OUTRO_BLOCO');
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Mas essa sua "segunda" tela é um canvas da primeira ou ela é um outro form?

[]'s
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

mas você esta ainda com algum problema binho...

descreve ai pra gente o que esta faltando?
binho_oracle
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Qua, 07 Nov 2007 2:20 pm
Localização: são paulo

Isso Tineks...é um form só...
É bem assim:
Tenho uma janela que apresenta todos os funcionários, clico em INCLUIR,
ai uma segunda janela é chamada, onde eu faço a inclusão de um
novo funcionário. Assim que eu termino a inclusão, eu preciso fechar
essa janela e ir pra outra, dando uma espécie de "refresh" para
mostrar o funcionário que eu acabei de inserir.
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

então,
o primeiro problema é esconder o canvas q você usou pra incluir. isso você pode fazer com o hide_view, assim você vai cair pro canvas de baixo.
você tentou fazer isso ?

[]'s
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

certo...

binho tenta fazer o seguinte... assim que você cadastra o funcionário você consegue recuperar a chave da tabela certo??

vê se isso serve para você:

Selecionar tudo

  v_codigo_funcionario := /*armazenar o código (chave) do funcionario que você acabou de cadastrar*/
  go_block(bloco1);
  hide_view(canvas_incluir);
  set_block_property(bloco1,default_where,'codigo_funcionario = ' || v_codigo_funcionario);
  execute_query;
   set_block_property(bloco1,default_where,'');
binho_oracle
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Qua, 07 Nov 2007 2:20 pm
Localização: são paulo

Sim Tineks, só que eu não tenho que ESCONDER...tenho
que FECHAR o canvas...o hide funciona, só que eu preciso fechar
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

close_window('nome da janela')...
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Binho,
mas nesse caso ai, onde você tem o canvas de inclusao, não tem como você fecha-lo, você só pode usar o hide_view..
como você disse o hide_view funcionou, mas qual seria o problema de utilizar o hide_view?

[]'s
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

Outra coisa, brother...
Qual a necessidade de se "fechar" esse canvas?
O que você consegue fechar é teu forms.

Se conseguir "fechar" este canvas, posta aqui pra gente, pois desconheço.
binho_oracle
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Qua, 07 Nov 2007 2:20 pm
Localização: são paulo

beleza...vou usar o hide mesmo, só que a intenção
era fechar...
binho_oracle
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Qua, 07 Nov 2007 2:20 pm
Localização: são paulo

O rodfbar passou um código pra eu chamar a tela onde
deverá constar o novo funcionário que foi adicionado. estou
tentando entender o código dele...boa parte eu entendi, mas o que
eu percisava fazer era simples:

Somente "carregar" uma janela novamente...essa janela já traz
todos os funcionarios da tabela de funcionarios...o que eu preciso é
só chamá-la novamente, de modo que o novo funcionário que
acabou de ser adicionado, apareça...
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

o que a gente não ta entendendo binho é que janela que você esta falando



o seu canvas de cadastro não é empilhado??

ou ele é um canvas conteudo e você tem uma janela especificamente para ele???
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

Então brother...

Pelo que eu saiba não tem como...
Os comandos 'Close' que conheço (verifiquei no Help do próprio forms tb.), são para FORMS e WINDOW.
Se existir uma necessidade de se fechar, joga na Window, mas, tb daria pra se executar essa "necessidade" no HIDE_VIEW do canvas, trabalhando juntamente com as propriedades do canvas.
binho_oracle
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Qua, 07 Nov 2007 2:20 pm
Localização: são paulo

Perae rodfbar, não estou acostumado com esses termos... :)
É porque eu peguei um form quase pronto aqui no trabalho, só tenho que
adicionar as funções para alguns botões...

Mas é o seguinte... eu tenho um form com 3 janelas. Uma delas
eu já resolvi. As outras duas que são o problema.

Assim que eu rodo a aplicação abre a janela com a relação dos
funcionários. Nessa janela tenho o botão INCLUIR que quando
acionado abre uma segunda janela de cadastro. Assim que o
cadastro foi feito eu preciso retornar para a tela incial e atualizar
a relação dos funcionários com o novo registro.
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

certo binho....

no forms é o seguinte cara, quando você chama de janela na verdade você fala de objetos que ficao na propriedade janelas(ou windows se for versão ingles) da sua aplicação, quando você fala de canvas é o objeto que fica na propriedade canvases da sua aplicacao...

o que a gente precisa saber é, quando você da o go_block e o hide view que te passamos sua janela de cadastro ainda fica aberta sobrepondo a antiga???

o que esta aparecendo para você???
binho_oracle
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Qua, 07 Nov 2007 2:20 pm
Localização: são paulo

O HIDE_VIEW e o GO_BLOCK funcionam: eu escondo
a tela de cadastro e a tela que fica em primeiro
plano é a tela de relação dos funcionários, mas obviamente,
sem a atualização.
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Binho

se você colocar o execute_query abaixo do go_block os dados dos funcionarios serão atualizados..

[]'s
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

coloca os comandos que te passei que tinham os set_block_property e o execute_query


vê se ajuda você
binho_oracle
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Qua, 07 Nov 2007 2:20 pm
Localização: são paulo

beleza rodbar e Tineks...
Só que assim...o código do funcionário não
está em nenhum campo da tela, ele é incrementado
com um NEXTVAL, vou ver uma maneira de recuperá-lo.
Só não entendi exatamente o que esse EXECUTE_QUERY
faz. Até vocês terem paciencia pra me responder eu vou
lendo o help... :)
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

EXECUTE_QUERY faz com que o bloco refaça a consulta no banco de dados atualizando os registros no bloco onde ele fou envocado
binho_oracle
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Qua, 07 Nov 2007 2:20 pm
Localização: são paulo

beleza rodfbar...vou tentar aqui
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

se tiver problemas para recuperar sua sequence tenta colocar no primeiro set_block_property que te passei

Selecionar tudo

 SET_BLOCK_PROPERTY(BLOCO1,DEFAULT_WHERE,'CD_FUNCIONARIO IN(SELECT MAX(CD_FUNCIONARIO) FROM FUNCIONARIOS');
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

editando

Selecionar tudo

SET_BLOCK_PROPERTY(BLOCO1,DEFAULT_WHERE,'CD_FUNCIONARIO IN(SELECT MAX(CD_FUNCIONARIO) FROM FUNCIONARIOS)'); 
binho_oracle
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Qua, 07 Nov 2007 2:20 pm
Localização: são paulo

Aham...entendi.

Brigadão rodbar...vou ver aqui
binho_oracle
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Qua, 07 Nov 2007 2:20 pm
Localização: são paulo

Ele compila, mas aparece aquele "no changes to save"

Essa passagem do código ficoi assim:

Selecionar tudo

--retornar para a tela principal ( e carregar novamente a tela principal)
 HIDE_VIEW ('CNV_MANUT');
GO_BLOCK ('BL_PRINCIPAL');
 SET_BLOCK_PROPERTY('BL_PRINCIPAL',DEFAULT_WHERE,'ID_FUNC IN(SELECT MAX(ID_FUNC) FROM FUNCIONARIO'); 
EXECUTE_QUERY; 
SET_BLOCK_PROPERTY('BL_PRINCIPAL',DEFAULT_WHERE,''); 
o que faz esse segundo SET_BLOCK_PROPERTY? E não entendi porque
desse erro, rodfbar
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

esse segundo set_block_property é para limpar a clausula where que foi definida no primeiro...

para no caso de você dar um f7 para fazer uma outra consulta ele não ter esta como default.... entendeu????

essa mensagem deve ser antes deste processo... tenta no fim deles colocar um CLEAR_MESSAGE;
binho_oracle
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Qua, 07 Nov 2007 2:20 pm
Localização: são paulo

beleza...vou fazer isso, ai já respondo
binho_oracle
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Qua, 07 Nov 2007 2:20 pm
Localização: são paulo

Ele adiciona o resgitro, tudo certo... esconde essa janela,
mas a outra não é atualizada com o outro registro.

estou usando o código assim:

Selecionar tudo

CLEAR_MESSAGE;
 --retornar para a tela principal ( e carregar novamente a tela principal)
HIDE_VIEW ('CNV_MANUT');
 GO_BLOCK ('BL_PRINCIPAL');
 SET_BLOCK_PROPERTY('BL_PRINCIPAL',DEFAULT_WHERE,'ID_FUNC IN(SELECT MAX(ID_FUNC) FROM FUNCIONARIO'); 
EXECUTE_QUERY; 
 SET_BLOCK_PROPERTY('BL_PRINCIPAL',DEFAULT_WHERE,'');
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

nesse bloco e seus itens que estao na sua primeira tela são data base???
binho_oracle
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Qua, 07 Nov 2007 2:20 pm
Localização: são paulo

Quando eu abro essa primeira tela, são carregados
todos os registros
GuiSS
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 20
Registrado em: Seg, 14 Jun 2010 11:17 am
Localização: São Paulo, SP
Guilherme

Boa tarde.

Para não criar um novo tópico, encontrei este bem antigo, que lembra um pouco a minha dúvida, que na verdade é bem simples.

Tenho um FORMS, com vários canvas. Estes canvas são abertos cada um em uma janelinha diferente.
Porém, eu não consigo transitar entre as janelas que estão abertas.

Eu acredito que seja alguma propriedade do forms que causa isso.
Mas eu não faço idéia de que propriedade poderia ser essa.

Alguém saberia me dizer?

Obrigado!

Abraço!
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

Vai nas propriedades da WINDOW, e veja se a propriedade MODAL está NO.
(se estiver como YES, você tem que fechar ela antes pra continuar o processamento)
GuiSS
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 20
Registrado em: Seg, 14 Jun 2010 11:17 am
Localização: São Paulo, SP
Guilherme

Uhn... BLza!
Era isso mesmo! hehe

Valeeu!

Muito obrigado!
Responder
  • Informação
  • Quem está online

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