在oracle报告中动态更改PDF输出文件名

时间:2018-01-25 13:30:31

标签: oracle oraclereports

请指导如何在运行时更改输出PDF文件名

我在参数形式触发器之后使用下面的代码,但它不起作用:

:DESNAME:=' INVOICE _' ||:P_CLIENT ||' .PDF';

请指导我..

2 个答案:

答案 0 :(得分:0)

您没有提到您使用的报告版本;用于创建报告的最多6i程序称为“Reports Builder”,而更高版本使用名称“Reports Developer”。并不重要,但是 - 如果您打开Reports Online帮助系统(导航到“帮助”菜单)并搜索DESNAME,您将找到可用于设置DESNAME值的可执行文件。其中 RWBUILDER 。是的, rwbuilder 是Builder和/或Developer的EXE名称。

这意味着你运气不好,至少关于你试图设置DESNAME值的方式。您无法在任何报告的触发器中设置它。我的意思是,你可以,但它不会产生任何影响。

但是,如果您从例如Oracle Forms开发的表单调用报表,那么您可以使用 RWRUN ,其中可以指定DESNAME值,是的,你可以动态地创建它。

有关更多信息,请阅读我之前指出的帮助。

答案 1 :(得分:0)

在从Forms中调用Reports的几种方法中,我建议您使用RP2RRO.pll添加到您的表单: enter image description here

然后,添加与此pll相关的参数: enter image description here

您可以通过以下代码致电您的报告:

 Pr_Print_Rp2Rro('Rep_Invoice','|Prm1|Prm2|','|'||:Prm1||'|'||:Prm2||'|','no','INVOICE_'||:P_Client||'.PDF');

假设您有两个用户定义的参数,即:Prm1& Prm2Pr_Print_Rp2Rro是一个包含以下代码的过程:

Procedure Pr_Print_Rp2Rro( 
                           i_rep_name  varchar2, 
                           i_prm_name  varchar2, 
                           i_prm_val   varchar2,
                           i_param_frm varchar2, -- 'Yes','No'                            
                           i_desname   varchar2,
                           i_destype   varchar2 default 'FILE'
                         ) Is
  plist          ParamList; 
  arr_prm_name owa.vc_arr; 
  arr_prm_val  owa.vc_arr;  
Begin
  plist := Get_Parameter_List('REPPARAM');
 if not Id_Null(plist) then
  Destroy_Parameter_List('REPPARAM');
 end if; 
  plist := Create_Parameter_List('REPPARAM');  
  Add_Parameter(plist, 'PARAMFORM', Text_Parameter,  i_param_frm); 
  Rp2rro.SetDestype(i_destype); 
  Rp2rro.SetDesname(i_desname);       
 for i in 1..100
 loop 
     arr_prm_name(i) := substr(i_prm_name,instr(i_prm_name,'|',1,i)+1,instr(i_prm_name,'|',1,1+i)-instr(i_prm_name,'|',1,i)-1);
     arr_prm_val(i)  := substr(i_prm_val,instr(i_prm_val,'|',1,i)+1,instr(i_prm_val,'|',1,1+i)-instr(i_prm_val,'|',1,i)-1);   
    if length(arr_prm_name(i)) > 0 then
   Add_Parameter( plist, arr_prm_name(i) , Text_Parameter, arr_prm_val(i) );
  end if;
 end loop; 
  Rp2rro.Rp2rro_Run_Product(Reports, i_rep_name, Synchronous, Runtime,Filesystem, plist,null);
End ;

您可能已经注意到,此过程包含一个方法Rp2rro.SetDesname(i_desname),除非您将Destype参数设置为{{1},否则您可以使用该方法管理您的任务以创建特定于您客户的报告名称}。