跳到主要內容

FND_REQUEST.SUBMIT_REQUEST的用法說明(提交Request)

FND_REQUEST.SUBMIT_REQUEST函數是用來送出一個Request,傳回一個NUMBER的值。
如果成功,會傳回Request ID的值,失敗則傳回0。

此函數一共有105個參數,前五個參數是定義fnd_request.submit_request自己,
後面的參數則是定義要傳給Concurrent Request的值。而第五個參數要特別注意,
false表示立刻提交,不要被參數名稱給誤導。
如下圖,第六個參數開始設定的值,會依序把值傳給Concurrent Program Parameters

注意:
1、Package使用只需要傳遞需要的參數個數,它會自帶結束的預設值。
2、form則要寫滿105個參數,而且參數結束之後要用一個chr(0)來表示結束。
3、在Toad、PL/SQL Developer、SQL puls等工具內使用,必須初始化global variables。
   也就是利用fnd_global.apps_initialize函數來初始化
4、如果提交Request時,一直傳回0,則檢查是否有初始化環境
5、傳給Concurrent Request的參數個數與定義,可以查詢Request的定義,如下圖:

語法:
Request_id := fnd_request.submit_request(
                  application CHAR, --模組
                  program CHAR,      --應用程式
                  description CHAR,   --說明(可省略)
                  start_time CHAR,    --RUN 時間(可省略)
                  sub_request BOOLEAN, --是否立刻送出Request
                  argument1 CHAR,   --傳給Request的參數1
                  argument2 CHAR,   --傳給Request的參數1
                  argument3 CHAR,   --傳給Request的參數1
                  ....(略)
                  argument100 CHAR);
       
Parameters are as follows:

application - Short name of the application associated with the concurrent
request to be submitted.

program - Short name of the concurrent program (not the executable)
for which the request should be submitted.

description - Description of the request that is displayed in the Concurrent
Requests form. (Optional.)

start_time - Time at which the request should start running, formatted as
HH24:MI or HH24:MI:SS (Optional.)

sub_request - Set to TRUE if the request is submitted from another request
and  should be treated as a sub-request.

argument1...100 - Arguments for the concurrent request; up to 100
arguments are permitted. If submitted from Oracle Forms,
you must specify all 100 arguments.


一、查application(模組)與program(應用程式)名稱的方法
       
方法一:由ERP介面查詢(查Import Items)

由下圖可以得知Short Name就是我們要的Program
位置:「Application Developer」->「Concurrent」->「Program」

依上圖的Application可以找到Short Name,就是我們要的application
位置:「Application Developer」->「Application」->「Register」
   
方法二:執行下列SQL查詢(查Import Item)
SELECT DISTINCT
       fa.APPLICATION_SHORT_NAME, --application(模組)
       fat.APPLICATION_NAME,
       fcp.CONCURRENT_PROGRAM_NAME, --program(應用程式)
       fcpt.USER_CONCURRENT_PROGRAM_NAME,
       fcpT.DESCRIPTION,
       fcpt.LANGUAGE
  FROM fnd_application_tl fat,
       fnd_application fa,
       fnd_concurrent_programs_tl fcpt,
       fnd_concurrent_programs fcp,
       fnd_executables fe
WHERE fat.APPLICATION_ID = fa.APPLICATION_ID
       AND fat.LANGUAGE = fcpt.LANGUAGE
       AND fa.APPLICATION_ID = fcp.APPLICATION_ID
       AND fcpt.CONCURRENT_PROGRAM_ID = fcp.CONCURRENT_PROGRAM_ID
       AND fcp.executable_id = fe.executable_id
       AND fcpt.USER_CONCURRENT_PROGRAM_NAME='Import Items'; --報表名稱
   
   
二、範例,Import Item(mtl_system_items_interface)

1、在Forms內使用

