我正在尝试根据对一个或多个用户组的分配来过滤APEX报告中的数据。用户组名称在报告中用作变量,可以过滤每一行。
例如使用以下数据:
ID ----------名称---------组 0001约翰·阿德米尔 0002约翰APRC 0024鲍勃ADMR 0011鲍勃·APRC 0045约翰ADMR
分配给组ADMR的用户只能看到组== ADMR的行。 分配给组APRC的用户只能看到组== APRC的行。 既分配给ADMR组又分配给APRC的用户只能看到组== ADMR或组== APRC的行。
会有很多组/组合(不仅是ADMR和APRC),所以我需要一个通用的解决方案。
我已将其设置为根据How can I filter data in an Apex Grid to show certain things for certain user groups?分配给单个组的用户使用。但是,我一直无法弄清楚如何使其适用于多个用户组。
此where子句适用于各个组(从Page designer运行):
((','||apex_util.get_groups_user_belongs_to(:app_user)||',' like '%,ADMR,%'
and group = 'ADMR')
or
(','||apex_util.get_groups_user_belongs_to(:app_user)||',' like '%,APRC,%'
and group = 'APRC'))
但是,如果将用户分配给两个组,则仅显示ADMR数据。
我认为当用户同时分配给ADMR和APRC组时,一个非通用的解决方案可能看起来像:
(
','||apex_util.get_groups_user_belongs_to(:app_user)||',' like '%,ADMR,%'
and
','||apex_util.get_groups_user_belongs_to(:app_user)||',' like '%,APRC,%'
and
(group = 'ADMR' or group = 'APRC')
)
但是这样做时不会显示任何数据。
在我看来,一般的解决方案将在以下位置使用
:group in (','||apex_util.get_groups_user_belongs_to(:app_user)||','))
但是这样做时不会显示任何数据。
要使用,应与
相同group in ('ADMR','APRC')
没有错误消息。
答案 0 :(得分:1)
感谢@romeuBraga提供了该框架。以下工作(我必须添加修剪功能)。
where GROUP in (
SELECT trim(regexp_substr(','||apex_util.get_groups_user_belongs_to(:APP_USER)||',', '[^,]+', 1, LEVEL))
FROM dual
connect by regexp_substr(
('ADMR, APRC')
, '[^,]+', 1, level)
is not null
);