Pages

Thursday, December 5, 2013

tcProvisioningOperationsIntf API Rejected and Pending Task example

The tcProvisioningOperationsIntf  inteface API being used to retrieve the Rejected and Pending Task, Retrying the Rejected Tasks, and Rejected Task Completed Manually in the Oracle Identity Manager repository.

Pre-Requisite:

Initial Setup.

Please follow the link and setup the OIM client environment to use to create the OIM Objects.


Client Code Setup

tcProvisioningOperationsIntf  API Usage:

1. Retrieving the Rejected and Pending tasks based on the Filter Criteria,
2. Retry the Rejected Tasks
3. Manually Completed the Rejected Tasks.
4. Manually Completed the Pending Tasks.

Tasks Needs to be Performed:

1.    Create the OIMClient Handle


OIMClient client= new OIMClient();
client.login(username,password.toCharArray());

2.    Get tcProvisioningOperationsIntf service object


tcProvisioningOperationsIntf provisioningServiceIntf = client.getService(tcProvisioningOperationsIntf.class);

3.  Retrieve the Rejected or Pending Tasks Based on The Resource Object and Task Name


// Resource Name. My Example Resource Name is AD User
String resourceName = "AD User";
// Failed Task Name. My Example Failed Task Name is Create User.
String taskName = "Create User" ;
String taskStatus = "Rejected"
Map<String, String> filter= new HashMap<String,String>();
filter.put("Objects.Name", resourceName);
filter.put("Process Definition.Tasks.Task Name",taskName);

// Failed Task Status. In my example failed task status is Rejected. If you need pending task, replace Rejected with Pending 
String taskStaus[]= new String[]{"Rejected"};

tcResultSet trs=provisioningServiceIntf.findAllOpenProvisioningTasks(filter,taskStaus);
List<Map<String,Object>> taskLists= new ArrayList<Map<String,Object>>();

int rowCount=trs.getRowCount();
if(rowCount >0){
    for(int i=0;i<rowCount ;i++)
    {
               trs.goToRow(0);
               Map<String,Object> map= new HashMap<String,Object>();
               map.put("Process Instance.Task Details.Key",trs.getLongValue("Process Instance.Task Details.Key"))
               map.put("Process Instance.Task Information.Target User",trs.getStringValue("Process Instance.Task Information.Target User"));
               map.put("Process Instance.Key",trs.getLongValue("Process Instance.Key"));
               map.put("Process Definition.Tasks.Key",trs.getLongValue("Process Definition.Tasks.Key"));
               map.put("Process Definition.Tasks.Task Name",trs.getStringValue("Process Definition.Tasks.Task Name"));

taskLists.add(map);
     }
    
}

4. Retry the Rejected Tasks

for(Map<String,Object> task : taskLists )
{
    long taskKey = (long) map.get("Process Instance.Task Details.Key");

   try
        {
            provisioningServiceIntf.retryTask(taskKey );
        } catch (tcAPIException e)
        {
            System.out.println(" - tcAPIException - Error" + e);
        } catch (tcTaskNotFoundException e)
        {
            System.out.println(" - tcTaskNotFoundException - Error" + e);
        }
}

5.    Rejected or Pending Task Completed Manually



for(Map<String,Object> task : taskLists )
{
    long taskKey = (long) map.get("Process Instance.Task Details.Key");

   try
        {
            provisioningServiceIntf.setTasksCompletedManually(new long[]{taskKey} );
        } catch (tcAPIException e)
        {
            System.out.println(" - tcAPIException - Error" + e);
        } catch (tcTaskNotFoundException e)
        {
            System.out.println(" - tcTaskNotFoundException - Error" + e);
        }
        catch (tcBulkException e)
        {
            System.out.println(" - tcBulkException - Error" + e);
        }
}


6.    Retrieving the Rejected Task History

for(Map<String,Object> task : taskLists )
{
    long taskInstanceKey = (long) map.get("Process Instance.Key");

   try
        {
          tcResultSet trs= provisioningServiceIntf.getProcessDetail(taskInstanceKey );
            int count=trs.getRowCount();
                for(int i=0;i<count;i++)
                {
                    trs.goToRow(i);
                    String taskName=trs.getStringValue("Process Definition.Tasks.Task Name");
                    boolean retryAllowed= trs.getBooleanValue("RETRYALLOWED");
                    long processTask=trs.getLongValue("Process Definition.Tasks.Key");
System.out.println( "taskName - "+taskName + " - retryAllowed - "+retryAllowed+ " - processTask - "+processTask);
                }
        catch (tcAPIException e)
        {
           System.out.println(e);
        }
        catch (tcNotAtomicProcessException e)
        {
           System.out.println(e);
        } catch (tcColumnNotFoundException e)
        {
            System.out.println(e);
        }
}

2 comments:

  1. This comment has been removed by the author.

    ReplyDelete
  2. Leveraging the tcProvisioningOperationsIntf API to programmatically bulk-manage "Rejected" and "Pending" tasks is a brilliant Oracle Identity Manager (OIM) automation strategy, perfect for clearing out stuck workflows without constantly clicking through the sluggish web UI! However, when IAM developers have to rapidly pull down massive Oracle OIM Java SDKs, bulky WebLogic client libraries (wlfullclient.jar), or heavy offline API diagnostic suites to compile and test these custom task-clearing scripts locally, built-in browser downloads frequently timeout. To securely grab these immense enterprise identity payloads without corrupted archives, configuring a flawless 14-step IDM deployment blueprint guarantees a lightning-fast, drop-free download setup on Windows 10 and 11. Thanks for sharing the exact Java snippets needed to filter and update those stubborn task statuses!

    ReplyDelete