Thursday, December 31, 2015

OIM API: Manual Complete Provisioning Tasks

Tested On: Oracle Identity Manager 11.1.2.3.0
Description: Demonstrates how to mark rejected provisioning tasks as "manual complete" status via Oracle Identity Manager API. Provisioning tasks can also be marked manual completed through the Identity Self Service page.

Identity Self Service Home Page
Provisioning Tasks
References:
https://docs.oracle.com/cd/E52734_01/oim/OMJAV/toc.htm

package com.blogspot.oraclestack.testdriver;
import Thor.API.Exceptions.tcAPIException;
import Thor.API.Exceptions.tcBulkException;
import Thor.API.Exceptions.tcTaskNotFoundException;
import Thor.API.Operations.tcProvisioningOperationsIntf;
import Thor.API.Security.XLClientSecurityAssociation;
import com.thortech.xl.client.dataobj.tcDataBaseClient;
import com.thortech.xl.dataaccess.tcDataProvider;
import com.thortech.xl.dataaccess.tcDataSet;
import com.thortech.xl.dataaccess.tcDataSetException;
import com.thortech.xl.dataobj.PreparedStatementUtil;
import com.thortech.xl.orb.dataaccess.tcDataAccessException;
import java.util.Arrays;
import java.util.Hashtable;
import oracle.core.ojdl.logging.ODLLevel;
import oracle.core.ojdl.logging.ODLLogger;
import oracle.iam.platform.OIMClient;
/**
* Test Driver to manual complete provisioning tasks.
* @author rayedchan
*/
public class ManualCompleteProvisioningTaskTestDriver
{
// LOGGER
public static final ODLLogger LOGGER = ODLLogger.getODLLogger(ManualCompleteProvisioningTaskTestDriver.class.getName());
// Adjust constant variables according to you OIM environment
public static final String OIM_HOSTNAME = "localhost";
public static final String OIM_PORT = "14000"; // For SSL, use 14001; For non-SSL, use 14000
public static final String OIM_PROVIDER_URL = "t3://"+ OIM_HOSTNAME + ":" + OIM_PORT; // For SSL, use t3s protocol; For non-SSL, use t3 protocol
public static final String AUTHWL_PATH = "lib/config/authwl.conf";
public static final String APPSERVER_TYPE = "wls";
public static final String FACTORY_INITIAL_TYPE = "weblogic.jndi.WLInitialContextFactory";
// Use if using SSL connection for OIMClient
public static final String TRUST_KEYSTORE_FOR_SSL = "/home/oracle/Oracle/Middleware/wlserver_10.3/server/lib/DemoTrust.jks";
// OIM Administrator Credentials
public static final String OIM_ADMIN_USERNAME = "xelsysadm";
public static final String OIM_ADMIN_PASSWORD = "Password1";
public static void main(String[] args) throws Exception
{
OIMClient oimClient = null;
try
{
// Set system properties required for OIMClient
System.setProperty("java.security.auth.login.config", AUTHWL_PATH);
System.setProperty("APPSERVER_TYPE", APPSERVER_TYPE);
System.setProperty("weblogic.security.SSL.trustedCAKeyStore", TRUST_KEYSTORE_FOR_SSL); // Provide if using SSL
// Create an instance of OIMClient with OIM environment information
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(OIMClient.JAVA_NAMING_FACTORY_INITIAL, FACTORY_INITIAL_TYPE);
env.put(OIMClient.JAVA_NAMING_PROVIDER_URL, OIM_PROVIDER_URL);
// Establish an OIM Client
oimClient = new OIMClient(env);
// Login to OIM with System Administrator Credentials
oimClient.login(OIM_ADMIN_USERNAME, OIM_ADMIN_PASSWORD.toCharArray());
// Manual complete provisioning tasks for a given process task in a specific process definition
String processDefinationName = "LDAP User"; // PKG.PKG_NAME
String processTaskName = "Disable User"; // MIL.MIL_NAME
manualCompleteProvisioningTasks(processDefinationName, processTaskName, oimClient); // Call helper method
}
finally
{
// Logout of OIM client
if(oimClient != null)
{
oimClient.logout();
}
}
}
/**
* Manually complete provisioning tasks for a given process definition.
* When a task is marked for manual completion, the value for SCH.SCH_STATUS
* is changed to 'MC'.
* @param processDefinitionName PKG.PKG_NAME
* @param processTaskName MIL.MIL_NAME
* @param oimClient OIM Client
* @throws tcDataSetException
* @throws tcDataAccessException
* @throws tcTaskNotFoundException
* @throws tcBulkException
* @throws tcAPIException
*/
public static void manualCompleteProvisioningTasks(String processDefinitionName, String processTaskName, OIMClient oimClient) throws tcDataSetException, tcDataAccessException, tcTaskNotFoundException, tcBulkException, tcAPIException
{
tcProvisioningOperationsIntf provOps = null;
try
{
// Get OIM tcProvisioningOperations service
provOps = oimClient.getService(tcProvisioningOperationsIntf.class);
// Establish database connection to OIM Schema through the OIMClient
XLClientSecurityAssociation.setClientHandle(oimClient);
tcDataProvider dbProvider = new tcDataBaseClient();
// Setup query to fetch 'Rejected', 'Pending', and 'Uncompleted' provisioning tasks for a given process task and process definition
String query = "select sch.sch_key from sch inner join osi on sch.sch_key = osi.sch_key inner join mil on osi.mil_key = mil.mil_key inner join pkg on pkg.pkg_key = osi.pkg_key where pkg.pkg_name = ? and mil.mil_name = ? and sch_status in ('R', 'P', 'UC') order by sch.sch_key";
PreparedStatementUtil ps = new PreparedStatementUtil();
ps.setStatement(dbProvider, query);
ps.setString(1, processDefinitionName); // PKG_NAME
ps.setString(2, processTaskName); // MIL_NAME
ps.execute(); // Execute query
LOGGER.log(ODLLevel.NOTIFICATION, "Executed Statement: {0}", new Object[]{ps.getStatement()});
// Provisioning Tasks Result set
tcDataSet tasksDataSet = ps.getDataSet();
int numRecords = tasksDataSet.getTotalRowCount();
long[] schKeys = new long[numRecords];
LOGGER.log(ODLLevel.NOTIFICATION, "Total Provisioning Tasks to Update: {0}", new Object[]{numRecords});
// Iterate through each record in result set
for(int i = 0; i < numRecords; i++)
{
tasksDataSet.goToRow(i); // Move cursor to next record in result set
Long id = tasksDataSet.getLong("sch_key"); // Get key from record
schKeys[i] = id; // Add to array
LOGGER.log(ODLLevel.NOTIFICATION, "Provisioning Task ID: {0}", new Object[]{id});
}
LOGGER.log(ODLLevel.NOTIFICATION, "Provisioning Tasks to Complete: {0}", new Object[]{Arrays.toString(schKeys)});
provOps.setTasksCompletedManually(schKeys); // Bulk Manual Complete provisioning tasks
}
finally
{
// Close tc* service
if(provOps != null)
{
provOps.close();
}
// Clear session
XLClientSecurityAssociation.clearThreadLoginSession();
}
}
}

No comments:

Post a Comment