Pages

OracleEBSpro is purely for knowledge sharing and learning purpose, with the main focus on Oracle E-Business Suite Product and other related Oracle Technologies.

I'm NOT responsible for any damages in whatever form caused by the usage of the content of this blog.

I share my Oracle knowledge through this blog. All my posts in this blog are based on my experience, reading oracle websites, books, forums and other blogs. I invite people to read and suggest ways to improve this blog.


Friday, April 12, 2013

Workflow tutorial


Overview
This article will illustrate how to create or define workflow attributes, notifications, messages, roles or users, functions, processes and last but not the least, how to launch a workflow from PL/SQL. The workflow concepts are better explained using an example.
Business Requirement:
When an item is created in inventory, workflow needs to be launched and it should collect the details of the item created and sends a notification to group of users along with the details and link to master item form.

Process flow: When an item is created it will create/insert a record in MTL_SYSTEM_ITEMS_B so create a databasetrigger on the table and launch workflow from that trigger. All you need to do is create the workflow, create the trigger, pl/sql package, roles and finally create an item in inventory.
  • Open WFSTD and save as new workflow
  • Create Attributes
  • Create Functions
  • Create Notification
  • Create Messages
  • Create Roles
  • Create database trigger
  • Create PL/SQL Package
1)Open WFSTD and save as new workflow:
alt
Navigation: File >> Open
alt
Click Browse then navigate to Workflow installation directory
Navigation: Workflow Installation Directory\ WF\DATA\US\WFSTD
Now Click File >Save as, Enter “ErpSchools Demo” and click OK
Right click on WFSTD and select New Item type
alt
Enter the fields as below
Internal Name: ERP_DEMO
Display Name: ErpSchools Demo
Description: ErpSchools Demo
alt
Now you will see ErpSchools Demo icon in the Navigator
alt
Expand the node to see attributes, processes, notifications, functions, Events, Messages and lookup types.
alt
Double click on Process to open up the properties window as shown below
alt
Enter the fields
Internal Name: ERPSCHOOLS_PROCESS
Display Name: ErpSchools Process
Description: ErpSchools Process
alt
alt
Double click ErpSchools Process Icon
alt
2) Create Workflow Attributes:
Navigation:Window menu > Navigator
alt
Right click on Attributes and click New Attribute
alt
Enter the fields
Internal Name: ERP_ITEM_NUMBER
Display Name: Item Number
Description: Item Number
Type: Text

Default Value: Value Not Assigned
alt
Click Apply and then OK
Create one more attribute 
Right click on Attributes and click New Attribute
alt
Enter the attribute fields
Internal Name: ERP_SEND_ITEM_FORM_LINK
Display Name: Send Item Form Link
Description: Send Item Form Link
Type: Form
Value: INVIDITM
alt
Click Apply and then OK
3) Create Workflow Function:
Right click and then click on New Function
alt
Properties window will open as shown below
alt
Change/Enter the fields as below
Change Item Type to Standard from ErpSchools Demo
Select Internal Name as Start
Remaining fields will be populated automatically
alt
Click Apply then OK
alt
Again Right click on white space and click New Function 
alt
Change the properties as below
Item Type: Standard
Internal Name: END
alt
Click Apply and then OK
alt
Right click on white space and then click New Function
alt
Enter the fields
Internal Name: ERP_GET_DETAILS
Display Name: Get New Inventory Item Details
Description: Get New Inventory Item Details
Function Name: erpschools_demo_pkg.get_item_details
alt
Click Apply and then OK
alt
4) Create Workflow Notifications:
Right click on white space and then click New Notification
alt
Enter fields
Internal Name: ERP_SEND_ITEM_DET
Display  Name: Send Item Detials
Description: Send Item Detials
Message: Sned Item Details Message
alt
Click Apply and then OK
5) Create Workflow Messages:

Right click on Message and click New 
alt
Properties window will pop up as show below
alt
Enter the fields
Internal Name: ERP_SEND_ITEM_DET_MSG
Display Name: Send Item Details Message
Description: Send Item Details Message
alt
Go to Body Tab and enter as shown below
alt
Click Apply and then OK
Navigation: Window Menu > Navigator
Select Item Form Link Attribute
alt
Drag and drop both attributes to “Send Item Details Message” 
6)
Create Roles: 

