Previous Next       Contents Index Glossary
         Previous  Next          Contents  Index  Glossary

Example: Select Approver

The Select Approver function activity calls a PL/SQL stored procedure named WF_REQDEMO.SelectApprover that determines who the next approver is based on the employee approval hierarchy in the demonstration data model.

Result Type
This activity expects a response of 'T' if an approver is found or 'F' if an approver is not found. The possible responses are defined in a lookup type called Boolean, associated with the Standard item type.

PL/SQL Stored Procedure
The PL/SQL stored procedure that this function activity calls is described in detail below. Each section in the procedure is numbered with the notation 1-> for easy referencing.

      procedure SelectApprover (itemtype in varchar2,
itemkey in varchar2,
actid in number,
funcmode in varchar2,
resultout out varchar2) is
1->   l_forward_from_username varchar2(30);
l_forward_to_username varchar2(30);
2->   begin
if (funcmode = 'RUN') then
l_forward_to_username := wf_engine.GetItemAttrText (
itemtype => itemtype,
itemkey => itemkey,
aname => 'FORWARD_TO_USERNAME');
3->       if (l_forward_to_username is null) then
l_forward_to_username := wf_engine.GetItemAttrText (
itemtype => itemtype,
itemkey => itemkey,
aname => 'REQUESTOR_USERNAME');
end if;
4->       l_forward_from_username := l_forward_to_username;
5->       wf_engine.SetItemAttrText (itemtype => itemtype;
itemkey => itemkey,
aname => 'FORWARD_FROM_USERNAME';
avalue => l_forward_from_username);
6->       l_forward_to_username := wf_reqdemo.GetManager( 
l_forward_from_username);
7->       wf_engine.SetItemAttrText (itemtype => itemtype;
itemkey => itemkey,
aname => 'FORWARD_TO_USERNAME';
avalue => l_forward_to_username);
8->       if (l_forward_to_username is null) then
resultout :='COMPLETE:F';
else
resultout :='COMPLETE:T';
end if;
9->   end if;
10->  if (funcmode = 'CANCEL') then
resultout :='COMPLETE';
return;
end if;
11->  if (funcmode = 'TIMEOUT') then
resultout :='COMPLETE';
return;
end if;
12->  exception
when others then
wf_core.context('WF_REQDEMO','SelectorApprover',itemtype,
itemkey,actid,funcmode);
raise;
13->  end SelectApprover;

1-> The local arguments l_forward_from_username, and l_forward_to_username are declared in this section.

2-> If the value of funcmode is RUN, then retrieve the name of the last person that this requisition was forwarded to for approval by assigning l_forward_to_username to the value of the FORWARD_TO_USERNAME item type attribute, determined by calling the Workflow Engine API GetItemAttrText. See: GetItemAttribute.

3-> If the value of l_forward_to_username is null, then it means that the requisition has never been forwarded for approval. In this case, assign it the value of the REQUESTOR_USERNAME item type attribute, determined by calling the Workflow Engine API GetItemAttrText.

4-> Assign l_forward_from_username to the value of l_forward_to_username.

5-> This section assigns the value of l_forward_from_username to the FORWARD_FROM_USERNAME item type attribute by calling the Workflow Engine SetItemAttrText API.

6-> This section calls the function GetManager to return the manager of the previous approver stored in l_forward_from_username, from the WF_REQDEMO_EMP_HIERARCHY table and assigns that manager's name to l_forward_to_username.

7-> This section assigns the value of l_forward_to_username to the FORWARD_TO_USERNAME item type attribute by calling the Workflow Engine SetItemAttrText API.

8-> If l_forward_to_username is null, meaning there is no manager above the previous approver in the hierarchy, then assign resultout to be COMPLETE:F. Otherwise, assign resultout to be COMPLETE:T.

9-> This ends the check on funcmode =' RUN'.

10-> If the value of funcmode is CANCEL, then assign resultout to be COMPLETE.

11-> If the value of funcmode is TIMEOUT, then assign resultout to be COMPLETE.

12-> This section calls WF_CORE.CONTEXT if an exception occurs.

13-> The SelectApprover procedure ends.


         Previous  Next          Contents  Index  Glossary