Form開發中元件控制的幾個常用方法

longwansheng發表於2010-12-08
在Oracle EBS 的Form二次開發中,經常需要靈活的來控制某些元件是否可用、是否可見;有時希望某些欄位的值自動生成或者手動輸入;有時又希望能夠根據不同的職責、不同的使用者等來設定不同的行為控制。[@more@]Form開發中元件控制的幾個常用方法在Oracle EBS 的Form二次開發中,經常需要靈活的來控制某些元件是否可用、是否可見;有時希望某些欄位的值自動生成或者手動輸入;有時又希望能夠根據不同的職責、不同的使用者等來設定不同的行為控制。常見的需求: 只有某些角色的人才能看到銷售訂單中“登記訂單”這個按鈕 1. 只有某些角色的人才可以切換到某個標籤頁 2. 實現訂單號碼根據需要自動生成編號或者手工錄入 3. 快速編碼的值即可以錄入所有應用下的,也可以只能錄入某個應用,更可以只能錄入某個應用下某個型別下的值 4. 在某些情況下Form需要只能夠查詢 5. …… 在Oracle EBS環境中有很多方法來實現這些功能,但是使用預置檔案(Profile)、子功能(Subfunction)和功能引數(Function Parameter)是最常用最方便有效的3種方式, 一,子功能(Subfunction) 子功能是實際上是一個特殊的功能,利用子功能的方式其實就是使用了Oracle EBS的功能許可權控制來實現安全性的控制,其實質就是某個使用者能夠執行一個被授權的功能,一般情況下會使用子功能來控制某些按鈕是否顯示,進而實現了使用者是否可以操作Form中的某些功能,所以Oracle EBS的開發人員經常使用子功能來透過顯示/隱藏或者有效/失效介面上的元件來實現功能的有效或無效,如上面常見需求中的1,2使用子功能最適合。如下我希望只有授權的使用者才能看到Book Order這個按鈕,看不到的自然也無法進行這個操作了 實現步驟: 1,為Book Order按鈕元件定義一個子功能 2,Form程式碼中根據功能來控制元件在PRE-FORM觸發器中,來判斷使用者是否有許可權看到這個操作,如果有就顯示否則不顯示 ?[Copy to clipboard]View Code PLSQL 12345 IF (fnd_function.test('XHUORDER_BOOK_ORDER')) THEN app_item_property.set_property('headers.book_order', DISPLAYED, PROPERTY_ON);ELSE app_item_property.set_property('headers.book_order', DISPLAYED, PROPERTY_OFF);END IF; 3,將子功能授權給有權的使用者如果某個使用者需要顯示這個按鈕,只要將子功能XHUORDER_BOOK_ORDER新增使用者擁有的職責對應的選單裡面,把子功能XHUORDER_BOOK_ORDER新增為一個選單項,但是Prompt留空就可以 定義的時候需要將Prompt欄位留空,這樣在選單顯示的時候就看不到這個選單項,實際關鍵的是最後的Grant列,預設都是勾上的,代表了授權給相關的職責使用者 二、功能引數功能引數的方法實際上和子功能是一致的控制方法,都是使用功能許可權來進行控制, 它透過針對同一個Form定義多個Function,不同Function引數的值不同來實現控制,Oracle EBS中最典型的應用就是Form中的僅僅查詢功能和快速編碼(Lookup Code)定義介面在快速編碼定義介面中,可以透過APPL_SHORT_NAME引數來控制只能查詢特點應用的快速編碼;LOOKUP_TYPE引數來控制特點型別的快速編碼。實現了引數值不同介面的行為也不同 實現步驟: 1,在Form設計器中定義引數像快速編碼定義的Form中,定義瞭如下圖的引數 2,在Form程式程式碼中引用引數的值來控制根據業務需求和功能設計的要求,透過引數的值來編寫程式碼,如 ?[Copy to clipboard]View Code PLSQL 123456789101112131415 if (:parameter.lookup_type is not null) then set_block_property('FND_LOOKUP_TYPES', INSERT_ALLOWED, PROPERTY_FALSE); end if; if (:parameter.appl_short_name is not null) then :parameter.appl_short_name := upper(:parameter.appl_short_name); :parameter.appl_id := fnd_utilities.get_application_id(:parameter.appl_short_name); :parameter.application := fnd_utilities.get_application_name(:parameter.appl_id); app_item_property.set_property('FND_LOOKUP_TYPES.APPLICATION_NAME', INSERT_ALLOWED, PROPERTY_OFF); end if; parameter的引數值在Form執行的時候會從Function定義中傳入 3,定義Function時設定具體的引數值如上面顯示的DEMAND_CLASS的快速編碼,引數為:VIEW_APPLICATION=”AU” LOOKUP_TYPE=”DEMAND_CLASS” 為Function定義了引數,在執行的時候就會到form的parameter中去查詢同名的引數,並將等號(=)後的值傳給引數,多個引數間用空格隔開。因此可以採用功能引數值的不同定義不同的功能,並賦給對應使用者的職責就實現了不同的控制三、預置檔案(Profile) 預置檔案的控制是這些方法中最靈活最強大的一種方法,透過預置檔案可以實現到站點層、應用層、職責層和使用者層的控制,預置檔案相當於Oracle EBS系統中根據的一個全域性變數,這個全域性變數在不同的上下文可以設定為不同的值,因此在Form的開發中可以使用它來實現業務邏輯的控制,上面列出的常見需求都可以使用預置檔案的方法來實現,只是預置檔案太過靈活,所以有的需求則顯得大材小用,因此只要需要較靈活層次控制並符合站點層、應用層、職責層和使用者層這樣層次控制的時候才採用。實現步驟: 1,定義預置檔案在Application Developer職責下定義預置檔案,就像在Oracle EBS系統中定義一個變數的感覺,SQL Validation區域就是預置檔案可以定義的值列表 2,Form中根據預置檔案值進行控制 ?[Copy to clipboard]View Code PLSQL 1234567 l_order_num_mode := fnd_profile.value('DEMO_ORDER_NUMBER_MODE'); if :parameter.order_number_mode = 'AUTOMATIC' then app_item_property.set_property('HEADERS.ORDER_NUMBER', REQUIRED, PROPERTY_FALSE); app_item_property.set_property('HEADERS.ORDER_NUMBER', ENTERABLE, PROPERTY_FALSE); app_item_property.set_property('HEADERS.ORDER_NUMBER', NAVIGABLE, PROPERTY_FALSE); end if; 上面的程式碼代表瞭如果預置檔案DEMO_ORDER_NUMBER_MODE的值是AUTOMATIC的話,進行ORDER_NUMBER的控制 3,設定預置檔案的值 Form程式中根據預置檔案值的不同進行了不同的控制,而預置檔案的值則是根據需要進行設定 透過以上預置檔案值設定的不同,Form控制的項就會根據設定的不同表現出不同的行為。 上面描述的3個方法是Oracle EBS Form二次開發中最常用的方法,根據功能需求的不同選擇最適合的方法。

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

相關文章