Adhoc roles can be created through PL/SQL from database or they can be created from Applications using User Management Responsibility. If you use PL/SQL to create roles make sure you give all user names and role names in UPPER case to avoid some problems
 Script to Create a Adhoc Role
 Script to Add user to existing Adhoc Role
 Script to Remove user from existing Adhoc Role
 Using Adhoc roles in workflow notifications
 Adhoc Roles Tables 
Script to Create a Adhoc Role
DECLARE 
lv_role varchar2(100) := ‘ERPSCHOOLS_DEMO_ROLE’; 
lv_role_desc varchar2(100) := ‘ ERPSCHOOLS_DEMO_ROLE’; 
BEGIN 
wf_directory.CreateAdHocRole(lv_role, 
lv_role_desc, 
NULL, 
NULL, 
‘Role Demo for erpschool users’, 
‘MAILHTML’, 
‘NAME1 NAME2′, –USER NAME SHOULD BE IN CAPS 
NULL, 
NULL, 
‘ACTIVE’, 
NULL); 
dbms_output.put_line(‘Created Role’ ||’ ‘||lv_role); 
End; 
/
Script to Add user to already existing Adhoc Role
DECLARE 
v_role_name varchar2(100); 
v_user_name varchar2(100); 
BEGIN 
v_role_name := ‘ERPSCHOOLS_DEMO_ROLE’; 
v_user_name := ‘NAME3′; 
WF_DIRECTORY.AddUsersToAdHocRole(v_role_name, v_user_name); 
–USER NAMES SHOULD BE in CAPS
END; 
Script to Remove user from existing Adhoc Role
DECLARE 
v_role_name varchar2(100); 
v_user_name varchar2(100); 
BEGIN 
v_role_name := ‘ERPSCHOOLS_DEMO_ROLE’; 
v_user_name := ‘NAME3′; 
WF_DIRECTORY.RemoveUsersFromAdHocRole(v_role_name, v_user_name); –USER NAMES in CAPS
END; 
Using Adhoc roles in workflow notifications:
Navigation: File > Load Roles from Database
Select roles you want to use and then click OK. 
Open the notification properties and then navigate to node tab, select performer as the role you just created and loaded from database.
Tables:
 WF_ROLES
 WF_USER_ROLES
 WF_LOCAL_ROLES
 WF_USER_ROLE_ASSIGNMENTS
7) Launching workflow from PL/SQL:
First create a database trigger as below to call a PL/SQL procedure from which you kick off the workflow.
  •  Create Database Trigger
CREATE OR REPLACE TRIGGER “ERP_SCHOOLS_DEMO_TRIGGER” AFTER INSERT ON INV.MTL_SYSTEM_ITEMS_B REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW 
DECLARE 
lv_id                 NUMBER          := :NEW.inventory_item_id; 
lv_item_segment1      VARCHAR2(100)   := :NEW.segment1; 
lv_itemtype           VARCHAR2(80)    := :NEW.item_type; 
lv_user_id            NUMBER          := -1; 
lv_itemkey            VARCHAR2(10); 
lv_orgid              NUMBER          :=2; 
error_msg             VARCHAR2(2000); 
error_code            NUMBER; 
BEGIN 
lv_user_id := fnd_global.user_id; 
lv_orgid := fnd_global.org_id; 
lv_itemkey := 1132; – This should be unique value
ERP_DEMO.LAUNCH_WORKFLOW(‘ERP_DEMO’ 
,lv_itemkey 
,’ERPSCHOOLS_PROCESS’ –process name 
,lv_id 
,lv_orgid
,lv_item_segment1 
); 
EXCEPTION 
WHEN OTHERS THEN 
error_code := SQLCODE; 
error_msg  := SQLERRM(SQLCODE); 
RAISE_APPLICATION_ERROR(-20150,error_msg); 
END; 

  • Create PL/SQL Package to kickoff workflow
CREATE OR REPLACE PACKAGE APPS.ERP_DEMO IS 
PROCEDURE LAUNCH_WORKFLOW

