oracle workflow tutorial

40
Oracle 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 database trigger 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:

Upload: manipfizer

Post on 07-Nov-2014

180 views

Category:

Documents


6 download

DESCRIPTION

Oracle worflow

TRANSCRIPT

Page 1: Oracle Workflow Tutorial

Oracle 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 database trigger 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:

Page 2: Oracle Workflow Tutorial

Navigation: File >> Open

Page 3: Oracle Workflow Tutorial

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

Page 4: Oracle Workflow Tutorial

Enter the fields as below

Internal Name: ERP_DEMO

Display Name: ErpSchools Demo

Description: ErpSchools Demo

Page 5: Oracle Workflow Tutorial

Now you will see ErpSchools Demo icon in the Navigator

Page 6: Oracle Workflow Tutorial

Expand the node to see attributes, processes, notifications, functions, Events, Messages and lookup types.

Page 7: Oracle Workflow Tutorial

Double click on Process to open up the properties window as shown below

Page 8: Oracle Workflow Tutorial

Enter the fields

Internal Name: ERPSCHOOLS_PROCESS

Display Name: ErpSchools Process

Description: ErpSchools Process

Page 9: Oracle Workflow Tutorial
Page 10: Oracle Workflow Tutorial

Double click ErpSchools Process Icon

Page 11: Oracle Workflow Tutorial

2) Create Workflow Attributes:

Navigation: Window menu > Navigator

Page 12: Oracle Workflow Tutorial

Right click on Attributes and click New Attribute

Page 13: Oracle Workflow Tutorial

Enter the fields

Internal Name: ERP_ITEM_NUMBER

Display Name: Item Number

Description: Item Number

Type: Text

Default Value: Value Not Assigned

Page 14: Oracle Workflow Tutorial

Click Apply and then OK

Create one more attribute

Right click on Attributes and click New Attribute

Page 15: Oracle Workflow Tutorial

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

Page 16: Oracle Workflow Tutorial

Click Apply and then OK

3) Create Workflow Function:

Right click and then click on New Function

Page 17: Oracle Workflow Tutorial

Properties window will open as shown below

Page 18: Oracle Workflow Tutorial

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

Page 19: Oracle Workflow Tutorial

Click Apply then OK

Page 20: Oracle Workflow Tutorial

Again Right click on white space and click New Function

Page 21: Oracle Workflow Tutorial

Change the properties as below

Item Type: Standard

Internal Name: END

Page 22: Oracle Workflow Tutorial

Click Apply and then OK

Page 23: Oracle Workflow Tutorial

Right click on white space and then click New Function

Page 24: Oracle Workflow Tutorial

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

Page 25: Oracle Workflow Tutorial

Click Apply and then OK

Page 26: Oracle Workflow Tutorial

4) Create Workflow Notifications:

Right click on white space and then click New Notification

Page 27: Oracle Workflow Tutorial

Enter fields

Internal Name: ERP_SEND_ITEM_DET

Display Name: Send Item Detials

Description: Send Item Detials

Message: Sned Item Details Message

Page 29: Oracle Workflow Tutorial

Properties window will pop up as show below

Page 30: Oracle Workflow Tutorial

Enter the fields

Internal Name: ERP_SEND_ITEM_DET_MSG

Display Name: Send Item Details Message

Description: Send Item Details Message

Page 31: Oracle Workflow Tutorial

Go to Body Tab and enter as shown below

Page 32: Oracle Workflow Tutorial

Click Apply and then OK

Navigation: Window Menu > Navigator

Select Item Form Link Attribute

Page 33: Oracle Workflow Tutorial

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

Page 34: Oracle Workflow Tutorial

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′;

Page 35: Oracle Workflow Tutorial

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

Page 36: Oracle Workflow Tutorial

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);

Page 37: Oracle Workflow Tutorial

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

)

Page 38: Oracle Workflow Tutorial

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

Page 39: Oracle Workflow Tutorial

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‟);

Page 40: Oracle Workflow Tutorial

fnd_file.put_line(fnd_file.log,‟Entered Exception‟);

END GET_ITEM_DETAILS;

END ERP_DEMO;

/