参考: https://wenku.baidu.com/view/aa5de31b0066f5335a8121bc.html
需求:客户地址的省/市/ 区可为任意输入值,需要定义一个省/市/ 区的三级对应关系,选择省份后,市栏位只显示对应省份下的市,区栏位同理
客制地址格式
系统标准的地址格式,诸如客户地址、供应商地址、银行地址之类的默认的格式为:
默认格式不是很好,想设置为(省、市、区、镇、街道)。
先看一下“地址”弹性域的结构,系统其实有默认的五类“地址”类型可选 择,如:英国、日本等格式
手工创建一个自已的地址格式
“ADDRESS_STYLE”快速编码,添加代码为“CN”的行记录,代码要与弹性域结构中定义的值要一致。
应收职责->设定 -> 系统 ->国别; 选择地址样式。
设置效果:
需求:
上述地址的省/市/ 区可为任意输入值,需要定义一个省/市/ 区的三级对应关系,选择省份后,市栏位只显示对应省份下的市,区栏位同理
从属值集需根据前置独立值集的取值进行相应的值设置,可定义一个省/市的二级对应关系,
很遗憾的,ORACLE 的标准功能是不支持多值集从属的,即市级使用从属值集后,区级的从属值集不能根据从属值集的取值进行相应的值设置。
利用独立值集/从属值集将无能为力。但是这多层次的从属在我们身边太常见了,有什么方法 可以实现这个需求呢?我们可以从值集中下手:
方法1:编码划分区域
行政区域的划分可以按国家统一编码,前两位表示省级代码,中间两位表示市级代码, 末两位表示区级代码
Step1. 定义一个独立值集:行政区域值集
Step2: 定义省/市/ 区级使用的表验证值集
Province: 层次为0
hierarchy_level = 0
and flex_value_set_id =
(select flex_value_set_id
from fnd_flex_value_sets
where flex_value_set_name = 'Regionalism')
City: 层次为1,且前两位代码为省级栏位选择的值
substr(flex_value, 1, 2) = :$FLEX$.Province
and hierarchy_level = 1
and flex_value_set_id =
(select flex_value_set_id
from fnd_flex_value_sets
where flex_value_set_name = 'Regionalism')
District: 层次为2,且前两位代码为省级栏位选择的值,中间两位为市级栏位选择的值
substr(flex_value, 1, 2) = :$FLEX$.Province
and substr(flex_value, 3, 2) = :$FLEX$.City
and hierarchy_level = 2
and flex_value_set_id =
(select flex_value_set_id
from fnd_flex_value_sets
where flex_value_set_name = 'Regionalism')
Step3: 将值集应用于地址弹性域
Step4: 测试效果
方法2:编码划分区域
方法1客制的地址格式界面只能显示代码,代码和描述栏位是否可调换一下。
Province_2: 层次为0
hierarchy_level = 0
and flex_value_set_id =
(select flex_value_set_id
from fnd_flex_value_sets
where flex_value_set_name = 'Regionalism_2')
City_2: 层次为1,描述(即代码)的前两位为省级栏位选择的值对应的描述的前两位
substr(description,1,2) = ( select substr(description,1,2)
from FND_FLEX_VALUES_VL
where hierarchy_level = 0
and flex_value_set_id =
(select flex_value_set_id
from fnd_flex_value_sets
where flex_value_set_name = 'Regionalism_2')
and flex_value = :$FLEX$.Province_2)
and hierarchy_level = 1
and flex_value_set_id =
(select flex_value_set_id
from fnd_flex_value_sets
where flex_value_set_name = 'Regionalism_2')
District_2: 层次为2,描述(即代码)的前两位为省级栏位选择的值对应的描述的前两位
描述(即代码)的中间两位为市级栏位选择的值对应的描述的中间两位
substr(description,1,2) = ( select substr(description,1,2)
from FND_FLEX_VALUES_VL
where hierarchy_level = 0
and flex_value_set_id =
(select flex_value_set_id
from fnd_flex_value_sets
where flex_value_set_name = 'Regionalism_2')
and flex_value = :$FLEX$.Province_2)
and substr(description,3,2) = ( select substr(description,3,2)
from FND_FLEX_VALUES_VL
where hierarchy_level = 1
and flex_value_set_id =
(select flex_value_set_id
from fnd_flex_value_sets
where flex_value_set_name = 'Regionalism_2')
and flex_value = :$FLEX$.City_2)
and hierarchy_level = 2
and flex_value_set_id =
(select flex_value_set_id
from fnd_flex_value_sets
where flex_value_set_name = 'Regionalism_2')
地址弹性栏位应用新的值集
测试效果:
方法3:定义从属关系
Province_3: 层次为0
hierarchy_level = 0
and flex_value_set_id =
(select flex_value_set_id
from fnd_flex_value_sets
where flex_value_set_name = 'Regionalism_3')
City_3: 层次为1,描述为省级栏位选择的值
description = :$FLEX$.Province_3
and hierarchy_level = 1
and flex_value_set_id =
(select flex_value_set_id
from fnd_flex_value_sets
where flex_value_set_name = 'Regionalism_3')
District_3: 层次为2,描述为市级栏位选择的值
description = :$FLEX$.City_3
and hierarchy_level = 2
and flex_value_set_id =
(select flex_value_set_id
from fnd_flex_value_sets
where flex_value_set_name = 'Regionalism_3')
地址弹性栏位应用新的值集
测试效果: