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 |
https://docs.oracle.com/cd/E52734_01/oim/OMJAV/toc.htm
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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