Apps How to Create Workflow

How To Create WORKFLOW from the Scratch in Oracle Application R12

Step1: Download the Standard Workflow(WFSTD) 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.

Step2: When the WFSTD is Loaded then save on your desktop as STANDARD.wft:

Step3: Right click on Standard and create a new Item Type

Step4: 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

Step5: Now save the Workflow file as XAOATEST.wft on your local desktop:

Step6: 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.

Step7: 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 the StandardFunctions:

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.

Step8: Now Verify the workflow and save in the data base or the (desktop and upload using wfload).

Step9: Once the workflow is saved in the data base which usually takes time we can test it using below queries:

(I): Below query is to check WF status before running workflow

SELECT *

FROM wf_item_types

WHERE name = 'XAOATEST';

SELECT *

 FROM WF_PROCESS_ACTIVITIES

 WHERE process_item_type = 'XAOATEST'; 

(II): Below script to create package to fire the workflow

Below script is use to create package specification

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;  

/

Below Script is use to create package body

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;

/

(III): Below query is use to execute the package to launch 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 End from workflow Admin Resp

EXCEPTION

   WHEN OTHERS

   THEN

      vErrorCode := SQLCODE;

      vErrorMsg  := SQLERRM(SQLCODE);

      RAISE_APPLICATION_ERROR(20001, vErrorMsg);

END;

/

(IV): Below query is use to fetch the result data after running the workflow

  SELECT *

   FROM wf_items

  WHERE item_type = 'XAOATEST';

  SELECT *

   FROM wf_item_activities_history_v

  WHERE item_type = 'XAOATEST';