Oracle-Apex 分拣穿梭车

Oracle-Apex sorting shuttle

我创建了 "many to many relationship using a shuttle" 当我从 LOV select ROLE_NAME 时,我想在右侧查看 selected 角色的特权,在左侧查看哪个角色没有的特权。

相反,我在右侧看到哪个角色没有的特权,在左侧看到这个角色的特权。

有多种问题导致了此行为。

  • 您看到的项目在错误的一边,因为您切换了值列表 "SQL Query" 和 "Source"。 SQL 查询应 return 所有可能的值。 "Source" 是选定的值。
  • 航天飞机上有层叠的LOV。这不是层叠的爱所做的。级联 lov 控制可供选择的可用值(例如,如果 lov 1 是 REGIONS,lov 2 是国家,那么您的级联 lov 会将 lov 2 限制为 lov 1 中该地区的国家 - 这不是您的值列表中的情况.你想改变所选角色的selected values.所以你需要在lov上动态操作来刷新穿梭值而不是级联lov.
  • 存在提交页面的现有动态操作。这不是必需的。相反,您可以使用带有动作 "Set Value" 的动态动作将穿梭值设置为所选角色的值。
  • 您的数据库操作仅执行插入操作。这意味着如果您再次单击 "Save" 以获得已具有权限的角色,您将创建重复的值。

我已经修复了您工作区中名为“shuttle-test - KOEN”的应用程序中的所有问题(除了最后一个问题,页面处理)

还有一件事:页面项在 apex 中的命名约定是 P#page_number#_ITEMNAME。我强烈建议你坚持下去。

Rgds 科恩

您正在选择未分配给 LOV 项目(角色)的权限。所以它在右侧显示了未分配的角色。

如果您从查询中删除 NOT,那么它将在右侧显示分配的角色,在左侧显示要分配的角色

SELECT priv_id
FROM privileges s1
WHERE NOT EXISTS (SELECT 1
                  FROM roles s2
                  WHERE s2.fk_priv_id = s1.priv_id
                  AND s2.fk_role_id = :P_4_LOV
                  );

应该是

SELECT priv_id
    FROM privileges s1
    WHERE EXISTS (SELECT 1
                      FROM roles s2
                      WHERE s2.fk_priv_id = s1.priv_id
                      AND s2.fk_role_id = :P_4_LOV
                      );