Thursday, 19 September 2019

How To Remove Error Notifications From The Worklist (Doc ID 357904.1)


Oracle Workflow - Version 11.5.10.2 to 12.2 [Release 11.5.10 to 12.2]
Oracle Order Management - Version 12.2.4 to 12.2.4 [Release 12.2]
Information in this document applies to any platform.
GOAL
Failure in a certain workflows, many error notifications can be sent to end users or to SYSADMIN notifying them about the error.
After fixing the problem of the failed workflow, all error notifications still stayed in users worklists waiting to be closed, and it is required to remove them all to save the overhead done by end user if they close them one by one.
End users or sysadmin have many Error notifications in the worklist and that are required to be closed. This document explains the steps
involved in achieving the goal.
SOLUTION
1. Use one of the error notifications to get an item_type from the following select:
SQL>select message_type from wf_notifications where notification_id = <NID>;
1-1 prevent cursor from closing recent records:
SQL>select act.item_type , act.item_key
              from wf_item_activity_statuses act
             ,wf_notifications n
             ,wf_items itm
             where act.notification_id = n.notification_id
             and act.item_type = itm.item_type
             and act.item_key = itm.item_key
             and itm.end_date is null
             and n.begin_date< '[specify a date]' --to prevent recent items from being closed/removed.***
             and act.item_type = '<message_type>' -- value returned in step 1
             and act.activity_status in ('ERROR','NOTIFIED')
             and n.status = 'OPEN'
             and act.assigned_user = 'SYSADMIN';

 2. Use the following script to abort all error workflows that has currently notifications with status OPEN:
Declare
         cursor c_item_keys is
         select act.item_type , act.item_key
              from wf_item_activity_statuses act
             ,wf_notifications n
             ,wf_items itm
             where act.notification_id = n.notification_id
             and act.item_type = itm.item_type
             and act.item_key = itm.item_key
             and itm.end_date is null
             and n.begin_date< '[specify a date]' --to prevent recent items from being closed/removed.***
             and act.item_type = '<message_type>' -- value returned in step 1
             and act.activity_status in ('ERROR','NOTIFIED')
             and n.status = 'OPEN'
             and act.assigned_user = 'SYSADMIN';
             counter number; 
  Begin
    counter := 1 ;
    for item in c_item_keys loop
         wf_engine.abortprocess (item.item_type, item.item_key);
         counter := counter + 1 ;
         if counter > 1000 then
                counter := 1 ;
                commit;
         end if;
     end loop;
     commit;
End;     

 NOTE:  - Replace the <message_type> by the message_type value returned in step 1.
  - This script will remove error notifications from sysadmin.  Replace sysadmin by the end user needed or comment the line to run the script for all end users.
 3. Run the concurrent request:   "Purge Obsolete Workflow Runtime Data".
NOTE:  - In some cases the error workflow may have a child workflow, for example, POERROR workflow may fail to send a notification to a certain user, so that it will generate a WFERROR notification to sysadmin.  In that case one has to run the script in step 2 first for WFERROR workflow.

An item key is not required to run the Purge Obsolete Workflow Runtime Data request.  Running it without use of an item key, all eligible data will be purged.

No comments:

Post a Comment