还有两种常用的方法实现即时打印:
- OAF 还没有接触过。
- Call Report from Form没有测试成功。
先留个位置。
RUN_PRODUCT适用于FORMS 6i版本 的FORMS调用REPORT。
RUN_REPORT_OBJECT 适用于 FORMS 9i 或10g版本的FORMS调用REPORT。
RUN_REPORT_OBJECT仅是调用REPORT众多内置子程序的一个,这个子程序并不能替代RUN_PRODUCT直接打开报表的功能。,因为6i是c/s模式,而9i 或10g是b/s模式。报表发布的方式大不一样。建议您学习9i 或10g的WEB报表发布有关章节。
步骤1. 开发EBS报表
用Report Builder + BI 开发报表并部署到EBS。(详细步骤略)
步骤2. Form中创建Report Object
新增Report, 选择步骤1建立的RDF文件即可建立 Report Object。
步骤3. 添加按钮并添加触发器代码
Declare
Param Paramlist;
v_conc_prog_name VARCHAR2(30) := 'CUXWIPREQ'; --请求简称
v_report_server VARCHAR2(30) := 'REP60_DEV'; --报表服务器名称
v_rdf_path VARCHAR2(50) := '/u01/DEV/appldev/devappl/cust/11.5.0/reports/ZHT';
v_report_id Report_Object;
vc_ReportServerJob Varchar2(100);
vc_rep_status varchar2(100);
v_job_id varchar2(100);
Begin
Param := Get_Parameter_List(v_conc_prog_name);
If Not Id_null(Param) Then
Destroy_parameter_list(Param);
End If;
Param := Create_Parameter_List(v_conc_prog_name);
--add_parameter(Param,'PARAMFORM',TEXT_PARAMETER,'no');
Add_Parameter(Param, 'P_REQ_NUMBER', TEXT_PARAMETER, 'REQ109758'); --REQ109758为参数
v_report_id := FIND_REPORT_OBJECT('CUXWIPREQ_OBJECT');
Set_report_object_property(v_report_id, report_desformat, 'PDF');
Set_report_object_property(v_report_id, report_destype, CACHE);
Set_report_object_property(v_report_id, report_comm_mode, SYNCHRONOUS);
Set_report_object_property(v_report_id, report_server, v_report_server);
--set_report_object_property(v_report_id, report_filename, v_rdf_path || 'CUXWIPREQ.rdf');
Set_report_object_property(v_report_id, report_execution_mode, RUNTIME);
--Set_report_object_property(v_report_id, reprot_other, 'paramform=no');
vc_reportserverjob := Run_report_object(v_report_id, Param);
v_job_id := Substr(vc_reportserverjob, instr(vc_ReportServerJob,'_',-1) + 1);
vc_rep_status := Report_object_status(vc_reportserverjob);
IF vc_rep_status = 'FINISHED' Then
web.show_document ('EBS网址:port/reports/rwservlet/getjobid'
|| v_job_id
|| '?server=' ||v_report_server,
'_blank'
);
ELSE
FND_MESSAGE.SET_STRING('error when running report' || vc_rep_status);
FND_MESSAGE.SHOW;
END IF;
End;