zoukankan      html  css  js  c++  java
  • MO_GLOBAL

    在改EBS的BUG过程中,会在网上查找很多资料,这次是碰到一个多组织(Multi Org)的问题,发现Anil Passi的几篇文章不错,慢慢的会陆续翻译过来,这次翻译的是http://getappstraining.blogspot.com/2006/10/orgid-and-multi-org-in-oracle-apps.html


    为什么我们需要org_id

    在任何一个跨国公司中, 都会在不同的地区有自主经营的子公司,我们以一个游戏公司为例,公司名称是'GameGold Inc',在文章中我们叫它'黄金游戏公司',在英国和法国都设有组织机构.


    请注意以下各点:

    1.这家公司(黄金游戏公司)在伦敦和巴黎都有办公室.

    2.英国和法国税不同,也就是都有自己的tax code.

    3.黄金游戏公司是以单实例的方式来实现Oracle应用程序的(英国和法国都使用一个应用程序数据库).

    4.当'英国订单输入'或者'英语应付'用户登录到应用程序后,他们不希望看到法国姐妹公司的税务代码(Tax Code).

    5.在黄金游戏公司中单个数据库实例中, 只有一张表用来存储税务列表, 我们假设这张在Oracle中的表名是 'ap_tax_codes_all'.

    6. 在这张表中我们假设有两条记录:

    记录 1 tax code -"FRVAT"

    记录 2 tax code - "UKVAT"

    7. 我们再进一步的假设有两个职责:

    职责 1 - "French order entry".

    职责 2 - "UK order entry"

    8. 现在,法国的用户使用职责 1 - "French order entry"

    9. 英国的用户就使用职责 2 - "UK order entry"

    10. 在订单输入界面, 有一个输入项: Tax Code(或者 VAT Code).

    11. 对法国用户来说, 在输入项中, 'UKVAT'是不能在值集列表是出现.

    12. 而且, "法国订单输入" 用户只能在税的输入项中选择 "FRVAT".

    13. 同样的, 英国的主意输入用户只能选择"UKVAT".

    在不用硬编码的情况下,这些是如果实现的呢?答案就是org_id.


    这些名词会被习惯性的使用到: ORG_ID/Multi-Org/Operating Unit.


    截屏在文章的底部
    1. 在应用程序中,你可以定义两个组织机构: "French operations" and "UK Operations", 这些可以通过组织机构定义来实现(截屏).

    2.在Oracle应用程序中, 一个组织机构可以归类为HRMS Org, 或者 Inventory Warehouse Org, 或者 Business Group, Operating Unit Org 或者更多的类型. 记住,组织机构类型只是用来标识组织机构定义的一种意思(Organization type is just a mean of tagging a flag to an organization definition).

    3.我们定义的这两个组织机构是operating unit类型的, 接下来会用到org_Id 和 operating unit 这两个习惯用语.

    4.我们可以说,英国的组织机构有一个内部的organization id = 101, 法国的则是102.



    问: 你是如何建立起英国职责
    (UKresponsibility)和英国组织(UK organization)机构间的关系?

    答:在'uk order entry'职责下,设置profile 'MO : Operating Unit'的值为 'UK organization'

    : 系统是如何知道 UKVAT 是属于uk org的?
    : 在 VAT code 输入界面(税务代码会被输入), 下面的语句会被执行:
    Insert into ap_vat_codes_all values(:screenblock.vatfield, fnd_profile.value('org_id').
    或者, 使用 USERENV('CLIENT_INFO')

    下一个问题, 当在值集列表(VAT)中显示VAT Codes 时, 数据库是否会做: select * from ap_vat_codes_all where org_id=fnd_profile.value('ORG_ID')?
    : 是的.

    Oracle 会做以下操作
    1. 当插入数据库到multi-org表中时,也会同时做insert into (vatcode,org_id) ....

    2.用以下方式创建一个视图:

    Create or replace view ap_vat_codes as Select * from ap_vat_codes_all where org_id = fnd_profile.value('ORG_ID')

    3.在值集列表(LOV)上,select * from ap_vat_codes ,

    如果通过以上说明还没有明白, 那么继续往下看.

    快速浏览:
    1.在多组织环境中(像在一个数据库中的UK和france), 每一张Multi-Org的表都会有一个名为'org_id'的列, 像发票这个的表是对组织敏感的,因为UK的用户没有理由去看到以及修改法国的发票,所以发票的表会有org_id这一列.

    2.供应商站点/位置(Vendor Sites/Locations)也是有区分的,因为UK会在dell.co.uk中存放订单而法国则会在dell.co.fr中存放, 这些在Oracle术语中被叫作vendor sites.

    3.任何一张multi-org的表(有org_id这一列)的名称,都会以'_all'结束.

    4.对每张 _all 的表, Oracle会提供一个名称中没有'_all'的相关视图, 例如create or replace view xx_invoices as select * from xx_invoices_all where org_id=fnd _profile.value('org_id').

    5.在插入数据库到这个表中时,org_id列的值也会被填充.

    6.如果你想对所有的operating unit做一个输出,那么使用select from _all table.

    7.在APPS中的_all 对象会作为一个同义词关联到真实schema中的_all 表,例如,在APPS schema中的po_headers_all是PO schema中po_headers_all的同义词.

    8. 使用SQL*Plus 连接到数据库做以下操作:
    connect apps/apps@dbapps ;
    --假设 101 是法国的 Org Id
    execute dbms_application_info.set_client_info ( 101 );
    select tax_code from ap_tax_codes ;
    ---返回 FRVAT

    下面是一些截屏:


  • 相关阅读:
    读写INI配置文件
    log4net自动邮件
    C#往SQLServer中插入大数据
    C#反射
    正则表达式
    收发邮件
    读写文本
    Selenium—选择框的相关操作(单选框、多选框、复选框、下拉框)
    Selenium—iframe的操作
    Selenium—web元素的操作
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299288.html
Copyright © 2011-2022 走看看