Application(EBS)開發整理(轉)

sudn發表於2012-02-23

Profile

一個Profile其實就是一個引數,在開發員職責裡面定義,注意這個時候選擇的Application僅僅是方便管理,對以後的使用沒有限制;一個Profile的具體值需要在系統管理員職責裡面定義,可以分別在四個層次上定義,即Site/Application/Responsibility/User,具體來說可以給任意一個Site或任意一個Application或任意一個Resp或任意一個User定義這個Profile的值,可以四個層次都定義,也可以定義某幾個層次;對於一個Session來說,一個Profile到底取什麼值是和上面的定義有關係的,即後面的覆蓋前面的,如果它定義了的話。我們可以通過fnd_profile.value('Profile_Name')來取得當前會話的Profile值,庫存組織profilemfg_organization_id


在用fnd_request.submit_request的時候,第五個引數用false,不要被引數名稱誤導;這個函式有105個引數,前面五個定義請求本身,後面100個是傳遞給請求的具體引數,都是Char型別,我們需要轉換,預設值是chr(0),代表這個引數不用傳遞給呼叫的請求;在Package裡面呼叫只需要傳遞需要的引數個數,因為它有預設值指示結束;在form裡面則不行,要寫滿105個,而且我們引數結束之後要用一個chr(0)來表示結束

submit_request的時候,其實最終還是向fnd_concurrent_requests(另外我們定義的request是儲存在Fnd_Concurrent_Programs裡面的)裡面插入一行資料,如果不提交的話,該請求是不會真正開始執行的,所以我們一般在submit_request之後來個Commit,否則的話如果使用wait_for_request的話會無限期等待下去;在Form裡面需要注意的是,必須使塊基於資料庫,不然沒得Commit假如在一個請求內部使用了submit_request,特別注意的是需要檢查Concurrent ManagerProcess數至少為2,否則上述兩個請求會處於死鎖狀態


資料庫表中的Org_Id或者Organization_Id對初學者來說往往搞不清楚是哪個層次的組織,一般來說前者是OU,後者是庫存組織,然而這也不一定,有一個簡易的方法是,只要我們碰到Item,比如在訂單中,那麼一般是指庫存組織

_all
,基表,儲存多組織資料,裡面有一個Org_Id欄位,一般不直接出現在我們的DML
去掉_all的檢視,根據使用者環境過濾掉組織,相當於普通的基表,我們直接使用它,就當它是基表
_v
,檢視,給Form
_kfv
,啟用關鍵性彈性域的時候動態生成的檢視,包含Concact過的欄位組合
_dfv
,啟用描述性彈性域的時候動態生成的檢視,我們取彈性域子段的描述的時候,需要用使用者出口函式。。。。。。。。。。。
_tl,基表,有language欄位,us肯定有,其他的看安裝
_vl
,檢視,根據環境設定過濾語種,所以做報表用_vl
_s
,序列號
_API
Package,保證向後相容
_PKG
PackageProgram
_SV
Package,供Form呼叫
rowid
,偽列,指明記錄物理位置,檔案號+塊號等,具體的我也不清楚
rownum
,偽列,指明符合條件的記錄的記錄號,需要注意的是這個記錄號在Order By之前就已經決定,如果想用Order By之後的記錄號,只能再套一層Select
level
,偽列,指明樹狀結構記錄的層次,以下示例程式碼可作為Form. Tree的資料來源
        select 1 state, level, CUSTOMER_NAME,null,CUSTOMER_ID
        from da_customers a
        start with PARENT_CUSTOMER_ID = -1
        connect by prior  CUSTOMER_ID =  PARENT_CUSTOMER_ID
who
,五個記錄建立及修改歷史的欄位,可以通過OAHelp/Record History選單檢視
attribute_xxx
,描述性彈性域欄位


檔案系統File system的層次一般是$APPL_TOP/$MODULE_TOP such as $GL_TOP,$AU_TOP/Version/forms,reports,sql,.../EN,ZHS,...五個層次,在URL中有一個語言引數,它的值是根據使用者當前的NLS_LANG設定來的;假如指明是中文,那麼Form. Server會到ZHS下取檔案,在任何其他語言對應的目錄下找不到檔案的話,系統都會到EN目錄下取,假如還取不到,這個時候才報錯。AUApplication Utility,我們編寫的Form原始檔一般放在$AU_TOP/Version/forms/LANG下,而PLL原始檔一般放在$AU_TOP/Version/resource下,但編譯的時候前者要放到對應應用的對應語言的目錄下,而後者還是在源目錄;對於Report,則直接放在對應應用的對應語言下,不需要編譯

一個使用者對應一個或多個responsibility,一個responsibility對應一個或多個menu,一個底層menu對應一個function,一個function對應一個form或者一個報表或者一個程式;一個responsibility對應一個請求組,一個請求組對應一個或多個報表和程式,這個應該放過來說,在定義報表的時候可以選擇哪個請求組;一個responsibility對應一個Application,這個不要和該responsibility擁有的選單混淆,選單沒有限制

