Passagem de Parametros

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
NiNo
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 62
Registrado em: Seg, 11 Jul 2005 2:03 pm
Localização: são Paulo
NiNo
Developer

Ola para todos. Tem uma que há muito tempo não faco, gostaria de ajuda.

Passagem de parametros de um forms para outro.
Tenho um forms PRINCIPAL, onde criei uma lista de parametros corretamente e populei estalista e, chamo o forms SECUNDARIO através da CALL_FORM(p1, p2, p3, p4, plista), como devo proceder para recuperar estes parametros passados no forms SECUNDARIO.

valeu!
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

Simples, basta usa-los dessa forma no form secundário:

Selecionar tudo

 var := :parameter.SEU_PARAMETRO;
Aproveitando, já coloco um exemplo de como passar parametros para um form secundário:

Selecionar tudo

Declare
  p paramlist;
Begin

  --Cria lista de parametros.
	p := Get_Parameter_List('lista_parametro');
	if NOT id_null(P) then
	  Destroy_Parameter_List(p);
	end if;
	p := Create_Parameter_List('lista_parametro');
	
	--Adiciona os parametros do bloco correto.
	Add_Parameter(p,'P_SEQ'     ,TEXT_PARAMETER, :TT_RECEPCAO_AVERBCOL.SQ_LOG);

  --Chama o formulário!
	open_form('FORM_04511', activate, no_session, no_share_library_data, p);
     
end;
NiNo
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 62
Registrado em: Seg, 11 Jul 2005 2:03 pm
Localização: são Paulo
NiNo
Developer

O cogido abaixo esta na trigger when-button-pressed do form CHAMADOR, porem quando eu invoco o forms a ser chamado me aparece a mensagem que esta em vermelho

Selecionar tudo

DECLARE
	vFORMS           VARCHAR2(10) := 'teste';
	vTIPO            VARCHAR2(1)  := ''; -- F= FORMS, T = TABELA;
	vNM_TABELA       VARCHAR2(50) := GET_BLOCK_PROPERTY(:SYSTEM.CURRENT_BLOCK, DML_DATA_TARGET_NAME);
	vHANDLE_REGISTRO NUMBER(10)   := 1;--GET_ITEM_PROPERTY(:SYSTEM.CURRENT_BLOCK, 'HANDLE');
	vName            VARCHAR2(10) := 'pForms';
	pList 					 PARAMLIST;
BEGIN
  pList := Get_Parameter_List(vName);  
  IF NOT Id_Null(pList) THEN
  	Destroy_Parameter_List(pList);
  ELSE
  	pList := Create_Parameter_list(vName);
  END IF;
	Add_Parameter(pList, 'PTIPO', TEXT_PARAMETER, vTIPO);
	Add_Parameter(pList, 'PNM_TABELA', TEXT_PARAMETER, vNM_TABELA);
	Add_Parameter(pList, 'PHANDLE_REGISTRO', TEXT_PARAMETER, TO_CHAR(vHANDLE_REGISTRO));
	CALL_FORM(vFORMS, hide, no_replace, no_query_only, pList);
END;
FRM-47023 - no such parameter name PTIPO exist in form CHAMADO
FRM-47023 - no such parameter name PNM_TABELA exist in form CHAMADO
FRM-47023 - no such parameter name PHANDLE_REGISTRO exist in form CHAMADO
No forms CHAMADO foi especificado no OBJECT NAVIGATOR-PARAMETERS os tres parametros com o mesmo nome, mas mesmo assim me persiste a mensagem.
valeu
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 você criou os parametros direitinho não deveria estar dando esse erro.
Tente confirmar o seguinte:

* Verifique se você está chamando o programa do lugar correto. (pra isso, coloque o caminho completo na chamada abaixo)

Selecionar tudo

