我有一个有两个选择列表的表单。第一个是预先填充的SQL查询,并具有动态操作,可根据第一个列表中选择的内容设置第二个列表的值。
我用选择列表 - 文本框组合测试了它,它工作得很好。但是,当我尝试将文本框更改为选择列表时,我不得不提供一个“值列表”来覆盖我的动态操作。
如何创建选择列表而不指定其值列表?
对我的情况做了一些澄清。
我有2张桌子:Wines和Winegroups。
+---------+------------+
| Wines | Winegroups |
+---------+------------+
| WineID | GroupID |
| Name | Name |
| GroupID | |
+---------+------------+
在APEX中,我有一个这样的表格:
加载页面后,第一个选择列表将使用此查询填充值:
select distinct Name, GroupID from Winegroups
此外,还有一个像这样定义的动态动作,只要选择了一个组就会触发。这应该会改变'葡萄酒'选择列表中的值。
活动:更改
选择类型:P5_GROUPID
上的项目
操作:设置值
要提交的网页项目:P5_GROUPID
受影响的元素:P5_NAME
select distinct Wines.Name, Wines.WineID id
from Wines
left join Winegroups
on Wines.GroupID = Winegroups.GroupID
where Winegroups.Name = :P5_GROUPID
order by 1
第二个选择列表使用相同的查询。当我执行我的程序时,第一个选择列表很好地填充了组,但第二个选择列表永远不会获得任何值。
答案 0 :(得分:3)
从apex 4.1开始,不再需要使用动态操作来根据前一个选择的值填充一个选择列表。要获得所需的功能,您应该能够:
P5_NAME
)。P5_GROUPID
)。P5_GROUPID
。select distinct Wines.Name, Wines.WineID id
from Wines
left join Winegroups
on Wines.GroupID = Winegroups.GroupID
where Winegroups.Name = :P5_GROUPID
order by 1;
编辑以回答评论中的问题:
当你这样做时:
select distinct Name, GroupID
from Winegroups;
对于选择列表,它向用户显示名称,但存储groupid。如果你想使用名字,你可以这样做:
select name d, name r
from winegroups;
作为您的winegoup选择列表查询。那么P5_GROUPID中的值实际上就是名称,您可以将它加入wine选择列表查询中的winegroups.name。当然,如果要执行此操作,还应重命名P5_GROUPID。
但我可能只是保持原样。这样,您实际上不需要在第二个查询中加入。你可以做到:
select wines.name, wines.wineid
from wines where groupid = :P5_GROUP_ID.
这将是最干净的实施。