一、摘要


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. 注册后

PLSQL_R12 MOAC多组织的四个应用(案例)的更多相关文章

  1. SYS_R12 MOAC多组织的四个应用(案例)

    2014-05-31 Created By BaoXinjian

  2. SYS_R12 MOAC多组织底层技术实现技术分析(Oracle VPD) (案例)

    2014-05-30 Created By BaoXinjian

  3. Pandas系列(十四)- 实战案例

    一.series import pandas as pd import string #创建Series的两种方式 #方式一 t = pd.Series([1,2,3,4,43],index=list ...

  4. Flume的四个使用案例

    一.Flume监听端口 1,在linux机器上下载telnet工具 yum search telnet yumm install telnet.x86_64 2.编写flume的配置文件,并将文件复制 ...

  5. maven第四章背景案例

    4.3简要设计 4.3.1接口设计 4.3.2模块结构 思想 先定义出核心接口,一个接口可以认为是一个功能,根据接口划分功能 设计模式就是一种思想,外观模式和代理模式,适配者模式三者的区别 http: ...

  6. java基础之多线程四:简单案例

    多线程案例: 有一个包包的数量为100个,分别从实体店和官网进行售卖.使用多线程的方式,分别打印实体店和官网卖出包包的信息.分别统计官网和实体店各卖出了多少个包包 第一种方法 继承Thread类: p ...

  7. 《数据结构与算法(C语言版)》严蔚敏 | 第四章课本案例

    //二叉树的顺序存储表示 #define MAXTSIZE 100 typedef TElemtype SqBiTree[MAXTSIZE]; SqBiTree bt; //二叉树的二叉链表存储表示 ...

  8. 基于知识图谱的APT组织追踪治理

    高级持续性威胁(APT)正日益成为针对政府和企业重要资产的不可忽视的网络空间重大威胁.由于APT攻击往往具有明确的攻击意图,并且其攻击手段具备极高的隐蔽性和潜伏性,传统的网络检测手段通常无法有效对其进 ...

  9. TCP/IP协议族的四个层次

    OSI7层模型的小结 : 在7层模型中,每一层都提供一个特殊的网络功能.从网络功能的角度看:下面4层(物理层.数据链路层.网络层和传输层)主要提供数据传输和交换功能,即以节点到节点之间的通信为主:第4 ...

随机推荐

  1. Ubuntu批量修改文件名后缀

    比如把当前文件夹下所有scss文件后缀改为less rename 's/\.scss/\.less/' ./*

  2. Android Multimedia框架总结(二十)MediaCodec状态周期及Codec与输入/输出Buffer过程(附实例)

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/53183718 前言:前面几节都是 ...

  3. Sublime text 添加lua

    tools ->build system->new build system... 输入: { "cmd": ["C:\\lua\\lua53.exe&quo ...

  4. 在 Mac OS X 10.10 安装 pyenv 的一个小坑

    小记一下. 因为全面转向 Python 3.4 作为主力开发版本,但是手上的 Mac OS X 和服务器上用的都是 Python 2.7,所以需要安装 pyenv. 按其 github 页面的说明,使 ...

  5. Android文件(File)操作

    Android 使用与其他平台上基于磁盘的文件系统类似的文件系统. 本文讲述如何使用 Android 文件系统通过 File API 读取和写入文件. File 对象适合按照从开始到结束的顺序不跳过地 ...

  6. Swift中实现ruby中字符串乘法倍增的功能

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们知道在ruby中对于字符串类型我们可以用乘法生成一个指定数 ...

  7. iOS开发之WKWebView代替UIWebView

    前言 Xcode8发布以后,编译器开始不支持IOS7,所以很多应用在适配IOS10之后都不在适配IOS7了,其中包括了很多大公司,网易新闻,滴滴出行等.因此,我们公司的应用也打算淘汰IOS7. 支持到 ...

  8. javascript中的AJAX

    兼容地获得XMLHttpRequest对象: var xhr = null; if(window.XMLHttpRequest){ //非IE浏览器 xhr = window.XMLHttpReque ...

  9. OpenMP并行化实例----Mandelbrot集合并行化计算

    在理想情况下,编译器使用自动并行化能够管理一切事务,使用OpenMP指令的一个优点是将并行性和算法分离,阅读代码时候无需考虑并行化是如何实现的.当然for循环是可以并行化处理的天然材料,满足一些约束的 ...

  10. 【Android应用开发】EasyDialog 源码解析

    示例源码下载 : http://download.csdn.net/detail/han1202012/9115227 EasyDialog 简介 : -- 作用 : 用于在界面进行一些介绍, 说明; ...