打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【新提醒】[分享知识 原创连载]剖析ORACLE ERP R12 各模块业务逻辑和表关系
前言:
2010年,一次偶然的机会让我接触到了EBS,在做EBS之前一直在做JAVA、.NET开发,那时我很长一段时间都在抉择是否要放弃JAVA 选择EBS,鱼和熊掌不可兼得,有舍才能得,那段时间我再也没有碰JAVA 。
刚刚接触EBS 时一脸的茫然,主要表现:
1、出现问题了都不知道怎么问。
2、别人说个EBS名词 我都没听说过。
3、想学习都不知道沿着哪个方面学习。
4、EBS 资料很难找,而且基本上都是些 R11i 版本。
5、EBS 大部分都是英文文档 而且好多专业术语 很难读懂,所以连载中我将采用”傻瓜式“图文形式 争取让每个人都能够有收货包括自己。
我想很多人和我有过一样的经历, 简单回忆下我是如何走过来的。
1、从简单了解起 比如 从 Oracle 简介、Oracle 产品、Oracle 历史 等等,这些没必要记住 只要别人说的时候你知道就行,可别做EBS 问你oracle或ERP 你不知道是什么,让人笑话 。
2、寻找一个学习的圈子,比如多请教同事、加入些好的QQ群、关注些EBS论坛,那时我一直在低头自学,其实后来发现只有抬头才能看到不一样的精彩。
3、多积累经验和知识, 我的原则是每天不管多忙必须是去技术论坛去读些文章,闲的时候搜索些相关文档,我想没有量的积累哪来的质的飞跃!可能有些知识你当时不知道什么意思,没关系,至少能够知道这个问题或这个名词看见过 应该怎么去查相关资料,关于积累知识方面我想ERP100是个好的平台,呵呵 之前自己开发个方案管理系统 里面存着各种解决方案。
4、主动去解决问题,时刻想着用户有问题是好事情,因为只有在解决问题的同时提升自己解决的能力,不要故意推脱。
最后, 我希望接下来写的文章能够帮助到大家,尽其所能分享自己所学知识,原创源于前辈的探索和后背们的创新,我想大家学习的同时不要刻意的去模仿,理解的同时要有自己的想法,最为重要的是自己真真正正的去反复实践。
我不是高手,但我勇于钻研。
我经验没有,但我肯于请教。
我不会太多,但会一直坚持。
我不是天才,但也不是傻子。
我信仰“没有做不到的,只有想不到的事情!”
-------------------------------------------------------------------------------------------
接下来的时间我将不定期从分销模块、财务模块、进行业务剖析和后台数据走向和表结构进行剖析,感兴趣的朋友可以一起分享和进步!
第二节、从登录开始
User 输入用户名和口令点击“登录”按钮 ,系统会将会验证输入用户是否在用户表fnd_user 中START_DATE 和 END_DATE有效,其次验证user_name、ENCRYPTED_USER_PASSWORD 是否正确,登录成功后首先要更新fnd_user一些字段比如 LAST_LOGIN_DATE 等,其次将判断该用户下访问职责,然后 循环显示职责下对应功能菜单。
综合应用SQL 1
select
fu.user_name,
fe.last_name,
fr.RESPONSIBILITY_NAME,
fr.description, --职责描述
fr.start_date,
fr.END_DATE
from fnd_user                    fu,
hr_employees                fe,
FND_USER_RESP_GROUPS_DIRECT ugd,
FND_RESPONSIBILITY_VL       fr
where to_char(fu.creation_date, 'yyyy') >= '2008'
and fu.employee_id = fe.employee_id(+) --用户与职员关系
and fu.user_id = ugd.user_id
and ugd.RESPONSIBILITY_ID = fr.responsibility_id
and ugd.RESPONSIBILITY_APPLICATION_ID = fr.APPLICATION_ID --- 以上用户与职责关系
and user_name = 'SUNYUKUN' --- 'SUNYUKUN' 登录用户名,可变量
order by
Responsibility_name
综合应用SQL 2
---------------------------------------------------------------------------------------------------
--本SQL获取的是用户对应职责职责对应请求组、请组下对应“程序”【除程序以外还有 集、应用等】
--本SQL也可以简单理解为 获取用户可以提交什么请求,(请求可以简单理解为报表,但请求不是报表,包含关系)
--SQL addTime 2012-05-14 13:11, create by sunyukun
---------------------------------------------------------------------------------------------------
select fu.user_ID,
fu.user_name,
fu.start_date,
fu.END_DATE,
fu.description,
fe.last_name,
fr.RESPONSIBILITY_NAME,
fr.description, --职责描述
fr.start_date,
fr.END_DATE,
frg.request_group_name, ---- 请求组名称
frg.description requestdsc, ---- 请求组描述
fr.menu_id, ---- 菜单  ID
REQUEST_UNIT_TYPE, ---- 请求类型
fcp.user_concurrent_program_name, ---请求并发程序名
decode(fcp.EXECUTION_METHOD_CODE,
'H',
'主机',
'S',
'立即',
'J',
'Java 存储过程',
'K',
'Java 并发程序',
'M',
'多语言功能',
'P',
'Oracle Reports',
'I',
'PL/SQL 存储过程',
'B',
'请求集阶段函数',
'A',
'派生',
'L',
'SQL*Loader 程序',
'Q',
'SQL*Plus',
'E',
'Perl 并发程序')
from fnd_user                    fu,
hr_employees                fe,
FND_USER_RESP_GROUPS_DIRECT ugd,
FND_RESPONSIBILITY_VL       fr,
fnd_request_groups          frg,
FND_REQUEST_GROUP_UNITS     frgu,
FND_CONCURRENT_PROGRAMS_VL  fcp
where to_char(fu.creation_date, 'yyyy') >= '2008'
and fu.employee_id = fe.employee_id(+) --用户与职员关系
and fu.user_id = ugd.user_id
and ugd.RESPONSIBILITY_ID = fr.responsibility_id
and ugd.RESPONSIBILITY_APPLICATION_ID = fr.APPLICATION_ID --- 以上用户与职责关系
and fr.request_group_id = frg.request_group_id(+)
and fr.group_application_id = frg.application_ID(+) --- 以上是请求组和职责关系
and frgu.application_id(+) = frg.application_ID
and frg.request_group_id = frgu.request_group_id(+) --- 以上是请求组中间表与职责
and fcp.CONCURRENT_PROGRAM_ID = frgu.REQUEST_UNIT_ID
and frgu.UNIT_application_id = fcp.application_id
and user_name = 'SUNYUKUN' --- 'SUNYUKUN' 登录用户名,可变量
order by User_id,
Responsibility_name
第一章   EBS 基础架构
第一节、  EBS 表结构常识
all,基表,保存多组织数据,里面有一个Org_Id字段,一般不直接出现在我们的DML中
去掉_all的视图,根据用户环境过滤掉组织,相当于普通的基表,我们直接使用它,就当它是基表
_v,视图,给Form用
_kfv,启用关键性弹性域的时候动态生成的视图,包含Concact过的字段组合
_dfv,启用描述性弹性域的时候动态生成的视图,我们取弹性域子段的描述的时候,需要用用户出口函数。。。。。。。。。。。
_tl,基表,有language字段,us肯定有,其他的看安装
_vl,视图,根据环境设置过滤语种,所以做报表用_vl
_s,序列号
_API,Package,保证向后兼容
_PKG,Package,Program
_SV,Package,供Form调用
第三节、安全机制、职责分配
表结构后续补充
第四节、其他相关知识
1、单点登录实现方法
http://域名/OA_HTML/fndvald.jsp?langCode=ZHS&username=xxx&password=xxxx  xxx  应填写实际EBS 用户名和密码。
2、登录用户密码破解 R12
前提:你有apps的数据库账户,想知道某个用户的密码,因为fnd_user中的密码为加密的,所以无法看懂,你可以尝试用下边的方式来查看用户密码。
...1.创建Package,这个package会调用内部的解码类
[sql] view plaincopyprint?
01.--创建Package声明
02.CREATE OR REPLACE PACKAGE get_pwd
03.AS
04.   FUNCTION decrypt (KEY IN VARCHAR2, VALUE IN VARCHAR2)
05.      RETURN VARCHAR2;
06.END get_pwd;
07./
08.
09.--创建Package Body
10.CREATE OR REPLACE PACKAGE BODY get_pwd
11.AS
12.   FUNCTION decrypt (KEY IN VARCHAR2, VALUE IN VARCHAR2)
13.      RETURN VARCHAR2
14.   AS
15.      LANGUAGE JAVA
16.      NAME 'oracle.apps.fnd.security.WebSessionManagerProc.decrypt(java.lang.String,java.lang.String) return java.lang.String';
17.END get_pwd;
18./
--创建Package声明
CREATE OR REPLACE PACKAGE get_pwd
AS
FUNCTION decrypt (KEY IN VARCHAR2, VALUE IN VARCHAR2)
RETURN VARCHAR2;
END get_pwd;
/
--创建Package Body
CREATE OR REPLACE PACKAGE BODY get_pwd
AS
FUNCTION decrypt (KEY IN VARCHAR2, VALUE IN VARCHAR2)
RETURN VARCHAR2
AS
LANGUAGE JAVA
NAME 'oracle.apps.fnd.security.WebSessionManagerProc.decrypt(java.lang.String,java.lang.String) return java.lang.String';
END get_pwd;
/
2.查询用户
[sql] view plaincopyprint?
01.--Query to execute
02.SELECT usr.user_name,
03.       get_pwd.decrypt
04.          ((SELECT (SELECT get_pwd.decrypt
05.                              (fnd_web_sec.get_guest_username_pwd,
06.                               usertable.encrypted_foundation_password
07.                              )
08.                      FROM DUAL) AS apps_password
09.              FROM apps.fnd_user usertable
10.             WHERE usertable.user_name =
11.                      (SELECT SUBSTR
12.                                  (fnd_web_sec.get_guest_username_pwd,
13.                                   1,
14.                                     INSTR
15.                                          (fnd_web_sec.get_guest_username_pwd,
16.                                           '/'
17.                                          )
18.                                   - 1
19.                                  )
20.                         FROM DUAL)),
21.           usr.encrypted_user_password
22.          ) PASSWORD
23.  FROM apps.fnd_user usr
24. WHERE usr.user_name = '&USER_NAME';
详见附件脚本 get_pwd.rar
3、MAOC 概念
关于R12的新特性Multi-Org Access Control(MOAC).Oracle宣传的好处主要有:
1.enable users to access to secured data in one or more Operating Units from a single responsibility
2.End-Users can access/transact data within several operating units based on Security Profile attached to a responsibility.
3.Profile 'MO:Security Profile' will ensure access to multiple operating units from single responsibility
具 体为什么会改成这样的原因可以从R12的宣传语看出:"The Global Business Release" "R12 Enables You To Think Globally,Work Globally,Manage Systems Globally "
从技术角度的一些拾零记录
1.在R12之前的版本中,组织控制是通过View来实现,比如说AP_INVOICES是定义在AP_INVOICES_ALL上面的View,而View一般都是通过在ORG_ID加条件来限制数据访问.
从R12开始,这样的View被取消了,取而代之的是同义词(synonyms),比如说AP_INVOICES就是AP_INVOICES_ALL的同义词(synonyms).
在R12里可以通过下面的SQL语句来查询有这样关系的表
---
select *
from  dba_synonyms syn
where syn.synonym_name || '_ALL' = syn.table_name
---
2.R12中的组织访问限制是如何实现的呢?
是通过数据库安全方面的新特性virtual private database (VPD) policy来实现的,具体就是给_ALL表的同义词(比如说AP_INVOICES),添加对应的Policy.
这样在在查询的时候,数据库会根据Policy的来生成对应的条件(where)语句,来限制我们对数据的访问.
通过select * from dba_policies where policy_name = 'ORG_SEC'我们可以查询到那些表添加了Policy,以及是通过那个具体的Function来生成要添加的where条件
我们通过查询可以发现,比较具体的一个例子
Policy_name: ORG_SEC
Policy_group: SYS_DEFAULT
Package: MO_GLOBAL
Function: ORG_SECURITY
通过查看MO_GLOBAL.MO_GLOBAL,我们可以看到具体的生成限制语句的逻辑.其中Multiple OU Access是通过GLOBAL TEMPORARY TABLE MO_GLOB_ORG_ACCESS_TMP来实现的.
可以参看Note462383.1来看具体的每种情况会生成什么样的Where条件(a WHERE clause).
3.可以通过表FND_MO_PRODUCT_INIT中的STATUS来判断具体的某个Application是否支持MOAC.
4.通过表FND_MO_SP_PREFERENCES的User_ID, Resp_ID, Security_Profile_ID可以查看缺省的组织(Default Org_ID).相关联的Profile是MO: Default OU
5.MOAC定义的步骤
1.Define Operating Units(Optional)
2.Define Security Profile Enter the Operating Units for which you want access
3.Run concurrent program "Security List Maintenance Program"
4.Assign the security profile to MO: Security Profile profile option for your responsibility or user
5.Assign MO: Default Operating Unit(Optional)
6.Assign MO: Operating Unit(Mandatory for only Single Org or if MO: Security Profile is not defined)
6.MOAC在应用中初始化的基本流程
1.MO_GLOBAL.init
2.Set_Org_Access -- MO_GLOB_ORG_ACCESS_TMP
3.Check FND_MO_PRODUCT_INIT
4.If MO: Security Profile Else MO: Operating Unit
5.Set Policy Context "A", "S", "M" and org_id
注:这里的Policy Context的含义如下
Restrict the data to eliminate only seed data rows is the access mode is All
Restrict the data to a single operating unit if the access mode is Single
Restrict the data to multiple operating units if the access mode is Multiple
Restrict the data to not return any rows if the access mode is None
Reference:
Doc ID:462383.1 SQL Queries and Multi-Org Architecture in Release 12
Select   hou.organization_id ou_org_id,
hou.NAME ou_name,
ood.organization_id org_org_id,
ood.organization_code org_org_code,
msi.secondary_inventory_name,
msi.description
FROM   hr_organization_information hoi, --组织信息
hr_organization_units hou,     --组织单位
org_organization_definitions ood, --组织定义
mtl_secondary_inventories msi  --子库存
Where       hoi.org_information1 = 'OPERATING_UNIT'
AND hoi.organization_id = hou.organization_id
AND ood.operating_unit = hoi.organization_id
AND ood.organization_id = msi.organization_id;
hr_organization_information 中 组织信息表
HR_ORGANIZATION_UNITS_V 组织单位视图
HR_LOCATIONS_ALL_V 组织地点
org_organization_definitions 组织定义
PER_ORG_STRUCTURE_VERSIONS   POSV,
PER_ORG_STRUCTURE_ELEMENTS   POSE,
PER_ORGANIZATION_STRUCTURES  POS,
org_information1 列 区分组织列别  值为表示如下
Setup
业务组
INV
库存组织
FA_ORG
资产组织
HR_ORG
人力资源组织
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Oracle Form开发之调用Form
BC_SQL_用户与职责与请求关系语句
通过传XML格式导入到ORACLE的销售订单
CoreApiHtml.sql -3<-- (INVItemCt115h.sql ) Note: 223702.1
描述性弹性域
如何做trace 每一步 每一行
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服