Oracle Report 中添加下载超链接

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文件,放在项目中相应的位置。

你可能感兴趣的:(oracle)