0

我的问题是根据用户在 LOV 中的选择显示或隐藏切换页面项目。我的目标是仅在用户从 LOV 中选择相关项目时才显示此 Switch。例如,如果用户做了两个选择“狗”和“猫”,那么我希望出现“是/否”开关。如果他们选择“大象”,那么我不想要它。

我创建了一个动态操作,客户端条件为 LOV 项目上的“项目在列表中”和“23,24”列表。只要我只从 LOV 中选择一个条目,一切正常。一旦我选择了一个额外的条目,Switch 就会消失(因为 Hide 的 False 动作开始了)。

我怀疑这不起作用,因为多选 LOV。它可能会在幕后建立一个比较,例如“双值 IN (23,24)”。我可以使用“JavaScript 表达式”选项而不是“项目在列表中”来完成这项工作吗?如果是这样,一个例子将不胜感激!

基本上,我想编写代码,“在用户所做的所有选择中,如果项目 23 和/或 24 是其中的一部分,则显示开关”。

4

2 回答 2

0

这样的代码怎么样?这将是一个返回布尔条件类型的函数。见内评论。

declare
  l_max number(1);
begin
  with lovs as
    -- split multi-selected values into rows
    (select regexp_substr(:P1_LOV_ITEM', '[^:]+', 1, level) val
     from dual
     connect by level <= regexp_count(:P1_LOV_ITEM, ':') + 1
    )
  -- check whether any of extracted LOV values exists in list you're interested in (23, 24)
  select max(1)
    into l_max
    from lovs l
    where l.val in (23, 24);

  -- if some of values exists, return TRUE and - thus - display the Switch item
  return l_max = 1;
end;
于 2020-09-29T05:21:19.997 回答
0

答案是在 LOV 上使用动态操作 a Change 事件,客户端条件类型为“javascript 表达式”,如下所示:

(P40_LOV.value).search("23") >= 0 || (P40_LOV.value).search("24") >= 0;

对于“真”结果,我使用了内置的“显示”动作,而对于“假”结果,我使用了内置的“隐藏”动作。

于 2020-09-30T17:36:37.840 回答