1、 首先找到生成该页面对应的sql文件,如,xxx.sql文件。增加下拉框的菜单Enq with Download。
2、 再找到对应的report源文件,如XXX.rdf,在Oracle report中修改。
3、 首先,在页面布局中加入文本框Download,并调成蓝色。右键该文本框,选择PL/SQL编辑器,此时会生成一个程序单元XXFormatTrigger(超链接的触发器),在里面加入下载超链接功能。如:
function B_2FormatTrigger return boolean is begin IF upper(:P_ACTION) != 'DOWNLOAD' THEN return (FALSE); ELSE srw.set_hyperlink(EXP_FILE.linkto); return (TRUE); END IF; end;
其中SET_HYPERLINK ( LINK IN VARCHAR2 )函数来自于Reports Builder的内置程序包SRW。
link_to函数是自定义包EXP_FILE的函数。
4、 在程序单元中建立EXP_FILE程序包,包括make、writeto、linkto函数,append、fclose过程。
5、 在报表触发器中找到AFTER PARAMETER FORM,编辑其内容。如:
根据表单的提交动作显示不同格式的页面,即生成要打印的报表就用pdf,页面就用html。
function AfterPForm return boolean is begin IF UPPER(:P_ACTION) = 'REPORT' THEN :DESFORMAT := 'PDF'; :P_TITLE := 'SameSpec Part Number Listing Enquiry'; ELSE :DESFORMAT := 'HTML'; :P_TITLE := 'SameSpec Part Number Listing Report'; END IF; return (TRUE); end;
6、 在报表触发器中找到 BEFORE REPORT,编辑其内容。如:
判断当表单提交动作是下载(Download)时,就要在给下载文件make一个文件名,并给下载后的excel文件追加页面要显示的内容(标题,列名等)。
FUNCTION BeforeReport RETURN BOOLEAN IS BEGIN If upper(:P_ACTION) = 'DOWNLOAD' then :P_SESSION := USERENV('SESSIONID'); :P_TEST := EXP_FILE.make('SameSpec_Part_Number_Listing_Enquiry_'||to_char(sysdate,'yyyymmddhh24miss'),:P_USERID,'csv',false); EXP_FILE.append('|'||'|'||'|'||'|'||'SameSpec Part Number Listing Enquiry'||'|'||'|'||'|'); EXP_FILE.append('|'||'|'||'|'||'|'||'|'||'|'||'|'||'|'||'|'||'|'||'|'); EXP_FILE.append('Selection criteria'||'|'||'Item:'||'|'||:P_ITEM||'|'||'|'||'|'||'|'||'|'||'|'||'|'||'|'||'|'||'|'||'|'); EXP_FILE.append('SameSpec Part No'|| '|' ||'CCN'||'|'||'Item'||'|'||'Description'||'|'||'Make'||'|'||'Dept'||'|'||'Deleted'||'|'||'Glovia Phantom'||'|'||'Felix Phantom'||'|'); return(true); else return(true); end if; END;
7、 打开页面布局,找到字段item,右键选择PL/SQL编辑器,编辑其内容,如:
判断当表单提交动作时下载(Download)时,就要在下载的excel中追加查询到的相应的数据。
FUNCTION F_ITEMFORMATTRIGGER0009 RETURN BOOLEAN IS BEGIN if upper(:P_ACTION) = 'DOWNLOAD' then EXP_FILE.append(:same_spec_no||'|'||:ccn||'|'||:item||'|'||:description||'|'||:make||'|'||:dept||'|'||:deleted||'|'||:phantom||'|'); return (TRUE); else return (TRUE); end if; END;
注意:此处的触发器F_ITEMFORMATTRIGGER必须是通过右键item选择PL/SQL编辑器得到的,不能自己手动建立一个名字相同的触发器,否则,追加数据失败,即下载到的excel中没有数据。
8、 在报表触发器中找到AFTER REPORT,编辑其内容。如:
判断当表单提交动作时下载(Download)时,excel下载完数据后,要关闭。
function AfterReport return boolean is begin If upper(:P_ACTION) = 'DOWNLOAD' Then EXP_FILE.append('|'||'|'||'|'||'|'||'|'||'|'||'|'||'|'||'|'||'|'||'|'||'|'||'|'); EXP_FILE.close; return (TRUE); else return (TRUE); end if; end;
9、编译sql文件和rdf文件,并把rdf文件转换成rep文件,放在项目中相应的位置。