itemtype        IN VARCHAR2, 
itemkey         IN VARCHAR2, 
process         IN VARCHAR2, 
item_id         IN NUMBER, 
org_id          IN NUMBER, 
item_segment1   IN VARCHAR2 
); 
END ERP_DEMO; 

CREATE OR REPLACE PACKAGE BODY APPS.ERP_DEMO IS 
PROCEDURE LAUNCH_WORKFLOW( 
itemtype         IN VARCHAR2, 
itemkey          IN VARCHAR2, 
process          IN VARCHAR2, 
item_id          IN NUMBER, 
org_id           IN NUMBER, 
item_segment1    IN VARCHAR2 

IS 
v_master_form_link varchar2(5000); 
v_item_number varchar2(100); 
error_code varchar2(100); 
error_msg varchar2(5000); 
BEGIN 
v_add_item_id := ‘ ITEM_ID=”‘ || item_id || ‘”‘; 
v_item_number := item_segment1; 
v_master_form_link := v_master_form_link || v_add_item_id; 
WF_ENGINE.Threshold := -1; 
WF_ENGINE.CREATEPROCESS(itemtype, itemkey, process); 
– Get the value of attribute assigned in workflow
v_master_form_link := wf_engine.getitemattrtext(
itemtype => itemtype
,itemkey  => itemkey
,aname    => ‘ERP_SEND_ITEM_FORM_LINK’); 
- assign values to variables so that you can usethe attributes
v_master_form_link varchar2(5000) := v_master_form_link||’:#RESP_KEY=”INVENTORY” #APP_SHORT_NAME=”INV” ORG_MODE=”Y” ‘; 
v_master_form_link := v_master_form_link || v_add_item_id; 
–set the attribute values in workflow so that you can use them in notifications
WF_ENGINE.SetItemAttrText(itemtype, itemkey, ‘MASTERFORM’, v_master_form_link); 
WF_ENGINE.SetItemAttrText(itemtype, itemkey, ‘ERP_ITEM_NUMBER’, item_segment1); 
– start the workflow process
WF_ENGINE.STARTPROCESS(itemtype, itemkey); 
EXCEPTION WHEN OTHERS THEN 
error_code := SQLCODE; 
error_msg  := SQLERRM(SQLCODE); 
– add dbms or fnd_output messages as required
END LAUNCH_WORKFLOW; 
– This procedure will just put the item number into workflow attribute ERP_ITEM_NUMBER
PROCEDURE GET_ITEM_DETAILS( 
itemtype        IN VARCHAR2, 
itemkey         IN VARCHAR2, 
actid           IN NUMBER, 
funcmode        IN VARCHAR2, 
resultout       OUT NOCOPY VARCHAR2 

IS 
v_GET_ITEM_NUMBER VARCHAR2(1000); 
BEGIN 
SELECT SEGMENT1 INTO V_GET_ITEM_NUMBER FROM MTL_SYSTEM_ITEMS_B WHERE ROWNUM =1; 
WF_ENGINE.SetItemAttrText(itemtype, itemkey, ‘ERP_ITEM_NUMBER’,v_GET_ITEM_NUMBER ); 
– you can use the get function as below.
–v_GET_ITEM_NUMBER := wf_engine.getitemattrtext(
–                                        itemtype => itemtype
–                                        ,itemkey  => itemkey
–                                        ,aname    => ‘X_ATTRIBUTE’);
resultout:=’COMPLETE:’||’Y'; 
exception when others then 
dbms_output.put_line(‘Entered Exception’); 
fnd_file.put_line(fnd_file.log,’Entered Exception’); 
END GET_ITEM_DETAILS;
END ERP_DEMO; 
/
Credit goes to the below website(s) :

2 comments:


  1. Regards
    Sridevi Koduru (Senior Oracle Apps Trainer Oracleappstechnical.com)
    Please Contact for One to One Online Training on Oracle Apps Technical, Financials, SCM, SQL, PL/SQL, D2K at sridevikoduru@oracleappstechnical.com | +91 - 9581017828.

    ReplyDelete