EBS开发_Form多OU的实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013711561/article/details/78157087

Form多OU的实现

<1>创建一个Table,以CUX_OM_ORDER_HEADER_ALL为例

<2>创建Table的两个Synonym(一个不含_ALL,一个以_ALL结尾):CUX_OM_ORDER_HEADER和CUX_OM_ORDER_HEADER_ALL

<3>给不含_ALL的Synonym:CUX_OM_ORDER_HEADER加上组织策略函数

dbms_rls.add_policy(object_name => 'CUX_OM_ORDER_HEADER',

policy_name => 'ORG_SEC',

policy_function => 'MO_GLOBAL.ORG_SECURITY',

policy_type =>dbms_rls.shared_context_sensitive);

扫描二维码关注公众号,回复: 5965576 查看本文章

<4>在不含_ALL的Synonym的基础上创建视图:CUX_OM_ORDER_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

实例如下:

PACKAGE BODY CUX_MOAC_PKG IS
 
   --MOAC初始化
   procedure pre_form
   is
l_default_org_id number;
l_default_ou_name varchar2(240);
l_ou_count number;
   begin
       MO_GLOBAL.init('CUX');
mo_utils.get_default_ou(l_default_org_id, l_default_ou_name, l_ou_count);
        IF l_default_org_id IS NOT NULL THEN
  copy(l_default_org_id,'PARAMETER.mo_default_org_id');
  copy(l_default_ou_name,'PARAMETER.mo_default_ou_name');
    copy(l_ou_count,'PARAMETER.mo_ou_count');
 END IF;   
--判断是否找到了OU,如果没有找到,则报错
if nvl(l_ou_count,0) <=0 then
 fnd_message.debug('错误001:没有找到相应的OU,请联系系统管理员或开发人员!');
     raise form_trigger_failure;
end if;  
   end pre_form;
   


   /*-----------------------------------------------------------------
   功能:当进入块时,根据MOAC控制的OU数量决定OU字段是否可以录入
   -----------------------------------------------------------------*/
   procedure when_new_block_instance
   is
       l_block_item_id        item;
       l_block_item_name      varchar2(1000);  
   begin
       l_block_item_name:=Name_In('System.Trigger_Block')||'.operating_unit';
       l_block_item_id  :=find_item(l_block_item_name);
       --fnd_message.debug('when_new_block_instance');
       if not id_null(l_block_item_id) then
          if :parameter.mo_ou_count>1 then
            set_item_property(l_block_item_id,update_allowed,property_true);
              set_item_property(l_block_item_id,insert_allowed,property_true);
          else
            set_item_property(l_block_item_id,update_allowed,property_false);
            set_item_property(l_block_item_id,insert_allowed,property_false);
          end if;
       end if;       
   end when_new_block_instance;
   
   
   /*-----------------------------------------------------------------
   功能:当创建记录时,从参数中将默认OU拿过来
   -----------------------------------------------------------------*/
   procedure when_create_record
   is
      l_org_id_name       varchar2(1000);
      l_block_item_name   varchar2(1000);
   begin
      l_org_id_name    :=Name_In('System.Trigger_Block')||'.org_id';
      l_block_item_name:=Name_In('System.Trigger_Block')||'.operating_unit';
      -- fnd_message.debug('when_create_record');
IF :parameter.mo_default_org_id is not null  and name_in(l_org_id_name) is null  THEN
copy(:parameter.mo_default_org_id,Name_In('System.Trigger_Block')||'.org_id');
copy(:parameter.mo_default_ou_name,Name_In('System.Trigger_Block')||'.operating_unit');

 set_item_property(l_block_item_name,item_is_valid,property_true);
END IF;
   end when_create_record;




   /*-----------------------------------------------------------------
   功能:POST-QUERY
   -----------------------------------------------------------------*/
   procedure post_query
   is
      l_org_id       varchar2(1000);
      l_org_name     varchar2(1000);
      l_block_name   varchar2(1000); 
   begin
     l_block_name     :=Name_In('System.Trigger_Block');
  copy(Name_In('System.Trigger_Block')||'.org_id',l_org_id);
       
      if l_org_id is not null then
select hou.name
into l_org_name 
from hr_operating_units hou
where hou.organization_id=l_org_id;
copy(l_org_name,Name_In('System.Trigger_Block')||'.operating_unit');
      end if;
     Set_Record_Property(:system.trigger_record, l_block_name, STATUS, QUERY_STATUS);       
   exception when others then 
      null;
   end post_query;   
   
END;

在form级别的pre_form中加入如下代码

      fnd_standard.form_info('$Revision: 120.1 $',
                             'Template Form',
                             'FND',
                             '$Date: 2012/06/09 11:02  $',
                             '$Author: appldev $');
      app_standard.event('PRE-FORM');
      :parameter.tolerance_enabled := nvl(fnd_profile.value('CUX_PO_A_TOLERANCE_ENABLED'),'N');
      cux_moac_pkg.pre_form;
      fnd_org.choose_org;
      app_window.set_window_position('QUERY_FIND', 'FIRST_WINDOW');

猜你喜欢

转载自blog.csdn.net/u013711561/article/details/78157087