//在Forms中,初始化可以用GLOBAL變數代入
APPS.FND_GLOBAL.apps_initialize(
    user_id =>APPS.FND_GLOBAL.user_id,
    resp_id =>APPS.FND_GLOBAL.resp_id,
    resp_appl_id =>APPS.FND_GLOBAL.resp_appl_id) ;
   
//定義完變數後必須以CHR(0)來表示參數已結束,但是仍然要填滿105個  
v_request_id := fnd_request.submit_request(
    'INV',
     'INCOIN',
     '',
     '',
     FALSE,
    84 ,'1','1','1','1',set_process_id,'2',CHR(0),
     '','','','','','','','','','','',
    '','','','','','','','','','',
    '','','','','','','','','','',
    '','','','','','','','','','',
    '','','','','','','','','','',
    '','','','','','','','','','',
    '','','','','','','','','','',
    '','','','','','','','','','',
    '','','','','','','','','','');

2、在Package中使用

//初始化參數只能由SQL中查詢
SELECT user_id
  INTO l_num_user_id
  FROM applsys.fnd_user
  WHERE user_name ='AA123'; --帳號
       
SELECT responsibility_id
   INTO l_num_resp_id
   FROM apps.fnd_responsibility_vl
   WHERE responsibility_name ='Inventory'; --Responsibility Name
       
SELECT application_id
   INTO l_num_resp_appl_id
   FROM applsys.fnd_application
   WHERE application_short_name = 'INV'; --application name

fnd_global.apps_initialize (user_id => l_num_user_id,
                            resp_id => l_num_resp_id,
                            resp_appl_id => l_num_resp_appl_id
                            );

//只需填入需要個數的參數,會自動帶入結束符號。                                
v_request_id:=Fnd_Request.submit_request (
    application   => 'INV',
    Program       => 'INCOIN',
    description   => '',
    start_time    => '',
    sub_request   => FALSE,
    argument1     => 84,
    argument2     => 1,          
    argument3     => 1,
    argument4     => 1,
    argument5     => 1,  -- Delete processed Record
    argument6     => 5000,  -- Set Process id                  
    argument7     => 2   -- Create/Update item
     );
   

三、查詢Request執行狀態的函數

主要是用Fnd_concurrent.wait_for_ruqest函數來得知目前Request執行的狀態。

