WEB PL/SQL Report 的開發方法

liangxichen發表於2011-05-31

此製作方法是結合HTML語言及PL/SQL語言,以所見即所得方式釋出的報表,釋出的結果可直接複製到EXCEL中進行編輯,方便實用.

1.製作報表模板

建議利用DreamWaver 製作. 主要工作是畫報表佈局及表頭.然後拷出生成的HTML語句.如下:

設計視窗:

程式碼視窗:

生成的HTML 語句如下:

無標題文件

----------表頭區域--------------

----------表頭區域--------------

----------資料生成區域--------------

----------資料生成區域--------------

姓名年齡性別部門工資
DATA1 DATA2 DATA3 DATA4 DATA5

2.編寫PL/SQL程式包

利用上面的HTML 語句,結合PL/SQL及標準的釋出語句 HTP.P 來建議過程,總體路是:

A. 用HTP.P 先生成報表的標題部分需顯示的內容.

B. 用HTP.P 再生成HTML語句的表頭區上面的所有語句.

C. 用CURSOR提取需要在資料區域顯示的資料,並建立迴圈.

D. 在迴圈體中用HTP.P顯示HTML語句中的資料生成區域,當然,其中的DATA用上一步的CURSOR來顯示.

E. 利用迴圈重複做上一步的動作.

F. 最後利用HTP.P顯示報表表尾部分的內容.

例句如下:

DECLARE

CURSOR SS IS

SELECT XXXX

FROM XXXX

WHERE XXXX

BEGIN

HTP.P(‘這是一張測試報表’); --輸出報表名稱

HTP.P(SYSDATE); --輸入日期

HTP.P(‘

無標題文件

----------表頭區域--------------

’); –輸出表頭

FOR I IN SS LOOP ---開啟遊標

HTP.P(‘

‘); ---提取資料,中間綠色的為遊標欄位

END LOOP;

HTP.P(‘

姓名年齡性別部門工資
’||I.DATA1||’ ’||I.DATA2||’ ’||I.DATA3||’ ’||I.DATA4||’ ’||I.DATA5||’

‘) –輸出表尾

END;

注:上面例句是假定報表無任何格式.如有格式,可先在DW中設好,這樣的話,HTML語句會不太一樣.

另請注意:如你定義變數來儲存上面的HTML字串,然後用HTP.P(變數)的方式寫的話,一定要把變數的位元組數定義的大點,否則可能報錯.

3.註冊WEB/SQL

路徑: 系統管理員/安全性/WEB PL/SQL

說明: 名稱為你編寫的 PL/SQL的包名及過程名,型別選”程式包過程”

4.註冊功能

路徑: 系統管理員/應用/功能

說明: 功能名自定義, 使用者功能名自定義,建議用真實的報表名

說明: 型別為”SSWA PLSQL函式”,支援維護模式為”無”,上下文為”責任”

說明: WEB HTML 定義為上個步驟所定義的WEB PL/SQL 程式包

5.註冊選單

說明: 上面有提示的均為真實的FORM(即用來呼叫REPORT的FORM.另外設計)

下面沒有提示的均為隱含的功能,即上個步驟所註冊的WEB/SQL功能.

6.設計FORM

製作用來傳遞引數的FORM,設計方法同正常的EBS FORM.

說明: 在執行按鈕裡必須寫入呼叫上述隱含功能的語句,如下:

FND_FUNCTION.EXECUTE( '功能簡稱', 'Y', 'N');一般寫在最後

7.註冊FORM

方法略,但須注意,正常FORM的功能與隱含的報表功能須在一個選單中.

8.引數傳遞

這種方法可能導致引數傳遞比較麻煩. 而 WEB/PLSQL好象又不支援引數的傳遞,因此一般我們這樣實現:

A. 建立儲存引數的資料庫表.

B. 在FORM上選擇引數,在執行報表前,先把引數INSERT到上面的表中,注意,須同時INSERT USER_ID(使用者ID), RESP_ID(職責ID), RESP_APPL_ID(應用ID).語句如下:

insert into XXXX

(USER_ID,

RESP_ID,

RESP_APPL_ID,

--其餘略

)

VALUES ( FND_GLOBAL.USER_ID,

FND_GLOBAL.RESP_ID,

FND_GLOBAL.RESP_APPL_ID,

--其餘略

);

上述語句寫在FORM裡的執行報表前執行.

C. 在PL/SQL程式包裡先初始化客戶資訊,語句如下:

USER_ID := fnd_global.USER_ID;

resp_id := fnd_global.RESP_ID;

RESP_APPL_ID := fnd_global.RESP_APPL_ID;

D. 在PL/SQL程式包裡的遊標應根據上面三個使用者資訊ID,去參數列裡取出引數,然後再開啟遊標.取出正確的資料.

fnd_web_config.GFM_AGENT||/tst_prc?p_t=asdfadf&p_s=aaa

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/59792/viewspace-1050604/,如需轉載,請註明出處,否則將追究法律責任。

相關文章