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:
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:
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
||'¶mform=no';
web.show_document(rep_url, '_blank');
end;
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;
antecipadamente. muito obrigado!!!