一、个性化的设置
1、首先检查以下配置文件的设置:
FND_CUSTOM_OA_DEFINTION
Yes表示是否可以进行个性化操作,该选项应该设在用户层,并且不对普通用户开发此选项。
FND_DISABLE_OA_CUSTOMIZATIONS
该选项应该设在地点层或应用层,设置为No,如果设置成Yes,那么所有的个性化设置将无效。
FND_PERSONALIZATION_REGION_LINK_ENABLED
该选项表示是否在每个Region上显示个性化链接。这个可以根据实际需要进行设置,因为页面最顶层的个性化连接本来就可以查到所有的Region和Item进行设置,但是如果页面过于复杂,查找Region或Item将变得很麻烦,此时打开此选项,可以方便的定位。
2、个性化设置的种类
(1)设置Region或Item的属性
大部分在开发时使用JDeveloper工具定义的属性都可以通过个性化进行设置,比如更改显示/隐藏、只读、初始值等。
A、在Region上创建新的元素
a) 可以选择创建新的Item来个性化创建新的元素,而不需要通过编成完成。
b) 可以替换原有的Item,比如将LOV改成Poplist或文本输入框(需要先设置原Item隐藏,再创建新的Item),只要新建的Item绑定到相同的VO属性(CO中没有对替换Item的控制),那么无需编码就可以完成上述修改。
B、可以改变Region上Item的显示顺序
C、改变Region上的控制器,使用自己的CO来代替,这样就可以完全控制该Region,添加需要的逻辑代码
D、创建新的Region,这种情况一般是先创建好一个新的Region,然后个性化设置页面上的Region,继承标准的CO,在CO中动态加载Region
二、扩展标准VO和EO
有的时候Oracle标准的VO或EO会不满足客户化功能的需求,此时需要扩展VO或EO。比如VO中的查询需要查询不同的表、增加不同的字段等等。当然也可以在继承的CO中去获取VO,更改SQL语句或增加查询条件或增加排序规则来实现对标准功能的更改。但有些情况下是无法完成的,比如页面上的VO是自动查询的情况(HGrid、LOV中),或者标准代码使你没有时机去做以上操作。
扩展标准的VO和EO只需要创建新的VO和EO,在创建的第一步,选择需要扩展的对象。其余和新建一个VO或EO的过程完全一致。可以参考Toolbox练习完成该操作。当扩展了VO和EO后,就可以添加自己的代码,比如重载VO的executeQuery()方法,EO的validateEntity()等方法。
然后在JDeveloper中双击.jpx文件,进行置换操作,最后在项目的Run属性中,添加-Djbo.project选项。
需要注意的是,扩展和个性化不同,个性化设置可以在地点层、应用层、用户层等等,扩展一旦发布到服务器,就对所有用到的都起作用。
三、扩展和个性化的维护
1、个性化的维护
有时个性化的设置会引起问题,比如在Region上设置继承了一个CO(地点层),但开发中程序有BUG(或者设置了错误的CO),只要一访问页面就抛出系统异常,此时无法再进入页面更改个性化设置。
最简单的办法是查找jdr_attributes表
select * from jdr_attributes where att_value like '%XxxCO'
找到对应的att_comp_docid记录,把该att_value修改掉,或者删除掉。
(该方法也可以用于快速查询当前是否设置了个性化,继承标准的CO,这是我最常用的检查CO设置的方法)
2、删除个性化
Oracle EBS系统的功能管理员职责可以维护个性化设置,删除页面上定义的个性化。也可以手工删除数据库表记录来实现。
可以从jdr_paths最顶层开始,按以下SQL找到att_comp_docid
SELECT path_name, path_docid, path_owner_docid, path_type
FROM jdr_paths
START WITH path_name = 'CsfDashBoardPG'
CONNECT BY PRIOR path_owner_docid = path_docid
得到的path_docid就是jdr_attributes表中的att_comp_docid,这样做的好处是如果在多个层上设置过个性化,可以很快找到需要更改或删除的那些数据。
注:只有在特殊情况下才需要这样操作,一般都在界面上完成。
一般情况下,不要将个性化定义在地点层,万一出错,则没有办法再进入此页面,必须删除个性化定义。尽量使用功能管理员来删除个性化。
2、扩展的维护
(1)导入和导出
扩展了标准的VO和EO,需要把置换发布到服务器上,在开发指南中提供了一种使用jpx导入的方式。不过如果有多个环境需要发布,最好的办法是在第一次把jpx导入到MDS中的置换导出来。
以下是一个命令实例:
java -classpath d:\java\classes\ oracle.jrad.tools.xml.exporter.XMLExporter /oracle/apps/csf/portal/task/server/customizations/site/0/CsfPoTaskDetailsVO -rootdir D:\java\jdevhome\20060810\jdev -username apps -password apps -dbconnection "(description = (address_list = (address = (community = tcp.world)(protocol = tcp) (host =devfsdb1)(port = 1522))) (connect_data = (sid = devfm1)))" -dbdrvFile d:\java\jrad\config\TemplateAppsJRADCustomizationFile.xml
这里的classpath指定运行XMLExporter所需要的类,可以从服务器上直接获取,可以根据运行过程中出现的提示从服务器上下载类文件到本地。
(运行所需的类库在本地也都有,可以简单的通过查看jpximport.bat找到所有需要的类库,设置classpath)
/oracle/apps/csf/portal/task/server/customizations/site/0/CsfPoTaskDetailsVO这就是置换后的对象。
这里有一个简便的方法,当第一次导出之后,以后再要导出置换,只需要参照第一次导出的XML文件编写一个类似的XML文件,这里申明一下,没把握的请千万别做这一步。
把置换导入到其它服务器的过程跟导入页面的过程完全一致。
(2)置换的检查
当置换导入后,可以通过以下过程进行检查:
BEGIN
jdr_utils.listcustomizations('/oracle/apps/csf/portal/schema/server/DebriefLines');
END;
如果已经置换成功,在output中会输出
/oracle/apps/csf/portal/schema/server/customizations/site/0/DebriefLines
(3)删除置换
使用jdr_utils.deleteDocument('/oracle/apps/csf/portal/schema/server/customizations/site/0/DebriefLines')来删除对标准VO或EO的置换。
转载于:https://blog.51cto.com/shaofeng/656222