Я создал 3 триггера на основе уровней утверждения. Таблицы-> p_it_people, p_it_issues, p_it_Departments Имеется 2 утверждающих для 1 отдела -> p_it_people.approver = 'Approver 1' и p_it_people.approval_level = 'Approver 2' Также p_it_departments. authentication_status = 2 (для 2 утверждающих)
1-й триггер отправляет электронное письмо p_it_people.approver = 'Approver 1', чтобы утвердить проблему, установив p_it_issues.approve_This = Y1 '' Затем утверждающий 1 входит в приложение и устанавливает Approve_this = 'Y1'
2-й триггер срабатывает, когда Approve_this = 'Y1' (предварительное условие), установите p_it_issues.approved = 1 и отправьте письмо на p_it_people.approver = 'Approver 2' Теперь, когда утверждающий 2 регистрируется в и устанавливает Approve_this = 'Y2' - Это должно запустить 3-й триггер. Однако он не выдает исключение для данных на странице приложения. Нет утверждающего 3, но я также не хочу, чтобы триггер вообще выполнялся, если он не находит утверждающего 3 и ***, просто обновите p_it_issues.approved = 2.
PS Подход очень статичен c, и я ищу динамическое решение c, но сейчас это необходимо сделать с жесткими уровнями одобрения кодирования.
Code for Trigger 3:
CREATE OR REPLACE EDITIONABLE TRIGGER "P_IT_ISSUES_AIU_Notify_Approver_3"
BEFORE
update on P_IT_ISSUES
for each row
WHEN (new.APPROVE_THIS ='Y2') declare
v_person_id number;
v_email varchar2(255);
v_dept_name varchar2(50);
begin
:new.APPROVED :=2 ;
select p.person_id ,p.person_email,i.dept_name into v_person_id,v_email,v_Dept_name from p_it_people p,p_it_departments i
where p.assigned_dept=i.dept_id and i.dept_id=:new.related_dept_id and p.approver='Approver 3' and i.approval_level!=:new.approved ;
APEX_MAIL.SEND(
p_to => v_email,
p_from => v_email,
p_body =>
'You have been assigned a new issue for third level approval. ' ||chr(10)||
'The details are below. ' ||chr(10)||
chr(10)||
' Department:'|| v_dept_name ||chr(10)||
' Summary: '||:new.issue_summary ||chr(10)||
' Status: '||:new.status ||chr(10)||
'Priority: '||nvl(:new.priority,'-'),
p_subj => 'New Issue for Third Level Approval');
end;
In case required, codes for Trigger 1 and 2 are also below:
Trigger 1:
CREATE OR REPLACE EDITIONABLE TRIGGER "P_IT_ISSUES_AIU_Notify_Approver_1"
AFTER
insert on P_IT_ISSUES
for each row
FOLLOWS P_IT_ISSUES_AIU_EMAIL
declare
v_person_id number;
v_email varchar2(255);
v_dept_name varchar2(50);
begin
select p.person_id ,p.person_email,i.dept_name into v_person_id,v_email,v_Dept_name from p_it_people p,p_it_departments i
where p.assigned_dept=i.dept_id and i.dept_id=:new.related_dept_id and p.approver='Approver 1' and i.approval_level!=:new.approved ;
APEX_MAIL.SEND(
p_to => v_email,
p_from => v_email,
p_body =>
'You have been assigned a new issue for first level approval. ' ||chr(10)||
'The details are below. ' ||chr(10)||
chr(10)||
' Department:'|| v_dept_name ||chr(10)||
' Summary: '||:new.issue_summary ||chr(10)||
' Status: '||:new.status ||chr(10)||
'Priority: '||nvl(:new.priority,'-'),
p_subj => 'New Issue for First Level Approval');
end;
Trigger 2:
CREATE OR REPLACE EDITIONABLE TRIGGER "P_IT_ISSUES_AIU_Notify_Approver_2"
BEFORE
update on P_IT_ISSUES
for each row
WHEN (new.APPROVE_THIS ='Y1' ) declare
v_person_id number;
v_email varchar2(255);
v_dept_name varchar2(50);
begin
:new.APPROVED :=1 ;
select p.person_id ,p.person_email,i.dept_name into v_person_id,v_email,v_Dept_name from p_it_people p,p_it_departments i
where p.assigned_dept=i.dept_id and i.dept_id=:new.related_dept_id and p.approver='Approver 2' and i.approval_level!=:new.approved;
APEX_MAIL.SEND(
p_to => v_email,
p_from => v_email,
p_body =>
'You have been assigned a new issue for second level approval. ' ||chr(10)||
'The details are below. ' ||chr(10)||
chr(10)||
' Department:'|| v_dept_name ||chr(10)||
' Summary: '||:new.issue_summary ||chr(10)||
' Status: '||:new.status ||chr(10)||
'Priority: '||nvl(:new.priority,'-'),
p_subj => 'New Issue for Second Level Approval');
end;