Oracle Form中呼叫併發請求生成報表並輸出為PDF的方法

freshairpeng發表於2014-05-12

procedure print_report(order_number in NUMBER,date_from in date,date_to in date) is

           L_REQUEST_ID NUMBER;
            L_BL_RESULT  BOOLEAN;
            v_layout     BOOLEAN;
            X_PHASE      VARCHAR2(100);
            X_STATUS     VARCHAR2(100);
            X_DEV_PHASE  VARCHAR2(100);
            X_DEV_STATUS VARCHAR2(100);
            X_MESSAGE    VARCHAR2(100);
   BEGIN

  /*

           --

          -- Name

          --   add_layout

          -- Purpose

          --   Called before submission to add layout options for request output.

          --

          -- Arguments

          --    Template_APPL_Name            - Template Application Short name.

          --    Template_code                 - Template code

          --    Template_Language             - Template File language (iso value)

          --    Template_Territory            - Template File Territory (iso value)

          --    Output Format                 - Output Format

          --新增輸出模板,FND_REQUEST.add_layout (template_appl_name in varchar2,

                                 template_code     in varchar2,

                                 template_language in varchar2,

                                 template_territory in varchar2,

                                 output_format     in varchar2) return boolean

        */

      v_layout:=FND_REQUEST.ADD_LAYOUT('CUX','TRNORD4848',Null, Null,'PDF');  


  /*

          --

          -- Name

          --   submit_request

          -- Purpose

          --   Submits concurrent request to be processed by a concurrent manager

          --

          -- Arguments

          --   application    - Short name of application under which the program

          --            - is registered

          --   program        - concurrent program name for which the request has

          --            - to be submitted

          --   description    - Optional. Will be displayed along with user

          --            - concurrent program name

          --   start_time    - Optional. Time at which the request has to start

          --            - running

          --   sub_request    - Optional. Set to TRUE if the request is submitted

          --               - from another running request and has to be treated

          --            - as a sub request. Default is FALSE

          --   argument1..100    - Optional. Arguments for the concurrent request

          --  提交併發請求

          --FND_REQUEST.SUBMIT_REQUEST(application IN varchar2 default NULL,

                                      program IN varchar2 default NULL,

                                      description IN varchar2 default NULL,

                                      start_time IN varchar2 default NULL,

                                      sub_request IN boolean default FALSE

                                      argument1,

                                      argument2, ..., argument99,

                                      argument100) return number;

        */  

    L_REQUEST_ID := FND_REQUEST.SUBMIT_REQUEST('CUX','TRNORD4848','','',FALSE,order_number,CHR(0),'','','','','','', '','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',
      '','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');
                                                                                                                                                                                                                                                       
           COMMIT;   
           IF L_REQUEST_ID IS NULL OR L_REQUEST_ID = 0 THEN
              RETURN;
           END IF;  

 /*

          --

          -- Name

          --   WAIT_FOR_REQUEST

          -- Purpose

          --   Waits for the request completion, returns phase/status and

          --   completion text to the caller. Calls sleep between db checks.

          -- Arguments (input)

          --   request_id    - Request ID to wait on

          --   interval         - time b/w checks. Number of seconds to sleep

          --            - (default 60 seconds)

          --   max_wait        - Max amount of time to wait (in seconds)

          --            - for request's completion

          -- Arguments (output)

          --               User version of      phase and status

          --               Developer version of phase and status

          --               Completion text if any

          --   phase         - Request phase ( from meaning in fnd_lookups )

          --   status        - Request status( for display purposes          )

          --   dev_phase    - Request phase as a constant string so that it

          --            - can be used for comparisons )

          --   dev_status    - Request status as a constatnt string

          --   message        - Completion message if request has completed

          --

          --等待併發請求完成,並返回分析/狀態和完成資訊,FND_CONCURRENT.WAIT_FOR_REQUEST(request_id IN number default NULL,

                                                                                          interval IN number default 60,

                                                                                          max_wait IN number default 0,

                                                                                          phase OUT varchar2,

                                                                                          status OUT varchar2,

                                                                                          dev_phase OUT varchar2,

                                                                                          dev_status OUT varchar2,

                                                                                          message OUT varchar2) return boolean;

                */

           L_BL_RESULT := FND_CONCURRENT.WAIT_FOR_REQUEST(L_REQUEST_ID,1,0,X_PHASE, X_STATUS,X_DEV_PHASE,X_DEV_STATUS,X_MESSAGE);
           IF X_DEV_PHASE = 'COMPLETE' AND X_DEV_STATUS = 'NORMAL' THEN
              editor_pkg.report(L_REQUEST_ID,'Y'); --使輸出的報表pdf檔案在瀏覽器中顯示。
           ELSE               
                    fnd_file.put_line(1,RPAD('x_phase',20,' ') || '=' || X_PHASE);
                    fnd_file.put_line(1,RPAD('x_status=',20,' ') || '=' || X_STATUS);
                    fnd_file.put_line(1,RPAD('x_dev_phase=', 20, ' ') || '=' || X_DEV_PHASE);
                    fnd_file.put_line(1,RPAD('x_dev_status=',20,' ') || '=' || X_DEV_STATUS);
                    fnd_file.put_line(1,RPAD('x_message=',20,' ') || '=' || X_MESSAGE);
                    fnd_file.put_line(1,'Warning : Starting journal print report failure! It did not running in 120 seconds, its request_id is ' ||
                                            TO_CHAR(L_REQUEST_ID) || ' please check it.');            
                END IF;
   end print_report;

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

相關文章