目录:
- 值集验证类型:无
- 值集验证类型:独立
- 值集验证类型:从属
- 值集验证类型:表
- 值集验证类型:特殊
- 值集验证类型:对
- 值集验证类型:可转换独立
- 值集验证类型:可转换从属 (略)
- FND函数
- 利用API创建独立值集,并插值
- 利用API创建从属值集,并插值
值集是弹性域段或报表参数的允许值定义。
1. 值集验证类型:无
允许输入任意值时,只要该值符合值集数据类型,长度等规则。
Format Type: Char, Date, DateTime, Number, Standard Date, Standard DateTime, Time.
例:15 Characters
2. 值集验证类型:独立
手工输入一组实际值作为批准使用的值,值集中值的含义与其它任何段的值无关。
定义值集名称
手工输入值
3. 值集验证类型:从属
值被划分为不同的子集,每组子集和独立值集的某个值相关联。
大类使用独立值集
小类使用从属值集
这样在大类选择“光学材料”时,小类只会显示“玻璃”、“晶体”和“光学塑料”以供选择。
4. 值集验证类型:表
值来源于表,使用于值数量巨大、改动频繁且有应用产品负责维护。
Table Name:多个表可以用逗号分开,如果需要,可以使用表的别名
Value:显示在参数lov中的列,同时也是返回的值,不需要定义别名。
Meaning: 对应的是lov显示的说明段,会自动附上”说明“别名。
ID:有ID时传ID,没ID时传值;ID中的列不会显示在lov中;不能再出现在附加列中,否则会报错;
Where/Order by: 不可以在子句中使用 HAVING 或 GROUP BY,也不可以在子句中使用 UNION,INTERSECT,MINUS,PLUS 或其它集运算符,除非它们是在子查询中。
Additional Columnes:不需要返回但要在lov中显示的列。
语法:sql_expression_such_as_column_name “Title”(width)
可以包括更复杂的 SQL 片段,如级连的列名和常数。例如:
f.user_form_name “Form Title”(30),
'Uses table: ’ || t.user_table_name “Table Used”(30)
5. 值集验证类型:特殊
可将整个键弹性域作为说明性弹性域或报表参数的段值。
上图中的科目就是由一个弹性域段组成,在这里应用了特定值集的方式来定义科目所对应的值集。那么,当我们的Mouse跳到科目这个参数输入窗口时,就会弹出弹性域录入窗口,当我们把组合选好后,点确定,就可以在科目中看到这个组合值。
定义特殊验证值集
需要指定两项内容:事件和函数。事件是函数产生的时间,函数是对键弹性域用户出口的调用。
事件
编辑:当用户光标在数据录入模式下进入编辑段时,调用特殊验证例行程序。
装入:在查询后立即调用特殊验证例行程序以便填写该段。
验证:当用户光标离开段或关闭弹出式窗口,或将默认值复制至段或报表参数时,均调用特殊验证
例行程序。
插入/更新
查询
编辑/编辑
列表值
这四个事件是为了未来的扩展预定义的。
例 1: GL Account
查看报表“Posted Payment Register”是如何调用GL Account键弹性域
定义特殊验证值集:AP_GL_SRS_FLEXFIELD
Edit
FND POPID
APPL_SHORT_NAME=SQLGL
CODE="GL#"
NUM=:$FLEX$.GL_SRS_CHART_OF_ACCOUNTS_ID
REQUIRED=Y
VALIDATE=FULL
ID=:!ID
SEG=:!VALUE
DESC=:!MEANING
NAVIGATE=!DIR
DINSERT=N
Load
FND LOADID
APPL_SHORT_NAME=SQLGL
CODE="GL#"
NUM=:$FLEX$.GL_SRS_CHART_OF_ACCOUNTS_ID
REQUIRED=Y
VALIDATE=FULL
ID=:!ID
SEG=:!VALUE
DESC=:!MEANING
NAVIGATE=!DIR
DINSERT=N
Validate
FND VALID
APPL_SHORT_NAME=SQLGL
CODE="GL#"
NUM=:$FLEX$.GL_SRS_CHART_OF_ACCOUNTS_ID
REQUIRED=Y
VALIDATE=FULL
ID=:!ID
SEG=:!VALUE
DESC=:!MEANING
DINSERT=N
Event至少要有Edit和Validate
少了编辑无法进入各段的编辑模式。
少了验证会出现未定义用户出口的错。
少了导入,在提交报表时,没有任何影响!但如果应用于FORMS中,则必须有LOADID事件!
因为如果在查询模式下,系统可能并不会弹出弹性域窗口进行验证事件,则无法将值写入相应的ID。
则需要LOADID事件来将相应的Value和ID写入
详细的FND函数语法请参考:揭开FND函数的面纱
并行程序调用特殊验证值集
效果:
6. 值集验证类型:对
用两个弹性域共同指定有效值的范围。
栗子:INV_SRS_ACCOUNT_PAIR
并行程序:Material account distribution detail
Edit
FND POPIDR CODE="GL#"
APPL_SHORT_NAME="SQLGL"
NUM=:$FLEX$.INV_SRS_NUMBER
VALIDATE="NONE"
SEG=:!VALUE
NAVIGATE=!DIR
REQUIRED="N"
ALLOWNULLS="Y"
Validate FND VALIDR CODE="GL#" ... (Edit去掉NAVIGATE即可)
7. 值集验证类型:可转换独立
输入内容必须包含在预定义的允许值列表中,可以使用转换值。
栗子:AP_APPROVAL_STATUS Program: Invoice Approval Status
请求参数选择的值
转换后的实际值
8. 值集验证类型:可转换从属 (略)
对照基于某个先前值得一组值对输入进行检查,可以使用转换值。
9. FND函数
Reference: 揭开FND函数的面纱
10. 利用API创建独立值集,并插值
A. 创建值集并插入一个值
Begin --可在SQL窗口直接运行
fnd_flex_val_api.set_session_mode('customer_data'); --必须,否则会报错
--且很多参数都是根据Mode判断得出的,具体可查看FND_FLEX_VAL_API
FND_FLEX_VAL_API.create_valueset_independent(
value_set_name => 'CUX_LCY_INDEPENDENT_DEMO', --Value Set Name
description => '利用API创建独立值集', --Description
security_available => 'N',
--Sececurity Type: 'N'-No;'H'-Hierarchical; 'Y'-Non-Hierarchical
enable_longlist => 'N',
--List Type :'N'-List of Values; 'Y'-Long List of Values; 'X'-Poplist
format_type => 'C',
maximum_size => 100,
precision => NULL,
numbers_only => 'N',
uppercase_only => 'N',
right_justify_zero_fill => 'N',
min_value => NULL,
max_value => NULL);
fnd_flex_loader_apis.up_value_set_value(
p_upload_phase => 'BEGIN', --给'END'需要自己写逻辑,不清楚具体可以干嘛
p_upload_mode => null,
p_custom_mode => 'FORCE',
p_flex_value_set_name => 'CUX_LCY_INDEPENDENT_DEMO',
p_parent_flex_value_low => null,
p_flex_value => '01',
p_owner => null,
p_last_update_date => sysdate,
p_enabled_flag => 'Y',
p_summary_flag => 'N',
p_start_date_active => NULL,
p_end_date_active => NULL,
p_parent_flex_value_high => NULL,
p_rollup_flex_value_set_name => NULL,
p_rollup_hierarchy_code => NULL,
p_hierarchy_level => NULL,
p_compiled_value_attributes => 'Y' || CHR(10) || 'N',
p_value_category => null,
p_attribute1 => null,
p_attribute2 => null,
p_attribute3 => null,
p_attribute4 => null,
p_attribute5 => null,
p_attribute6 => null,
p_attribute7 => null,
p_attribute8 => null,
p_attribute9 => null,
p_attribute10 => null,
p_attribute11 => null,
p_attribute12 => null,
p_attribute13 => null,
p_attribute14 => null,
p_attribute15 => null,
p_attribute16 => null,
p_attribute17 => null,
p_attribute18 => null,
p_attribute19 => null,
p_attribute20 => null,
p_attribute21 => null,
p_attribute22 => null,
p_attribute23 => null,
p_attribute24 => null,
p_attribute25 => null,
p_attribute26 => null,
p_attribute27 => null,
p_attribute28 => null,
p_attribute29 => null,
p_attribute30 => null,
p_attribute31 => null,
p_attribute32 => null,
p_attribute33 => null,
p_attribute34 => null,
p_attribute35 => null,
p_attribute36 => null,
p_attribute37 => null,
p_attribute38 => null,
p_attribute39 => null,
p_attribute40 => null,
p_attribute41 => null,
p_attribute42 => null,
p_attribute43 => null,
p_attribute44 => null,
p_attribute45 => null,
p_attribute46 => null,
p_attribute47 => null,
p_attribute48 => null,
p_attribute49 => null,
p_attribute50 => null,
p_flex_value_meaning => '01',
p_description => '科传费项设置');
commit;
end;
创建值集和值成功
B. Cursor循环插值
建立临时表
create table test_a
(
num number not null,
value varchar2(30),
description varchar2(50)
)
运行select * from test_a for update
Excel中准备好数据,需要多一列给到如图位置的Sequence列。
粘贴数据至临时表后,点击“ ”锁住编辑权限。
运行“select * from test_a” post date to database.
运行Commit;
游标循环插入值
Declare
CURSOR user_cursor IS select value, description from test_a; --定义游标
BEGIN
FOR temp in user_cursor LOOP
fnd_flex_loader_apis.up_value_set_value(
--... ...
p_flex_value => temp.value,
--... ...
p_flex_value_meaning => temp.value,
p_description => temp.description);
END LOOP;
commit;
END;
C. 另一个插值API
declare
v_temp varchar2(100);
begin
fnd_flex_val_api.create_independent_vset_value(
p_flex_value_set_name => 'CUX_LCY_INDEPENDENT_DEMO', --Value Set Name
p_flex_value => '02', --Value
p_description => '科传费项设置02', --Description
p_enabled_flag => 'Y',
p_start_date_active => null,
p_end_date_active => null,
p_summary_flag => 'N',
p_structured_hierarchy_level => null,
p_hierarchy_level => null,
x_storage_value => v_temp);
commit;
end;
11. 利用API创建从属值集,并插值
A. 建立SET
fnd_flex_val_api.create_valueset_independent(v_set_name
,v_description
,v_security
,v_enable_longlist
,v_format_type
,v_maximum_size
,v_numbers_only
,v_uppercase_only
,v_right_justify_zero_fill
,v_min_value
,v_max_value
)
fnd_flex_val_api.create_valueset_dependent((v_set_name
,v_description
,v_security
,v_enable_longlist
,v_format_type
,v_maximum_size
,v_numbers_only
,v_uppercase_only
,v_right_justify_zero_fill
,v_min_value
,v_max_value
,v_parent_value_set
,v_default_value
,v_default_meaning
)
B. 删除SET
fnd_flex_val_api.delete_valueset(v_value_set_name)
C. 增加VALUE
fnd_flex_val_api.create_independent_vset_value(v_value_set_name
,v_value
,v_storage_value--output parameter
)
fnd_flex_val_api.create_dependent_vset_value(v_value_set_name
,v_parent_value
,v_value
,v_storage_value --output parameter
)