通过个性化配置,能够在运行时期动态更改配置文件的内容,实现特定需求。
配置个性化支持多种维度,维度可以扩展,维度之间的优先级可以配置。
配置文件(screen,BM等)加载后,在实际使用之前,去数据库查询是否有对该文件的个性化设置。如果有,就加载个性化配置,根据其中的设定,动态修改配置文件。
个性化配置表:fnd_config_element_customization
以文件中的某个具有id属性的tag为单位,存储个性化配置信息
Table 1.
字段
|
含义
|
示例
|
---|
record_id
|
PK
|
|
source_file
|
源文件名
|
/modules/sys/sys_user.screen
|
dimension_type
|
个性化的维度
|
ROLE
|
dimension_value
|
个性化维值
|
1001
|
index_field
|
用于唯一确定某个标签的属性名称
|
id
|
index_value
|
index_field指定的属性值
|
sys_user_define_grid
|
mod_type
|
对配置文件进行更改的操作方式
|
insert: 插入节点 delete:删除此节点 set_attrib: 重新设置属性值
|
position
|
如果是insert操作,要插入的新节点的位置
|
before:在此节点之前 after:在此节点之后 first_child:第一个子节点 last_child: 最后一个子节点
|
config_content
|
如果是insert操作,要插入的配置的内容
|
<a:editors><a:numberField id="cb"/></a:editors>
|
attrib_key
|
如果是set_attrib操作,要设置的属性名
|
width
|
attrib_value
|
如果是set_attrib操作,要设置的属性值
|
900
|
源文件/modules/sys/sys_user.screen,其中包含一个id=sys_user_define_grid的grid,当用户登录角色=1001时,要将宽度设置为500;当用户id=1020时,要将宽度设置为400。那么,会在表中有两条个性化配置记录:
Table 2.
record_id
|
source_file
|
dimension_type
|
dimension_value
|
index_field
|
index_value
|
mod_type
|
attrib_key
|
attrib_value
|
---|
1
|
/modules/sys/sys_user.screen
|
ROLE
|
1001
|
id
|
sys_user_define_grid
|
set_attrib
|
width
|
500
|
2
|
/modules/sys/sys_user.screen
|
USER
|
1020
|
id
|
sys_user_define_grid
|
set_attrib
|
width
|
500
|
此screen执行之前,先通过一条这样的SQL来获取该screen所做的所有个性化配置:
select *
from fnd_config_customization
where source_file=’/modules/sys/sys_user.screen‘
and dimension_type='SYSTEM'
union all
select *
from fnd_config_customization
where source_file=’/modules/sys/sys_user.screen‘
and dimension_type='ROLE' and dimension_value=${/session/@role_id}
union all
select *
from fnd_config_customization
where source_file=’/modules/sys/sys_user.screen‘
and dimension_type='USER' and dimension_value=${/session/@user_id}
这句SQL表示取出系统级、角色级、用户级三个维度的个性化配置,以系统级优先级最低,用户级最高。可以根据实际需求调整这句SQL,来定制维度的种类及优先级次序。
对这句SQL产生的结果,按dimension_type+dimension_value分类汇总,然后依次执行每一组里面配置的个性化内容。排后面的个性化设置会自动覆盖前面的相同设置。
数组元素是指在某个数组中具有唯一属性的元素,如grid的column。这些元素需要通过包含本数组的父节点的id来定位。
数组元素个性化配置数据集表:fnd_config_array_item_customization
以文件中的某个数组集合中的元素为单位,存储个性化配置信息
与fnd_config_customization_detail非常类似,只是多了三个字段:array_name用于确定是哪一个数组,array_index_field & array_index_value用于确定是数组中的哪一个元素。
Table 3.
字段
|
含义
|
示例
|
---|
record_id
|
PK
|
|
source_file
|
源文件名
|
/modules/sys/sys_user.screen
|
dimension_type
|
个性化的维度
|
ROLE
|
dimension_value
|
个性化维值
|
1001
|
index_field
|
用于唯一确定某个标签的属性名称
|
id
|
index_value
|
index_field指定的属性值
|
sys_user_define_grid
|
array_name
|
数组名称
|
columns
|
array_index_field
|
用于唯一确定数组中某个元素的属性名称
|
name
|
array_index_value
|
用于唯一确定数组中某个元素的属性值
|
employee_code
|
mod_type
|
对配置文件进行更改的操作方式
|
insert: 插入节点 delete:删除此节点 set_attrib: 重新设置属性值
|
position
|
如果是insert操作,要插入的新节点的位置
|
before:在此节点之前 after:在此节点之后 first_child:第一个子节点 last_child: 最后一个子节点
|
config_content
|
如果是insert操作,要插入的配置的内容
|
<a:editors><a:numberField id="cb"/></a:editors>
|
attrib_key
|
如果是set_attrib操作,要设置的属性名
|
width
|
attrib_value
|
如果是set_attrib操作,要设置的属性值
|
900
|
对于sys_user.screen,当角色为1001时,要增加一个名为field1的column,并删除start_date,end_date字段;当用户id=1020时,要设置employee_code的宽度=120
Table 4.
record_id
|
source_file
|
dimension_type
|
dimension_value
|
index_field
|
index_value
|
array_name
|
array_index_field
|
array_index_value
|
mod_type
|
position
|
config_content
|
attrib_key
|
attrib_value
|
---|
1
|
/modules/sys/sys_user.screen
|
ROLE
|
1001
|
id
|
sys_user_define_grid
|
columns
|
null
|
null
|
insert
|
first_child
|
<a:column xmlns:a="..." name="field1" />
|
null
|
null
|
2
|
/modules/sys/sys_user.screen
|
ROLE
|
1001
|
id
|
sys_user_define_grid
|
columns
|
name
|
start_date
|
insert
|
delete
|
null
|
null
|
null
|
3
|
/modules/sys/sys_user.screen
|
ROLE
|
1001
|
id
|
sys_user_define_grid
|
columns
|
name
|
end_date
|
delete
|
null
|
null
|
null
|
null
|
4
|
/modules/sys/sys_user.screen
|
USER
|
1001
|
id
|
sys_user_define_grid
|
columns
|
name
|
employee_code
|
set_attrib
|
null
|
null
|
width
|
120
|
如果需要重新设定数组元素的次序,有两种办法:A.在元素中设置顺序号属性,对该属性进行个性化配置;B.单独建一个排序表。待定。
如有必要,对个性化之后的配置文件进行缓存,以提高性能。cache key的设置必须包含所有可能影响个性化内容的因素,如:
[role=1001][user=1010][file=sys_user.screen]
Comments
0 Responses to the article暂时没有评论。