在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 ...
通过这种方法是否能实现多级联动?