Chamar o report através do forms 10g(9.0.4)

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
Avatar do usuário
alef
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 119
Registrado em: Ter, 06 Nov 2007 2:45 pm
Localização: Patos de Minas - MG
Alexandre Matos
Patos de Minas - MG
Do interior de Minas para o resto do Mundo

Galera eu to com o seguinte problema, encontrei já duas formas de chamar o relatório pelo forms, mas queria saber qual a melhor forma para que eu possa ta tambem utilizando para criação de nota fiscal, cheques e boletos.
Estou migrando do forms 6i para o forms 10g, e descobri que já não chamo mais o relatorio pelo RUN_PRODUCT() e sim pelo RUN_REPORT_OBJECT().
Encontrei outro modo de gerar o relatório pelo browser direto utilizando o WEB.SHOW_DOCUMENT() onde passo todos os parametros pela url.

Segue o codigo para o primeiro caso:

Selecionar tudo

declare
	lis   paramlist;
	modo  varchar2(20);
	repid REPORT_OBJECT;
	v_rep VARCHAR2(100);
	rep_status varchar2(20);
			
begin
	lis := get_parameter_list('est');
	if not id_null(lis) then
	  destroy_parameter_list(lis);
	end if;
	
	if :paleta.tipo_imp = 'M' then
		modo := 'CHARACTER';
	else
		modo := 'DEFAULT';
	end if;	
	
	lis := create_parameter_list('est');
	add_parameter(lis,'XDT_INI', text_parameter , to_char(:tparam.dt_ini,'dd/mm/yyyy'));
	add_parameter(lis,'XDT_FIM', text_parameter , to_char(:tparam.dt_fim,'dd/mm/yyyy'));	
	add_parameter(lis,'XCOD_PROP', text_parameter , nvl(to_char(:tparam.cod_prop),'%'));
	add_parameter(lis,'XSIG_PROP', text_parameter , nvl(:tparam.sig_prop,'%'));
	add_parameter(lis,'XCOD_FIL', text_parameter , nvl(to_char(:tparam.cod_fil),'%'));
	add_parameter(lis,'XSIG_FIL', text_parameter , nvl(:tparam.sig_fil,'%'));
	add_parameter(lis,'XCOD_FUNCAO', text_parameter , nvl(to_char(:tparam.cod_funcao),'%'));	
	add_parameter(lis,'XNOME_FUNCAO', text_parameter , nvl(:tparam.funcao_desc,'%'));	
	add_parameter(lis,'XCOD_DEP', text_parameter , nvl(to_char(:tparam.cod_dep),'%'));	
	add_parameter(lis,'XNOME_DEP', text_parameter , nvl(:tparam.dep_desc,'%'));	
  add_parameter(lis,'XTIPO_FUNC', text_parameter , nvl(:paleta.tipo_func,'%'));	
	add_parameter(lis,'XATIVOS', text_parameter , nvl(:paleta.ativos,'%'));	
	add_parameter(lis,'PARAMFORM',  text_parameter ,'NO');
	add_parameter(lis,'MAXIMIZE', text_parameter , 'YES');
	add_parameter(lis,'MODE', text_parameter , modo);
	
	 if :paleta.rel = 1 then
	  repid := find_report_object('mcad_func');
	 elsif :paleta.rel = 2 then
	  repid := find_report_object('mcad_func_dep');
	 elsif :paleta.rel = 3 then
	  repid := find_report_object('mcad_func_func');
	 elsif :paleta.rel = 4 then
	  repid := find_report_object('mcad_func_contr');
	 end if;

SET_REPORT_OBJECT_PROPERTY(repid, REPORT_EXECUTION_MODE, RUNTIME);
SET_REPORT_OBJECT_PROPERTY(repid, REPORT_COMM_MODE, SYNCHRONOUS);
SET_REPORT_OBJECT_PROPERTY(repid, REPORT_DESTYPE, SCREEN);
SET_REPORT_OBJECT_PROPERTY(repid, REPORT_SERVER, 'repserver');
	 
v_rep := RUN_REPORT_OBJECT(repid,lis); -- Neste ponto na versão 6i já seria
 -- executado o runtime do reports6i 
 -- e apresentaria na tela
-- Desse ponto em diante é tudo duvida.
rep_status := REPORT_OBJECT_STATUS(v_rep);
if rep_status = 'FINISHED' then
	Message('Report Completed');
	copy_report_object_output(v_rep,'d:/temp/local.pdf'); -- Aqui surge a minha duvida quanto a esse modelo
	host('d:/temp/local.pdf',no_screen);	-- esse comando vai executar no cliente, mas o arquivo ta no servidor???
else		-- pensei em usar o web util mas não funcionou.
	message('Error when running report.');
end if;

end;

Segue o codigo para o segundo caso:

Selecionar tudo

declare
	rep_url varchar2(2000);
	rep_para varchar2(1000);
	rep_rdf varchar2(60);
	
