Oralce EBS R12中引入了MOAC的控制,所有多OU的表对象都添加了数据库VPD的控制策略,需要访问这些对象中的数据,首先需要进行多组织环境的初始化,但是如果客户化的应用中也需要具备多OU的能力,那也需要按照EBS的规范来创建数据库对象,同时访问客户化数据库对象数据时也需要对客户化应用进行多组织环境的初始化.

 

 

如下所示初始化我的客户化应用XHU:

BEGIN
  MO_GLOBAL.init('XHU');
END;
 
ORA-20001: SQL_PLSQL_ERROR: N, ROUTINE, MO_GLOBAL.INIT, N, ERRNO, -20001, N, REASON, 
ORA-20001: SQL_PLSQL_ERROR: N, ROUTINE, MO_GLOBAL.SET_ORG_ACCESS, N, ERRNO, -20001, N, REASON, 
ORA-20001: APP-FND-02938: 多组织例程初始化产品:  &PRODUCT 的会话失败。请通知您的支持代表。
ORA-06512: 在 "APPS.FND_MESSAGE", line 509
ORA-06512: 在 "APPS.MO_GLOBAL", line 36
ORA-06512: 在 "APPS.MO_GLOBAL", line 757
ORA-06512: 在 "APPS.MO_GLOBAL", line 700
ORA-06512: 在 line 3

运行下面的SQL来检查一下客户化应用的情况:

 

 

SELECT COUNT(*)
  FROM fnd_mo_product_init t
 WHERE application_short_name = 'XHU'
   AND status = 'Y';
 
  COUNT(*)
----------
         0


从上面的SQL结果可以看出由于客户化应用并没有注册为多组织的应用,因此初始化失败,通过下面的脚本来注册客户化应用使得多组织访问有效:

 

 

BEGIN
  fnd_mo_product_init_pkg.register_application('XHU',
                                               'SYSADMIN',
                                               'Y');
  COMMIT;
END;

 

上面语句执行后,客户化应用就具备了多组织访问的能力了,再次进行多组织的初始化就没有问题了。

当然如果你想去掉客户化应用的多组织能力,可以运行下面的代码来移除它

BEGIN
  fnd_mo_product_init_pkg.remove_application('XHU');
  COMMIT;
END;