Download the Standard Workflow for creating a new workflow item type:
To download the workflow file we can download using wfload or from Oracle Workflow Builder.
Navigation: File –> Open –> Database –> Please give Apps user credentials. It usually takes time to load all the workflows.
Select Standard from the list of workflows and press OK button.
When the WFSTD is Loaded then save on your desktop as STANDARD.wft:
Right click on Standard and create a new Item Type
The Item Type Internal name can have at the max of 8 Characters:
There are 3 types of Persistence’s as Temporary, Permanent and Synchronization.
The access levels are important to modify the workflow and can be set at workflow builder help.
Click OK
Now save the Workflow file as XAOATEST.wft on your local desktop:
Once a new Item Type is created then a new process needs to be created where the logic needs to go in:
We need to create a new Runnable Process so that we can call it from PLSQL/Form/OAF/Java.
Under a Process there can be any number of sub process depending upon the complexity of the workflow logic that needs to be implemented.
Once the Process is created then we need to design the Process:
To Design any Process in Workflow it should start with One start Function and we get it from WFSTD. Just we need to drag and drop the start and end functions from theStandard Functions:
Even when we import the Start function go to its properties and we need to mention it should be a start:
Note: Any Process can have only one Start but can have any number of ends depending upon the Business logic’s complexity.
Similarly change the properties of the end function:
Click on OK button.
Now we need to create a Custom Function that has the business logic. You can have the Function call your plsql function or Java Class or any external application. We can mention the PLSQL Function Name in the Function Name field in the properties of the Function.
We can mention the result type if any Result is returned from the plsql Function:
Click OK
Once the function is created just drag and drop the function between START and END Functions. Once the Function is placed just by using right click of the mouse draw the Flow how the process to be. Always The Process would be starting from Start and No Functions can be in the Process without coupling to another in the flow. Always the flow should end using and END function.
Now Verify the workflow and save in the data base or the (desktop and upload using wfload).
Once the workflow is saved in the data base which usually takes time we can test it using below queries :
Select * from wf_item_types where name=’XOATEST’
Select * from wf_process_activities where process_item_type=’XOATEST’
The data in WF_PROCESS_ACTIVITIES table explains the complete details of the workflow item type. Like how many Process, Functions, etc. with its versions. PL/SQL code for this workflow: PLSQL Package used in XAOATEST Workflow:
/* Formatted on 2021/02/03 11:32 (Formatter Plus v4.8.8) */
CREATE OR REPLACE PACKAGE xxaoa_test_wf_pkg
AS
PROCEDURE insert_proc (
itemtype IN VARCHAR2,
itemkey IN VARCHAR2,
actid IN NUMBER,
funcmode IN VARCHAR2,
resultout IN OUT NOCOPY VARCHAR2
);
PROCEDURE launch_workflow (
itemtype IN VARCHAR2,
itemkey IN VARCHAR2,
process IN VARCHAR2
);
END xxaoa_test_wf_pkg;
/
/* Formatted on 2021/02/03 11:33 (Formatter Plus v4.8.8) */
CREATE OR REPLACE PACKAGE BODY xxaoa_test_wf_pkg
AS
PROCEDURE insert_proc (
itemtype IN VARCHAR2,
itemkey IN VARCHAR2,
actid IN NUMBER,
funcmode IN VARCHAR2,
resultout IN OUT NOCOPY VARCHAR2
)
AS
BEGIN
INSERT INTO xxaoa_test_wf
VALUES (itemtype, itemkey, actid, funcmode, resultout);
resultout := ‘Success’;
EXCEPTION
WHEN OTHERS
THEN
resultout := ‘Error’;
END insert_proc;
PROCEDURE launch_workflow (
itemtype IN VARCHAR2,
itemkey IN VARCHAR2,
process IN VARCHAR2
)
AS
BEGIN
wf_engine.threshold := -1;
wf_engine.createprocess (itemtype, itemkey, process);
wf_engine.startprocess (itemtype, itemkey);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (‘Error at LAUNCH_WORKFLOW: ‘ || SQLERRM);
END launch_workflow;
END xxaoa_test_wf_pkg;
Sample Script to Kickoff or Trigger the workflow:
DECLARE
lvitemtype VARCHAR2 (80) := ‘XAOATEST’;
lvuserid NUMBER := -1;
lvitemkey VARCHAR2 (10);
verrormsg VARCHAR2 (2000);
verrorcode NUMBER;
BEGIN
lvitemkey := ‘XAOA-01’; — This should be unique value
xxaoa_test_wf_pkg.launch_workflow (itemtype => lvitemtype,
itemkey => lvitemkey,
process => ‘AOAMAIN_PROCESS’
);
— Main Runnable process name );
COMMIT; — Use commit if we need to see the WF Status from Front
EXCEPTION
WHEN OTHERS
THEN
verrorcode := SQLCODE;
verrormsg := SQLERRM (SQLCODE);
raise_application_error (20001, verrormsg);
END;
Select * from wf_items where item_type=’XOATEST’
SELECT * FROM wf_item_activities_history_v WHERE item_type = ‘XAOATEST’;