Отображение записи сотрудника или записи менеджера вместе с его сотрудниками в отчете oracle apex - PullRequest
0 голосов
/ 28 мая 2020

Я создал отчет с формой в Oracle Apex, где:

  • если обычный сотрудник входит в систему в приложении расписания, то отчет должен отображать только запись сотрудника, но
  • если менеджер входит в систему, то в отчете должна отображаться запись руководителя вместе со всеми сотрудниками, работающими под ним.

Как этого добиться? может ли кто-нибудь направить меня?

image

1 Ответ

0 голосов
/ 28 мая 2020

Как отличить guish «нормальных сотрудников» от «менеджеров»? Там должна быть какая-то таблица, в которой это сказано. Поскольку код, который вы разместили в качестве комментариев (действительно, зачем вы это сделали? Не могли бы вы отредактировать вопрос и опубликовать правильно отформатированный код вместо этого нечитаемого беспорядка?), Предполагается, что уникальный идентификатор - это чей-то адрес электронной почты, который также используется как имя пользователя при входе в Apex эта таблица будет иметь пары [электронная почта + роль], например,

SQL> desc apex_roles
 Name                                      Null?    Type
 ----------------------------------------- -------- ------------------------
 E_MAIL                                             VARCHAR2(15)
 ROLE                                               CHAR(1)

SQL> select * from apex_roles;

E_MAIL          R
--------------- -
lf@gmail.com    M          --> M = manager
kamal@yahoo.com E

SQL>

. Теперь создайте функцию, которая сообщает, является ли кто-то менеджером. Пусть он вернет 1, если это так, 0, если это не так (почему не Boolean? Вы не можете использовать его в select операторах).

SQL> create or replace function f_is_manager(par_app_user in varchar2)
  2    return number
  3  is
  4    retval number := 0;
  5  begin
  6    select 1
  7      into retval
  8      from apex_roles
  9      where e_mail = par_app_user
 10        and role = 'M';
 11
 12    return retval;
 13  exception
 14    when no_data_found then
 15      -- user isn't a manager
 16      return retval;
 17  end;
 18  /

Function created.

SQL>

Теперь используйте эту функцию в where пункт в отчете; предположим, что это таблица, содержащая данные, которые вы хотите отобразить:

SQL> select * from my_data;

E_MAIL               JOB              SAL
-------------------- --------- ----------
CLARK@gmail.com      MANAGER         2450
KING@gmail.com       PRESIDENT       5000
MILLER@gmail.com     CLERK           1300
lf@gmail.com         MANAGER         2200        --> manager in APEX_ROLES table
kamal@yahoo.com      CLERK           1500

Что происходит, когда kamal запускает отчет? Этот пользователь видит только свои собственные данные:

SQL> select job, sal
  2  from my_data
  3  where e_mail = case when f_is_manager('&&APP_USER') = 1 then e_mail
  4                      else '&&APP_USER'
  5                 end;
Enter value for app_user: kamal@yahoo.com

JOB              SAL
--------- ----------
CLERK           1500

Но если менеджер запускает его, он видит данные всех:

SQL> select job, sal
  2  from my_data
  3  where e_mail = case when f_is_manager('&&APP_USER') = 1 then e_mail
  4                      else '&&APP_USER'
  5                 end;
Enter value for app_user: lf@gmail.com

JOB              SAL
--------- ----------
MANAGER         2450
PRESIDENT       5000
CLERK           1300
MANAGER         2200
CLERK           1500

SQL>

Поскольку это Apex, вы бы на самом деле используйте

select job, sal
from my_data
where e_mail = case when f_is_manager(:APP_USER) = 1 then e_mail
                    else ':APP_USER'
               end;
...