Attachements
Oracle
的附件給我們提供了一個方便的功能,只要定義定義,不需要任何程式碼就可以實現附件功能,比彈性域還方便(當然功能沒有彈性域強)
定義Attachements比較容易,遵循115devg中的Attachements章節即可完成。
fnd_attached_*****
系列的表儲存我們在開發員職責裡面的附件定義
fnd_documents_****
系列的表儲存終端使用者的具體的附件業務資料,file型別的附件儲存在fnd_lobs表中
fnd_documents_tl.media_id
可以關聯到fnd_lobs.file_idfnd_documents_long_text.media_idfnd_documents_shot_text.media_id取得相應的附件內容
定義過程如下
1
、定義Entity實體,其實就是表,必須的
        Table                       
輸入表名即可
        Entity ID               
輸入表名即可,如果在同一個標定義多個實體,可以用表名_N”的形式,隨便
        Entity Name               
輸入一個比較友好的名字,這個名字要顯示給使用者看
        Prompt                       
沒什麼用
        Application               
就是我們的應用;如果是定義在Oracle標準表上,最好也用我們自己的應用名,否則升級的時候會丟失
2
、定義Document Categories,其實就是定義一個類別或者說一個標誌,可以直接用系統的Miscellaneous這個類別,可選的
        Category               
輸入任意一個名字即可
        Default Datatype       
隨便選一個,最好選會應用這個Category最常用的型別,比如檔案
        Effective Date               
預設,不填即可
        Assinments
按鈕                這裡不用管
3
、定義Attachement Function,必須的
        Type                       
一個Form可能關聯幾個Function(進一步關聯幾個選單),如果附件在不同的Function下可能不同,比如Category不同(從而可以過濾附件,這就是所謂的安全性),這裡選Function;如果附件不需要區分Function,這裡就選Form
        Name                        Form
或者Function的名字
        User Name               
  自動出來
        Session Context           
我沒用它
        Enabled                     
打勾
4
、點選Category按鈕,為上面定義的Attachement Function選擇剛才定義的Category,或者選擇Miscellaneous,可以選擇任意個,必須的
**Category
的工作原理:Category本身僅僅是一個標誌,就像我們部門字典表一樣;一個Form(或者其Function)會關聯到一個或多個Category(就是在這裡定義);終端使用者在把一個附件新增到這個Form上的一條記錄上時,必定會指定屬於某個Category,可選範圍就是這裡定義的;到這裡Category還沒有顯示出什麼作用,也就是如果僅僅一個地方會用到這個附件,Category就沒什麼用。如果同一個實體的附件會在其他Form上出現,就像115devg文件所說的,一個Product的附件可以在Order Line上被顯示出來,假如使用者上傳了一個圖片作為附件,並分配Categoryxxxxx,如果Order FormCategory沒有包含xxxxx,在Order Line上將看不到那個附件。按我的理解,就這樣。

5
、定義Attachement Function Block,定義我們Form上包含附件的資料塊,每個塊都可以定義,必須的
        Block Name               
輸入塊名,不要告訴我你不知道!
        Method                       
一般Base EntityAllow Change,如果是引用的選Query Only
        Secured By               
這個可以進一步限制安全性,可以不定;這裡我不多說,如果不清楚再找我
       
6
、定義Block-Entity關係,必須的
        Entity                       
選擇上面定義的實體,一行一個
        Display Method               
基礎實體選擇Main Window,引用實體選擇Related Window
        Include in Indicator       
基礎實體打勾,引用實體不選;這個選項其實就是用來初始化工具欄上的圖示,選不選都不影響功能
        Indicator in View       
我沒選
       
操作許可                分別定義Query/Insert/Update/Delete,基礎實體一般允許全部操作,引用物件不能有Insert,其他的看需要
       
定義條件                根據條件更加靈活的定義操作許可範圍;這裡我不多說,如果不清楚再找我

7
、定義關鍵欄位,一般是主鍵,這裡指塊上的Item而非表裡面的,所以需要用塊名.Item,必須的
       
按順序定義,如果基礎塊的實體不定義主鍵,仍然可以工作,但在引用塊將看不到,這是我碰到的問題
8
、定義SQL Statement,附加的限制條件,就像我們在Form開發時定義的Where Clause一樣,一般沒用,可選的
使用過程如下
1
、開啟我們的Form,查詢記錄或者輸入新記錄
2
、注意工具欄上的Attachment按鈕時可用的,點選
3
、出來附件視窗,想怎麼玩都行
最好用IE瀏覽器開啟Oracle Application,有些基於IE核心的瀏覽器可能無法開啟附件上傳視窗

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

相關文章