zoukankan      html  css  js  c++  java
  • PLSQL_R12 MOAC多组织的四个应用(案例)

    一、摘要


    R12 Form 或者其他二次开发时,很多情况下会涉及R12 MOAC多组织开发,以下介绍了4个常见的应用,如有遗漏还请学友继续补充

    1. 开发时打开Form自动弹出组织选择实现方式(增加Choose ORG功能)

    2. 开发时打开Form中有组织LOV选择实现方式

    3. R12多组织的技术实现方式-VPD技术

    4. VPD技术详解,数据库安全策略 

    下文对这4个情况做一些用法和案例做一下介绍

     

    二、案例


    案例1、开发时打开Form自动弹出组织选择实现方式(增加Choose ORG功能)

        (1). 新增4个Paramters: Chart_Of_Account_Id, Org_Name, Org_Code, Org_id四个参数;

        (2). 在Form Level中Pre-Form中新增fnd_org.choose_org;

        (3). 在Form Level中When-New-Form-Instance中新增app_window.set_title('bxj_windows', :parameter.org_code);

     

    案例2、开发时打开Form中有组织LOV选择实现方式

        (1). Pre-Form触发器初始化MOAC配置环境

            MO_GLOBAL.init(‘ONT’);

            IF l_default_org_id IS NOT NULL THEN — default org id not null
                MO_GLOBAL.SET_POLICY_CONTEXT(‘S’,l_default_org_id);
            ELSE
                MO_GLOBAL.SET_POLICY_CONTEXT(‘M’,null);
            END IF;

        (2). When-Create-Record触发器中复制OU默认值

            在此触发器中将默认的OU ID和OU Name拷贝给Form界面上对应的自动,实现创建记录的时候默认带出默认OU信息。
            copy(name_in(‘global.mo_default_org_id’),’’);
            copy(name_in(‘global.mo_default_ou_name’),’’);

        (3). 创建OU的LOV

            Form界面上的OU 名称字段创建一个LOV,LOV对应记录组的SQL语句如下:
                SELECT hr.organization_id organization_id, hr.NAME organization_name
                  FROM hr_operating_units hr
                 WHERE mo_global.check_access(hr.organization_id) = ‘Y’
              ORDER BY organization_name

     

    案例3、R12多组织的技术实现方式-VPD技术

        (1). 三个Profile<MO: Security Profile、MO: Default Operating Unit、MO: Operating Unit>

        (2). ap_invoices 定义在ap_invoices_all基础之上

            a. 对于VPD<ap_invoices>表,简单的查询一般是不返回记录的,如果想查到记录,需要设置一下上下文先

            b. 普通查询VPD表

                select * from ap_invoices; -->No Output

            c. Single OU Mode

                BEGIN  execute mo_global.set_policy_context('S',204);

                --204为ORG_ID,S表示Single Org ContextEND;select * from PO_HEADERS;--会输出OU:204下边的所有PO

                --Multiple OU Mode(simulate login to a specific responsibility)

               Call fnd_global.apps_initialize(userid,resp_id,resp_appl_id);

            d. call MO_GLOBAL.INIT(p_appl_short_name);This will read the MO profile option values for your responsibility/user,

                and will initialize the Multi Org Access.

            e.select * from po_headers; -->Output
        (3). MO_GLOBAL.ORG_SECURITY的作用实际上就是根据你关于MOAC Profiles的设置,然后转换为相应Where条件(组织过滤),再进行查询

                

     

    案例4、 VPD技术详解,数据库安全策略 

    (1). 创建Table Or View的数据<bxj_invoices_policy_v>

    复制代码
     1     CREATE OR REPLACE VIEW apps.bxj_invoices_policy_v AS
     2 
     3         SELECT a.invoice_id,
     4 
     5                        b.vendor_name,
     6 
     7                        c.vendor_site_code,
     8 
     9                        a.invoice_num,
    10 
    11                        a.invoice_amount,
    12 
    13                        a.invoice_currency_code
    14 
    15             FROM ap_invoices_all a, ap_suppliers b, ap_supplier_sites_all c
    16 
    17           WHERE a.vendor_id = b.vendor_id AND a.vendor_site_id = c.vendor_site_id
    18 
    19                AND ROWNUM <= 10 
    复制代码

    (2). 创建Policy Function

    复制代码
     1     CREATE OR REPLACE FUNCTION bxj_fun_invoices_policy (s_schema IN VARCHAR2,
     2 
     3                                                                                                     s_object IN VARCHAR2)
     4 
     5         RETURN VARCHAR2
     6 
     7     AS
     8 
     9     BEGIN
    10 
    11         RETURN 'invoice_currency_code = ' || '''EUR''';
    12 
    13     END; 
    复制代码

    (3). 注册VPD Policy

    复制代码
     1     BEGIN
     2 
     3         DBMS_RLS.add_policy (object_schema => 'APPS',
     4 
     5                                                 object_name => 'BXJ_INVOICES_POLICY_V',
     6 
     7                                                 policy_name => 'POLICY_LIMITED_QUERY_INVOICES',
     8 
     9                                                 function_schema => 'APPS',
    10 
    11                                                 policy_function => 'BXJ_FUN_INVOICES_POLICY');
    12 
    13     END; 
    复制代码

     

    (4). 比较注册Policy前后,View的输出结果,由10条变为了7条,直接过滤了USD的记录

        a. 注册前

             

        a. 注册后

            

  • 相关阅读:
    Leetcode题目:Remove Duplicates from Sorted List
    Leetcode题目:Lowest Common Ancestor of a Binary Search Tree
    Leetcode题目:Ugly Number
    Leetcode题目:Remove Linked List Elements
    Leetcode题目:Count and Say
    6-3 事务
    6-1 视图
    5-2 pymysql模块
    5-1 图形工具Navicat
    4-3 多表查询
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299149.html
Copyright © 2011-2022 走看看