trocar as propriedades de item na execução de precedure

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
Henry_jr
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 13
Registrado em: Sex, 25 Set 2009 4:09 pm
Localização: Rio de Janeiro - RJ

Bom dia,

Criei um item e o tornei invisivel. Durante a execução de uma procedure gostaria que ele ficasse visível. É uma procedure que insere dados em uma tabela. Após o insert coloquei um SET_ITEM_PROPERTY('P_ITEM', VISIBLE, PROPERTY_TRUE) mas ele não muda a tela. Tenho de dar algum outro comando ? Algum tipo de refresh na tela ?

Desde já agradeço a ajuda.

Abraços

Henry Jr.
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

Se a procedure continuar rodando, tem que dar um SYNCHORNYZE pra aparecer de imediato.

(é claro, apenas se a proc estiver rodando, pois sempre que o "foco" volta pro usuário, isso é feito automaticamente)
Henry_jr
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 13
Registrado em: Sex, 25 Set 2009 4:09 pm
Localização: Rio de Janeiro - RJ

Eu coloquei o synchronyze depois do comando. Mas mesmo assim o item não aparece. Notei que mesmo sem ter torcado o status do cursor para busy, se eu minimizar a tela e maximizar novamente ele entra na ampulheta. Isso tem alguma coisa a ver ?

Mesmo assim muito obrigado pela ajuda.
Diego_Mello
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 229
Registrado em: Sex, 05 Set 2008 2:59 pm
Localização: Igrejinha - RS
Diego Mello
Igrejinha - RS
www.twitter.com/diegolmello

Isso de minimizar e maximizar é só o fato de estar rodando a procedure.
Provavelmente o menu fica branco também eiuaheiuaheia :P

Tu setou a propriedade do campo pra invisivel ou deixou o canvas nulo?
Henry_jr
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 13
Registrado em: Sex, 25 Set 2009 4:09 pm
Localização: Rio de Janeiro - RJ

Eu setei a propriedade do campo para invisível e quero usar o comando para torna-lo visível dependendo de como o insert está sendo feito na procedure. O que quero na realidade é que apareçam quadrados coloridos na tela dependendo do tipo de informaçõe que está sendo atualizada. Por isso criei o item, troquei a cor de fundo e deixei invisível na propriedade, pensando em trocar a propriedade para visível na execução da procedure.

Valeu.
Diego_Mello
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 229
Registrado em: Sex, 05 Set 2008 2:59 pm
Localização: Igrejinha - RS
Diego Mello
Igrejinha - RS
www.twitter.com/diegolmello

Cara..
deveria funcionar...

Posta o código da tua procedure ai.
Henry_jr
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 13
Registrado em: Sex, 25 Set 2009 4:09 pm
Localização: Rio de Janeiro - RJ

Básicamente a procedure é assim :

Selecionar tudo

PROCEDURE prc_grava_mês IS
   w_erro                     varchar2(100);
   w_mês                      number := :principal.p_mês;
   w_ano                      number := :principal.p_ano;
   cursor c1 is select to_char(n.notaf_dataemi,'mm') mês,
                       to_char(n.notaf_dataemi,'yyyy') ano,
                       n.notaf_clien_sap cliente,
                       (count(distinct n.notaf_num)/count(distinct n.notaf_dataemi)) quantidade,
                       ((sum(n.notaf_vltotal)+sum(n.notaf_vltotalperf))/100)/
                         count(distinct n.notaf_num) valor
                       from tnotaf n
                       where n.notaf_dataemi between to_date('01'||to_char(w_mês,'00')||to_char(w_ano,'0000'),'ddmmyyyy')
		                                 and last_day(to_date('01'||to_char(w_mês,'00')||to_char(w_ano,'0000'),'ddmmyyyy'))
                group by to_char(n.notaf_dataemi,'mm'),
                         to_char(n.notaf_dataemi,'yyyy'),
                         n.notaf_clien_sap;

begin   
   for x in c1 loop
       begin
          insert into tabela values(
                 x.mês,
                 x.ano,
                 x.cliente,
                 x.valor,
                 x.quantidade);
          commit;
          if x.cliente = 451544 then
             set_item_property('principal.p_bloco_cli_esp', VISIBLE, PROPERTY_TRUE);
          end if.
          if x.valor >= 500000 then
             set_item_property('principal.p_bloco_mont', VISIBLE, PROPERTY_TRUE);
          end if;
          SYNCHRONIZE;
        exception
          when others then
               w_erro := substr(sqlerrm,1,100);
               insert into t_erro_pon values(sysdate,'Erro insert tabela - '||w_erro,1);
               commit;
        end;
   end loop;
   commit;
