(一) 多OU總結 1. Form多OU實現 1) 創建一個Table,以CUX_AP_CHECK_HEADER_ALL為例 2) 創建Table的兩個Synonym(一個不含_ALL,一個以_ALL結尾):CUX_AP_CHECK_HEADER和CUX_AP_CHECK_HEADER_ALL 3) 給不含_ALL的Synonym:CUX_AP_CHECK_HEADER加上組織屏蔽的策略函數 dbms_rls.add_policy(object_name => 'CUX_AP_CHECK_HEADER', policy_name => 'ORG_SEC', policy_function => 'MO_GLOBAL.ORG_SECURITY', policy_type => dbms_rls.shared_context_sensitive); 4) 在不含_ALL的Synonym的基礎上創建視圖: CUX_AP_CHECK_HEADER_V 5) 進入FORM時(pre-form觸發器)添加代碼: mo_global.init(&p_appl_shortname);--p_appl_shortname為應用簡稱 6) 當選擇某個OU時(一般在when_validate_item觸發器)中添加代碼:mo_global.set_policy_context('S',&p_org_id);--p_org_id為OU的id 2. Report多OU實現 1) 給並發程序設置業務實體模式:單個,多個和空(默認)。一般設置為‘單個’ 業務實體模式對應表fnd_concurrent_programs中的multi_org_category字段 2) 得到當前OU的值。 使用:mo_global.get_current_org_id或者fnd_global.org_id 3) 在報表的參數和報表的邏輯中加上OU的限制 3. GL數據的多OU實現 1) 得到當前OU的值。 使用:mo_global.get_current_org_id或者fnd_global.org_id 2) 根據OU的值得到部門段的值: DECLARE l_segment1 VARCHAR2(150);--部門段 BEGIN SELECT o3.attribute5 INTO l_segment1 FROM hr_all_organization_units o, hr_all_organization_units_tl otl, hr_organization_information o2, hr_organization_information o3 WHERE o.organization_id = o2.organization_id AND o.organization_id = o3.organization_id AND o2.org_information_context = 'CLASS' AND o3.org_information_context = 'Operating Unit Information' AND o2.org_information1 = 'OPERATING_UNIT' AND o2.org_information2 = 'Y' and o.organization_id = otl.organization_id and o.organization_id = &p_org_id –OU id AND otl.LANGUAGE = USERENV('LANG'); END; 3) 將步驟2得到的值作為限制條件: SELECT gl_code_combinations gcc WHERE gcc.segment1 = l_segment1; 4. Interface多OU總結 1) 給並發程序設置業務實體模式:單個,多個和空(默認)。業務實體模式對應表fnd_concurrent_programs中的multi_org_category字段 2) 如果接口的導入程序中OU作為一個參數,則應該將所有的OU作一次循環。 5. 多OU實現擴展知識 1) 給客戶化應用注冊和取消MOAC的控制 fnd_mo_product_init_pkg.register_application(注冊應用) fnd_mo_product_init_pkg.remove_application(取消應用) 查看支持MOAC的應用SQL: SELECT * FROM fnd_mo_product_init; 2) 給數據庫對象注冊和取消策略-policy dbms_rls.add_policy(注冊策略) dbms_rls.drop_policy(取消策略) 3) 多OU 涉及到的表 a) 查看數據庫對象是否增加了策略-policy SELECT * FROM dba_policies; b) 查看當前session所能訪問的OU SELECT * FROM mo_glob_org_access_tmp; c) 查看當前session應用上下文(context)的值(說明:OU的值保存在context中) SELECT * FROM dba_context dc WHERE dc.namespace LIKE 'MULTI%'; MOAC使用的應用程序上下文:MULTI_ORG,MULTI_ORG2 (二) 多帳套總結 1. 客戶化開發中的多帳套屏蔽 1) 得到當前OU的值。 使用:mo_global.get_current_org_id或者fnd_global.org_id 2) 根據組織id得到帳套id和公司名稱。SQL語句為: DECLARE l_org_information3 VARCHAR2(150);--帳套id l_company_desc VARCHAR2(150);--公司中文描述 BEGIN SELECT o3.org_information3,o3.attribute3 INTO l_org_information3,l_company_desc FROM hr_all_organization_units o, hr_all_organization_units_tl otl, hr_organization_information o2, hr_organization_information o3 WHERE o.organization_id = o2.organization_id AND o.organization_id = o3.organization_id AND o2.org_information_context || '' = 'CLASS' AND o3.org_information_context = 'Operating Unit Information' AND o2.org_information1 = 'OPERATING_UNIT' AND o2.org_information2 = 'Y' AND o.organization_id = otl.organization_id AND otl.language = USERENV('LANG') AND o.organization_id = &p_org_id;--OU id END; 3) 得到本位幣,SQL語句為: DECLARE l_local_currency_code VARCHAR2(15);--本位幣 BEGIN SELECT gsob.currency_code INTO l_local_currency_code FROM gl_sets_of_books gsob, hr_operating_units hou WHERE gsob.set_of_books_id = hou.set_of_books_id AND hou.organization_id = &p_org_id;--OU ID END; 4) 在程序中加上帳套和本位幣的限制 2. 多帳套實現擴展 1) 得到帳套的SQL語句為: SELECT * FROM gl_ledgers; 2) 得到法人的SQL語句為: SELECT * FROM xle_entity_profiles;