Fnd_concurrent.wait_for_request會傳回Boolean值,主要參數如下:
function FND_CONCURRENT.WAIT_FOR_REQUEST
    (request_id IN number default NULL, --Request ID
     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_request_status := Fnd_Concurrent.Wait_For_Request(
    l_request_id,
    5,
    0,
    l_phase,
    l_status,
    l_dev_phase,
    l_dev_status,
    l_message);

IF l_request_status THEN
    IF l_dev_status = 'NORMAL' THEN
        NULL;
    ELSE
        Fnd_Message.Debug('Request執行失敗:'||l_dev_status);
        RETURN;
    END IF;
  ELSE
    Fnd_Message.Debug('Request執行失敗');
    RETURN;
END IF;

留言

這個網誌中的熱門文章

Shell Script簡易教學

一、概論
在許多的情況之下,我們都需要固定一組可以重覆或判斷資訊的指令,
而把這些指令存被在文字檔中,再交由Shell執行,就是Script。
一般會將Shell Script的副檔名命名為.sh,雖然副檔名在Linux中並非必要,
但是有副檔名可以讓我們更容易管理這些檔案。

假設有一個名為test.sh 的 Shell Script,首先用文字編輯器來撰寫內容如下:
#!/bin/bash
echo Hello World

第一行是必需的,它是用來定義你要使用的 shell。Linux中有許多的Shell可以使用,
如:ksh、bash,但是彼此之間語法有所差異,所以我們首先需要定義使用哪一個Shell。
而第二行的 echo 代表列出一個字串,預設會把後面的字串「Hello World」顯示在螢幕上。
將test.sh存檔後,可以用下列其中一種方式執行它:
1、直接輸入 sh test.sh
2、改變test.sh的權限,加上可以執行的權限,
   chmod a+x test.sh
   接著直接執行它:
   ./test.sh

在Shell Script中,「#」表示註解,在#後面將視為註解並且被程式忽略。
例如:
#pwd
ls -l
Shell只會執行ls -l,而不會執行ls -l

而「;」 則代表指令的分隔,例如:
pwd;ls -l

pwd
ls -l
都是一樣執行pwd及ls -l。

二、變數的使用
在Shell Script中,所有的變數都視為字串,因此不需要在定義變數類型。
在Shell中定義和使用變數時並不一樣。
例如,定義一個變數id並且設定值為2013001,接著還要將印出變數的值:
id=2013001 -> 定義變數時前面不加「$」符號
echo $id   -> 使用變數時前面要加「$」符號
注意,在等號的二邊不可以有空白,否則將出現錯誤。

再介紹一個範例:
dir=/home/oracle
ls $dir

這裡我們定義了變數dir的值為/home/oracle,接著用ls指令來印出變數dir,
此時指令會變為ls /home/oracle,所以就把目錄中所有檔案都列出來。


我們再來看一個例子,說明如何使用變數來定義變數:
$ tmppath=/tmp$ tmpfile=$tmppath/abc.txt$ ec…

用Excel 2010製作免費甘特圖

用Excel 2010製作免費甘特圖,以下是完成圖,其實是用圖表的功能加上修改圖表的選項來仿製甘特圖,
並非真正的甘特圖,如果要用免費的甘特圖軟體,可以下載GanttProject,有支援中文。
官方網址:http://www.ganttproject.biz/

首先將任務、開始日期、天數、完成日期填入工作表中,完成計劃後將資料全選,並在工具列上找到橫條圖。
一定要將資料全選起來,不然Excel有可能會判斷錯誤,畫出不符我們需求的圖表
(日期我算錯了,不過不影響製作,可以事後再修改)

圖表出現之後,修改資料的範圍(藍色框的部份),將資料由D6拉到C6。
「完成日期」只是為了讓Excel一開始不要判斷錯誤而產生錯誤的圖表。

在「藍色線條」上按滑鼠右鍵,選擇「資料數列格式」

依下圖點選「無填滿」,把藍色的線條變成透明,讓圖表看起來像是甘特圖。

接著我們要修改欄、列的參數,在下面日期的部份點選滑鼠右鍵,選「座標軸格式」

下方列是日期,所以選「日期」,並選擇一個類型

再來到「座標軸選項」中設定最小、最大值,讓圖表看起來更像甘特圖,其中最小值、最大值的數字,
是由1900/1/1到指定日期的總天數,例如:2014/4/9-1900/1/1=41737天(可用Excel直接相減得出數值)
「主要刻度間距」改為1,也就是間距為1天

接著回到圖表上,在左方任務列上按滑鼠右鍵,選擇「座標軸格式」

這次只選「類別次序反轉」,會把任務上下翻轉。

最後再將圖表的寬度、長度做一個調整就完成了。

補充說明: 如果遇到下列的情形,圖表的內容相反的話,可以按下「切換列/欄」來改變

Excel可以自訂公式(函數)來補足內建公式(函數)無法處理的情形

Excel有許多實用的公式,善用這些公式可以達成大部份的功能,但是萬一公式無法滿足需求時,可以自訂公式來解決。

          自訂公式其實就是自訂函數,先開啟Visual Basic(VBA)


                     新增一個「模組」


在開啟的模組視窗內撰寫VBA的函數程式,例如:

Function TEST01(A, B)
    TEST01 = A * 10 + B * 20
End Function

                    函數TEST01需要兩個參數A、B,並且將計算的結果回傳。



完成上述的設計之後,就可以在插入函數中選擇使用者定義,再選擇TEST01。
(或直接在儲存格輸入函數名稱TEST01)
反正使用的方法就跟一般的Excle的公式一樣就對了。