END;
SergioLBJr
Rank: Oracle Guru
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

já pensou na possibilidade de você nunca atender a condição dos seus IF'S??

Coloque o :

Selecionar tudo

set_item_property('principal.p_bloco_mont', VISIBLE, PROPERTY_TRUE);
fora de um if e teste a procedure de novo.

Se não funcionar retorne para o fórum.
Henry_jr
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 13
Registrado em: Sex, 25 Set 2009 4:09 pm
Localização: Rio de Janeiro - RJ

Sergio,

Criei um campo texto para mostrar os status dos campos afim de que eu pudesse acompanhar a execução do forms. Cara, ele mostra que entra no if. Fiz assim :

Selecionar tudo

PROCEDURE prc_grava_mês IS
   w_erro                     varchar2(100);
   w_mês                      number := :principal.p_mês;
   w_ano                      number := :principal.p_ano;
   cursor c1 is select to_char(n.notaf_dataemi,'mm') mês,
                       to_char(n.notaf_dataemi,'yyyy') ano,
                       n.notaf_clien_sap cliente,
                       (count(distinct n.notaf_num)/count(distinct n.notaf_dataemi)) quantidade,
                       ((sum(n.notaf_vltotal)+sum(n.notaf_vltotalperf))/100)/
                         count(distinct n.notaf_num) valor
                       from tnotaf n
                       where n.notaf_dataemi between to_date('01'||to_char(w_mês,'00')||to_char(w_ano,'0000'),'ddmmyyyy')
                                       and last_day(to_date('01'||to_char(w_mês,'00')||to_char(w_ano,'0000'),'ddmmyyyy'))
                group by to_char(n.notaf_dataemi,'mm'),
                         to_char(n.notaf_dataemi,'yyyy'),
                         n.notaf_clien_sap;

begin   
   for x in c1 loop
       begin
          insert into tabela values(
                 x.mês,
                 x.ano,
                 x.cliente,
                 x.valor,
                 x.quantidade);
          commit;
          if x.cliente = 451544 then
             :principal.p_mensagens := 'Entrei no bloco 1';
             set_item_property('principal.p_bloco_cli_esp', VISIBLE, PROPERTY_TRUE);
             synchronize;
          end if.
          if x.valor >= 500000 then
             :principal.p_mensagens := 'Entrei no bloco 2';
             set_item_property('principal.p_bloco_mont', VISIBLE, PROPERTY_TRUE);
             synchronize;
          end if;
        exception
          when others then
               w_erro := substr(sqlerrm,1,100);
               insert into t_erro_pon values(sysdate,'Erro insert tabela - '||w_erro,1);
               commit;
        end;
   end loop;
   commit;
END; 
As mensagens ele mostra, mas o item que quero trocar o atributo não.
Diego_Mello
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 229
Registrado em: Sex, 05 Set 2008 2:59 pm
Localização: Igrejinha - RS
Diego Mello
Igrejinha - RS
www.twitter.com/diegolmello

Põe um PAUSE após setar a propriedade.

Selecionar tudo

 set_item_property('principal.p_bloco_mont', VISIBLE, PROPERTY_TRUE); PAUSE;
Quando ele for chamado, dá uma olhada no rodapé da página.
vê se dá alguma mensagem.

:)
Henry_jr
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 13
Registrado em: Sex, 25 Set 2009 4:09 pm
Localização: Rio de Janeiro - RJ

Segui o seu conselho e acabei descobrindo que não fui devidamente alfabetizado. Tenho até vergonha de dizer mas no nome do campo coloquei P_BOCO_MONT e não reparei que estava errado, por isso que não estava trocando a tributo do item.

Gostaria de agradecer a paciência e a sabedoria de todos.

Abraços.
Diego_Mello
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 229
Registrado em: Sex, 05 Set 2008 2:59 pm
Localização: Igrejinha - RS
Diego Mello
Igrejinha - RS
www.twitter.com/diegolmello

Que isso...
Estamos aqui pra ajudar.

Ou não. :P
Responder
  • Informação
  • Quem está online

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