關於在PL/SQL代碼中提交請求

來源:互聯網
上載者:User

在代碼中提交請求有兩種情況:

1、 
在PL/SQL程式中提交請求

在PL/SQL中調用fnd_request.submit_request,

/* Submit a request where no setup is required */

DECLARE

  REQ_ID NUMBER;

BEGIN

  REQ_ID :=
FND_REQUEST.SUBMIT_REQUEST(’FND’,  --應用程式名稱

’FNDMDGEN’,
--請求名

’MESSAGE
FILE GENERATOR’, --描述

’01–NOV–02 00 :00 :00’, --開始時間

 FALSE, --是否是子請求 true/false

Arg1,--參數一

Arg2,--參數

 Char(0)); --參數以char(0)結束

  IF (REQ_ID = 0) THEN

    /* Handle submission error */

    ……

  ELSE

    COMMIT;--一定要commit,因為這樣提交的請求,實際上是往表FND_CONCURRENT_QUEUES裡插了一條記錄,可以在這個表裡找到我們提交的請求的輸出檔案和記錄檔的儲存路徑

  END IF;

END;

Fnd_request.submit_request()有一百多個參數,但是在Pl/SQL程式裡邊我們不用寫滿,只用在當參數結束時加一個char(0)就可以了,當返回的req_id是0的話表明提交請求不成功

 

 

2、 
在Form中提交請求

在Form中提交請求我們得寫滿一百多個參數,如果不寫就會出錯,可以把給提交的程式的空參數寫到這樣:’’ 或是null,必須湊足一百個,例如:

declare

    l_request_id    number;

    l_return_flag boolean;

    L_BL_RESULT     boolean;

    X_PHASE     
    VARCHAR2(100);

    X_STATUS    
    VARCHAR2(100);

    X_DEV_PHASE 
   VARCHAR2(100);

    X_DEV_STATUS    VARCHAR2(100);

    X_MESSAGE   
    VARCHAR2(100);

begin

    l_request_id :=
FND_REQUEST.SUBMIT_REQUEST('CUX',                                                                       'CUXEXRENILE',                                                             '',                                                                           
'',                                                                           
FALSE,                                                                     'Hi man',                                                               'It''s work!',                                                            
CHR(0),--參數結束

                                            /*剩下的參數*/

                   '','','','','','','',

'','','','','','','','','','', 

                                             '','','','','','','','','','',

                                             '','','','','','','','','','',

                                             '','','','','','','','','','',

                                             '','','','','','','','','','',

                                             '','','','','','','','','','',

                                             '','','','','','','','','','', 

                                             '','','','','','','','','','', 

                                             '','','','','','','','','','');

        l_return_flag := APP_FORM.QUIETCOMMIT;    --commit

/*如果出錯提示*/

        IF l_request_id IS NULL OR l_request_id
= 0 THEN

                    FND_MESSAGE.RETRIEVE;

                FND_MESSAGE.ERROR;

        END IF;

/*等待請求結束*/      L_BL_RESULT:=FND_CONCURRENT.WAIT_FOR_REQUEST(REQUEST_ID=>l_request_id,

                                                     INTERVAL   =>1,

                                                     MAX_WAIT   =>0,

                                                     PHASE      =>X_PHASE,

                                                     STATUS     =>X_STATUS,

                                                     DEV_PHASE  =>X_DEV_PHASE,

                                                     DEV_STATUS =>X_DEV_STATUS,

                                                     MESSAGE   
=>X_MESSAGE);

        /*請求結束後開啟請求尋找from,找到提交的請求*/

FND_FUNCTION.EXECUTE(   FUNCTION_NAME=>'FND_FNDRSRUN',

                                OPEN_FLAG=>'Y',

                              SESSION_FLAG=>'Y',

                         OTHER_PARAMS=>'CONCURRENT_PROGRAM_NAME="CUXEXRENILE"
PROGRAM_APPL_SHORT_NAME="CUX" DODT_REQ_ID="'||TO_CHAR(l_request_id)||'"');              

end;

在From中提交請求除了要把參數寫完之外,我們應該把commit換到標準的寫法do_key(’commit_form’),上例中用的是app_from.quitecommit,也是一種from裡標準的寫法,它在後台悄悄地commit。當請求提交不成功時我們用fnd_message.retrieve,把訊息棧裡的錯誤訊息取出來,用fnd_message.error來顯示錯誤資訊,你可以不用擔心它會彈出別的進程的訊息,因為訊息棧是區分進程的。

提交請求時我們可以等待請求結束,上例中fnd_concurrent.wait_for_request()就是用來等待請求結束的,interval表示多長時間檢查一次請求的執行情況,max_wait表示最大等待多長時間,設為0時就等到它有結果,下面的幾個參數包括請求的執行情況。

Fnd_function.execute()用來執行一個function,function_name為function的簡稱,用other_params可以給這個function提供一些參數,當然這個function要支援這些參數,上例中我執行的function是請求尋找function,在other_params中我們傳了請求ID,這樣執行完成之後就可以直接跳到請求尋找form中並找出我們提交的請求。

再說一點和fnd_request.submit_request()有關係的東西,我提交一個請求時,很多情況下是列印一個報表,列印的報表可以是在PL/SQL中用HTML寫的報表,也可以是用XML publish做的報表,我們說說XML publish形式的報表,XML publish可以支援多種格式的報表,如PDF、TEXT、excel,一般我們在報表範本定義的時候就定好了格式,想在代碼中控制它的輸出格式可以這樣:

在fnd_request_submit_request()之前,我們寫這樣的代碼:

l_temp := fnd_request.add_layout(template_appl_name => 'CUX',--應用簡稱

                                      
template_code      => 'CUXAPPMBL',

                                       template_language  => 'zh',--語言

                                      
template_territory => 'CN', --地區

                                      
output_format      =>
l_output_format);--格式

fnd_request.add_layout()用來給報表添加部局,我們可以把l_output_format設成我們想要的格式,如’PDF’,’RTF’

當然一個報表要想有兩個模板也是可以的,只要在定義模板時選擇同一個資料定義就行了,在調用之前我們要選擇使用的模板,如下例:

--設定模板

    IF l_show_list = 'Y' THEN

      l_temp :=
fnd_request.add_layout(template_appl_name => 'CUX',

                                      
template_code      => 'CUXAPPMBL',

                                      
template_language  => 'zh',

                                      
template_territory => 'CN', --REC.default_territory

                                      
output_format      =>
l_output_format);--'PDF');

    ELSE

      l_temp :=
fnd_request.add_layout(template_appl_name => 'CUX',

                                      
template_code      => 'CUXAPPMBLSUM',

                                      
template_language  => 'zh',

                                       template_territory => 'CN', --REC.default_territory

                                      
output_format      =>
l_output_format);--'PDF');

END IF;

有兩個模板:CUXAPPMBL、CUXAPPMBLSUM,根據需要選擇我們要的模板。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.