CALL_FORM('C:\' || vFORMS, hide, no_replace, no_query_only, pList); 
NiNo
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 62
Registrado em: Seg, 11 Jul 2005 2:03 pm
Localização: são Paulo
NiNo
Developer

valeu cara deu certo. Porem eu tive que especificar o caminho completo da localização do forms que eu desejava carregar, já alterei a variavel FORMS60_PATH no REGISTER do windows e persiste no erro, qual a solucao para este tipo de situacao, tenho tambem alguns icones que informo o caminho completo e tambem desejo regularizar.

Obrigado !
Deathão
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 57
Registrado em: Qui, 16 Jun 2005 11:31 am
Localização: Assis
Contato:
--
Júnior

e seu eu quiser inserir dados no form que está sendo chamado??

eu trato dessa mesmo maneira??

suponde que o campo que está sendo passado por parametro não tem nada cadastrado com ele, eu posso efetuar esse cadastro??? sendo assim quando ele executar a consulta ele já trará tudo amarrado...

valeu pessoal!!
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

Bem, não sei o que você quer fazer.
Mas passar parâmetro, não faz nada além de PASSAR informações de um form para o outro...

Se você quiser inserir, não tem problema...
Deathão
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 57
Registrado em: Qui, 16 Jun 2005 11:31 am
Localização: Assis
Contato:
--
Júnior

mas assim, se o parametro não encontrar nada no form que está sendo chamado não vai dar erro???
Analista
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 24
Registrado em: Qua, 13 Abr 2005 5:09 pm
Localização: Volta Redonda - RJ
Grata,

Analista de Sistemas

Bom dia!

Tenho um form inicial que relaciona todos os meus sistemas em uma tree.

Neste form inicial eu seto um parâmetro (ex.: matricula) que terá que ser passado ao sistema escolhido. Até aí, as explicações sobre passagem de parâmetros me atenderam e funcionaram corretamente.

Ao selecionar um sistema, o form do sistema contém somente um menu que mostrará as funcionalidades pertinentes a cada sistema e a partir do menu eu terei que chamar o form, passando o mesmo parâmetro (ex.: matricula) que eu defini no meu form inicial. Como faço isso? Eu tenho que recriar a minha lista de parâmetros ou posso usar a mesma que recebi do form anterior? Seguindo as mesmas orientações de passagem de parâmetro não funcionou.

Eu tenho também que ter um parâmetro (no exemplo, matricula) em cada form chamado?

Please, help-me.

Obrigada,
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

Tem casos que é melhor usar uma variável GLOBAL. Exemplo:

Selecionar tudo

:global.sua_var := 'BLABLABLA';
Ou seja, essa variávei pode ser acessada por qualquer programa. Daí você não precisa ficar se estressando em passar parâmetros que são comuns a todos programas.
Avatar do usuário
Toad
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 253
Registrado em: Sex, 18 Nov 2005 2:14 pm
Localização: Seattle, WA
Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c

Eu tenho dois forms, um principal e um secundário.

No principal e pego algumas informações e tento passar por :global, mas não está dando muito certo não. Ele abre o Form secundário, mas não copia os valores das variáveis globais para os campos.

Tenho no Form principal, em um botão, o seguinte código:

Selecionar tudo


--WHEN-BUTTON-PRESSED

:global.nm_cont      := :CTT.nm_contato;
:global.NR_DDDTEL    := :CTT.NR_DDDTEL;
:global.NR_TEL       := :CTT.NR_TELEFONE;
:global.NR_DDDCEL    := :CTT.NR_DDDCEL;
:global.NR_CEL       := :CTT.NR_CELULAR;
:global.NR_DDDTELCOM := :CTT.NR_DDDTELCOML;
:global.NR_TELCOML   := :CTT.NR_TELCOML;
:global.NR_DDDFAX    := :CTT.NR_DDDFAX;
:global.NR_TELFAX    := :CTT.NR_TELFAX;
:global.EMAIL        := :CTT.EMAIL;

DECLARE
	alert_button NUMBER; 
BEGIN 
  alert_button := Show_Alert('PFI_PJU'); 
  IF alert_button = ALERT_BUTTON1 THEN 
  	:global.NJUR := 'F';
  ELSE
    :global.NJUR := 'J';
  END IF;
END;  

CALL_FORM('Form_2');
No Form secundário, eu tenho o seguinte código:

Selecionar tudo


-- WHEN-NEW-FORM-INSTANCE

DEFAULT_VALUE('0','global.nm_cont');
DEFAULT_VALUE('0','global.NR_DDDTEL');
DEFAULT_VALUE('0','global.NR_TEL');
DEFAULT_VALUE('0','global.NR_DDDCEL');
DEFAULT_VALUE('0','global.NR_CEL'); 
DEFAULT_VALUE('0','global.NR_DDDTELCOM');
DEFAULT_VALUE('0','global.NR_TELCOML');
DEFAULT_VALUE('0','global.NR_DDDFAX');
DEFAULT_VALUE('0','global.NR_TELFAX');
DEFAULT_VALUE('0','global.EMAIL');
DEFAULT_VALUE('0','global.NJUR');

MOSTRA_MEN('I*','NJUR Global: '|| :global.njur); 

/*

Simplesmente para teste, ele deveria exibir uma mensagem com o valor da global :global.njur ; Aparece somente quando chamado diretamente o form pelo menu, quando eu chamo pelo primário, a mensagem não aparece.

*/

if :global.njur in ('F') THEN
	
	 	   :CG$CTRL.CD_NAT_JUR := :global.njur;
	 	   :PFI.NM_PFI := :global.nm_cont;
	 	   :CCLI.NM_EMAIL := :GLOBAL.EMAIL;
	 	   :CCLI.NM_CCL := :global.nm_cont;
	 	   -- Continua preenchendo os campos...
end if;
Ele simplesmente exibe o Form... mas não exibe os valores...

:cry:
Avatar do usuário
Toad
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 253
Registrado em: Sex, 18 Nov 2005 2:14 pm
Localização: Seattle, WA
Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c

Ah, eu imagino que passagem por parâmetros seja a melhor saída.
Aqui se explica como se envia os dados. Perfeito.
Mas no Form que recebe esses dados, como devo proceder??

Devo ter variáveis que recebam esses dados??
Parâmetros?
Avatar do usuário
Toad
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 253
Registrado em: Sex, 18 Nov 2005 2:14 pm
Localização: Seattle, WA
Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c

:parameter.SEU_PARAMETRO

:?
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

galera, desculpem a 'ingnorância', mas estou tentando entender aqui como que funciona a chamada de uma outra tela passando algum parâmetro qualquer, mas não entendi 100%.

ex. Tela1 chama Tela2, Tela2 exibirá uma msg que conterá um valor passado por parâmetro da Tela1, já sei que precisa criar um Parameter no Tela2

mas não consegui fazer aqui com os exemplos passados, o que quer dizer todos os parâmetros e as funções utilizadas na chamada, na verdade queria entender melhor a chamada, se alguém pudesse explicar...

valeu
Avatar do usuário
Toad
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 253
Registrado em: Sex, 18 Nov 2005 2:14 pm
Localização: Seattle, WA
Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c

E aí Porva, certinho?

Você chegou a fazer algum teste? Tem alguma parte que está enroscando o entendimento??

Bom, como você citou a chamada, vou te passar o que eu costumo fazer:

Selecionar tudo


Declare
  p paramlist; -- Uma lista de Parâmetros a ser enviada.

Begin

 --Cria lista de parametros.
   p := Get_Parameter_List('lista_parametro'); 
   if NOT id_null(P) then -- se ela já existir
     Destroy_Parameter_List(p); -- Destrói
   end if;
   p := Create_Parameter_List('lista_parametro'); -- Cria novamente

 --Adiciona os parametros do bloco correto.
 
  Add_Parameter(p,'P_NOME'      , TEXT_PARAMETER, :SEUBLOCK.nm_nome   );
  Add_Parameter(p,'P_TEL'    , TEXT_PARAMETER, :SEUBLOCK.NR_TEL    );

  -- E assim com todos os parâmetros que você queira enviar para a tela2;
  -- No caso acima, a Tela2 teria que ter os dois parâmetros já criados,
  -- P_NOME E P_TEL

 --Chama o formulário!
   CALL_FORM('tela2', hide, no_replace, no_query_only, p);
   /* onde:
       tela2 é o nome do seu arquivo fmx tela2
       hide é para ele esconder a tela 1 enquanto a tela2 é executada
       p é sua lista de parâmetros.
   */

Agora na sua tela2, na trigger WHEN-NEW-FORM-INSTANCE, você deve adicionar o seguinte:

Selecionar tudo


/****************************************************
                 TRAZ VALORES DOS PARAMETROS
*****************************************************/        
    
DECLARE

v_nome       VARCHAR2(2000);
v_tel            VARCHAR2(15);

BEGIN

     v_nome := :parameter.P_NOME;  
     v_tel  := :parameter.P_TEL;

  -- E pode agora jogar seus valores em outros campos agora  da tela2
  -- ou mostrar mensagens usando as variáveis.

 :BLOCKTELA2.NM_NOME_CLIENTE := V_NOME;
 :BLOCKTELA2.NR_TELEFONE := V_TEL;

 -- ...

END;

Entendeu ou ainda está meio obscuro??

Qualquer coisa diz aí!!

Abraços!

Toad
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

nossa cara, muito obrigado pela atenção e paciência aqui com o iniciante, hehe

depois que postei a mensagem fui tentanto entender sozinho e praticamente cheguei a essa conclusão, mas você detalhou super bem, muito obrigado, fica aí a dica tb pra quem estiver engatinhando assim como eu!

eu era programador Delphi antes, e no Delphi os conceitos são um pouco diferentes, pelo menos no Delphi isso é mais simples do que no Forms, até porque ele é um executável só, então 'todo mundo enxerga todo mundo', desde que você declare, sem ter que criar parâmetros e lista de parâmetros, etc.

mas beleza, vou até salvar a dica aqui, ficou super bem detalhada, valeu mais uma vez
Avatar do usuário
Toad
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 253
Registrado em: Sex, 18 Nov 2005 2:14 pm
Localização: Seattle, WA
Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c

Também trabalho com Delphi, lá o lance é mais na base da Programação orientada a Objeto. Você cria as classes e tudo fica lindo.
No Forms você vai perceber que a visão é um pouco diferente, mas acredite, tem muita coisa que você faz no Delphi em um mês, e no forms em uma semana!! O tempo dirá!

Qualquer coisa, estamos aí!!

Abraços!

:D
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

só, pode crer, já percebi isso desde meus primeiros contatos com o Forms! heheh

eu desenvolvia em Delphi mas no esquema 'orientado a eventos' mesmo :S, nunca manjei muito de OO :(, nem o pessoal da outra empresa que trabalhava :S

mas enfim, é isso aí, produtividade do Forms é muito boa cara, muito objetivo, não tem frescura!
Sidiane Maria Schnaider
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Qui, 27 Ago 2009 9:38 am
Localização: Gaspar - Santa Catarina
Att,
Sidiane Maria Schnaider
Desenvolvedora Oracle

aí pessoal...
Preciso de ajuda...

Como faço pra passar dois parametros ao mesmo tempo... sendo que esses parametros servirão para uma consulta em outra tela?

valeu...
Responder
  • Informação
  • Quem está online

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