在FORM开发中,经常会使用到下拉列表,Item的List子类,一般情况下直接把下拉列表的值写死在属性中,最近遇到一个需求,下拉列表的值需要在值集中获取,所以需要实现动态填充下拉列表的值。
1.将目标ITEM的子类信息设置为List,不需要添加列表中元素,不需要初始值。
2.新建一个Procedure,代码如下:
1
procedure
basis_list(event
in
varchar2
)
is
2 -- 游标中定义List中显示的值和数据库值
3 cursor c_list is
4 select lookup_code
5 ,meaning
6 from fnd_lookup_values_vl
7 where lookup_type = ' HSS_QT_BASIS ' ;
8 i number : = 0 ;
9 l_value varchar2 ( 10 );
10 l_meaning varchar2 ( 20 );
11 begin
12 if event = ' INIT ' then
13 -- 赋值前,清空List中现有的值
14 clear_list( ' QT_NAME.BASIS ' );
15
16 for r_list in c_list
17 loop
18 l_value : = r_list.lookup_code;
19 l_meaning : = r_list.meaning;
20 i : = i + 1 ;
21 -- add_list_element有4个参数依次为,Item名称,列表中值的序列,显示的值,数据库值
22 add_list_element( ' QT_NAME.BASIS ' ,i,l_meaning,l_value);
23 end loop;
24
25 end if ;
26 end basis_list;
2 -- 游标中定义List中显示的值和数据库值
3 cursor c_list is
4 select lookup_code
5 ,meaning
6 from fnd_lookup_values_vl
7 where lookup_type = ' HSS_QT_BASIS ' ;
8 i number : = 0 ;
9 l_value varchar2 ( 10 );
10 l_meaning varchar2 ( 20 );
11 begin
12 if event = ' INIT ' then
13 -- 赋值前,清空List中现有的值
14 clear_list( ' QT_NAME.BASIS ' );
15
16 for r_list in c_list
17 loop
18 l_value : = r_list.lookup_code;
19 l_meaning : = r_list.meaning;
20 i : = i + 1 ;
21 -- add_list_element有4个参数依次为,Item名称,列表中值的序列,显示的值,数据库值
22 add_list_element( ' QT_NAME.BASIS ' ,i,l_meaning,l_value);
23 end loop;
24
25 end if ;
26 end basis_list;
List中的值定义在Lookup Code中,通过游标获取然后动态填充到List中
在适当的触发器中进行初始化,在WHEN-NEW-FORM-INSTANCE中做的初始化
1
...
2
3 QT_NAME.basis_list( ' INIT ' );
4
5 ...
2
3 QT_NAME.basis_list( ' INIT ' );
4
5 ...
通过这种方法是否能实现多级联动?