begin
	if :tparam.dt_ini is not null then
		rep_para := '&XDT_INI=' ||to_char(:tparam.dt_ini,'dd/mm/yyyy');
	end if;
	if :tparam.dt_fim is not null then
		rep_para := rep_para	||'&XDT_FIM=' ||to_char(:tparam.dt_fim,'dd/mm/yyyy');
	end if;
	if :tparam.cod_prop is not null then
		rep_para := rep_para	 ||'&XCOD_PROP=' ||to_char(:tparam.cod_prop);
	end if;
	if :tparam.sig_prop is not null then
		rep_para := rep_para	 ||'&XSIG_PROP=' ||:tparam.sig_prop;
	end if;
	if :tparam.cod_fil is not null then
		rep_para := rep_para	 ||'&XCOD_FIL=' ||to_char(:tparam.cod_fil);
	end if;
	if :tparam.sig_fil is not null then
		rep_para := rep_para	 ||'&XSIG_FIL=' ||:tparam.sig_fil;
	end if;
	if :tparam.cod_funcao is not null then
		rep_para := rep_para	 ||'&XCOD_FUNCAO=' ||to_char(:tparam.cod_funcao);
	end if;
	if :tparam.FUNCAO_DESC is not null then
		rep_para := rep_para ||'&XNOME_FUNCAO=' ||:tparam.FUNCAO_DESC;
	end if;
	if :tparam.cod_dep is not null then
		rep_para := rep_para ||'&XCOD_DEP=' ||to_char(:tparam.cod_dep);
	end if;
	if :tparam.dep_desc is not null then
		rep_para := rep_para ||'&XDEP_DESC=' ||:tparam.dep_desc;
	end if;
	if :paleta.tipo_func is not null then
		rep_para := rep_para ||'&XTIPO_FUNC=' ||:paleta.tipo_func;
	end if;
	if :paleta.ativos is not null then
		rep_para := rep_para ||'&XATIVOS=' ||:paleta.ativos;
	end if;


if :paleta.rel = 1 then
	  rep_rdf := 'mcad_func';
	 elsif :paleta.rel = 2 then
	  rep_rdf := 'mcad_func_dep';
	 elsif :paleta.rel = 3 then
	  rep_rdf := 'mcad_func_func';
	 elsif :paleta.rel = 4 then
	  rep_rdf := 'mcad_func_contr';
	 end if;

	rep_url := '../reports/rwservlet?repHTM'
					 ||'&report='||rep_rdf||'.RDF'
					 ||rep_para
					 ||'&paramform=no';
	web.show_document(rep_url, '_blank');

end;
e o código que era utilizado na versão 6i

Selecionar tudo

declare
	lis   paramlist;
	modo  varchar2(20);
begin
	lis := get_parameter_list('est');
	if not id_null(lis) then
	  destroy_parameter_list(lis);
	end if;
	
	if :paleta.tipo_imp = 'M' then
		 modo := 'CHARACTER';
	else
		modo := 'DEFAULT';
	end if;	
	
	lis := create_parameter_list('est');
	add_parameter(lis,'XDT_INI',      text_parameter , to_char(:tparam.dt_ini,'dd/mm/yyyy'));
	add_parameter(lis,'XDT_FIM',      text_parameter , to_char(:tparam.dt_fim,'dd/mm/yyyy'));	
	add_parameter(lis,'XCOD_PROP',    text_parameter , nvl(to_char(:tparam.cod_prop),'%'));
	add_parameter(lis,'XSIG_PROP',    text_parameter , nvl(:tparam.sig_prop,'%'));
	add_parameter(lis,'XCOD_FIL',     text_parameter , nvl(to_char(:tparam.cod_fil),'%'));
	add_parameter(lis,'XSIG_FIL',     text_parameter , nvl(:tparam.sig_fil,'%'));
	add_parameter(lis,'XCOD_FUNCAO',  text_parameter , nvl(to_char(:tparam.cod_funcao),'%'));	
	add_parameter(lis,'XNOME_FUNCAO', text_parameter , nvl(:tparam.funcao_desc,'%'));	
	add_parameter(lis,'XCOD_DEP'    , text_parameter , nvl(to_char(:tparam.cod_dep),'%'));	
	add_parameter(lis,'XNOME_DEP',    text_parameter , nvl(:tparam.dep_desc,'%'));	
  add_parameter(lis,'XTIPO_FUNC',   text_parameter , nvl(:paleta.tipo_func,'%'));	
	add_parameter(lis,'XATIVOS',      text_parameter , nvl(:paleta.ativos,'%'));	
	add_parameter(lis,'PARAMFORM',    text_parameter ,'NO');
	add_parameter(lis,'MAXIMIZE',     text_parameter , 'YES');
	add_parameter(lis,'MODE',         text_parameter , modo);
	
	 if :paleta.rel = 1 then
	  run_product(reports,'mcad_func',asynchronous,runtime,filesystem,lis,null);
	 elsif :paleta.rel = 2 then
	  run_product(reports,'mcad_func_dep',asynchronous,runtime,filesystem,lis,null);
	 elsif :paleta.rel = 3 then
	  run_product(reports,'mcad_func_func',asynchronous,runtime,filesystem,lis,null);
	 elsif :paleta.rel = 4 then
	  run_product(reports,'mcad_func_contr',asynchronous,runtime,filesystem,lis,null);
	 end if;

end;
Vocês conhecem outro jeito de fazer essa chamada? o que está errado no primeiro caso? sei que muitos tem preguiça de ler posts grandes, mas conto com a ajuda de quem já passou por isso.

antecipadamente. muito obrigado!!!
Avatar do usuário
alef
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 119
Registrado em: Ter, 06 Nov 2007 2:45 pm
Localização: Patos de Minas - MG
Alexandre Matos
Patos de Minas - MG
Do interior de Minas para o resto do Mundo

Papai do céu, faça com que eu procure com as palavras certas.

link

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

Valeu alef

As vezes as mensagens antigas "se perdem" no passado...
Obrigado por botar aí o link!!! :-o
Avatar do usuário
alef
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 119
Registrado em: Ter, 06 Nov 2007 2:45 pm
Localização: Patos de Minas - MG
Alexandre Matos
Patos de Minas - MG
Do interior de Minas para o resto do Mundo

ela tava bem antiga mesmo, porque custei a achar.
Responder
  • Informação
  • Quem está online

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