To execute below code you have to add following jars in classpath:
Stand Alone Code:
import Thor.API.Exceptions.tcAPIException;
import Thor.API.Exceptions.tcColumnNotFoundException;
import Thor.API.Operations.TaskDefinitionOperationsIntf;
import Thor.API.tcResultSet;
import Thor.API.Operations.tcProvisioningOperationsIntf;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import javax.security.auth.login.LoginException;
import oracle.iam.identity.usermgmt.api.UserManager;
import oracle.iam.identity.usermgmt.vo.User;
import oracle.iam.platform.OIMClient;
import oracle.iam.provisioning.api.ProvisioningService;
import oracle.iam.provisioning.vo.Account;
public class AddProcessTask {
OIMClient oimClient = null;
//identity self service details
String username = "xelsysadm";
String password = "<password>"; //xelsysadm password
String t3url = "t3://<hostname>:<port>"; //OIM HostName and Port
String authwl_location = "<location of authwl.conf file in your local machine>"; //eg. D:\\authwl.conf
public void getOIMConnection(){
System.out.println("getOIMConnection() : Start");
//set system properties
System.setProperty("java.security.auth.login.config", authwl_location);
System.setProperty("OIM.AppServerType", "wls");
System.setProperty("APPSERVER_TYPE", "wls");
Hashtable oimenv = new Hashtable();
oimenv.put(OIMClient.JAVA_NAMING_FACTORY_INITIAL, "weblogic.jndi.WLInitialContextFactory");
oimenv.put(OIMClient.JAVA_NAMING_PROVIDER_URL,t3url);
oimClient = new OIMClient(oimenv);
try {
oimClient.login(username, password.toCharArray());
System.out.println("Connected");
} catch (LoginException e) {
e.printStackTrace();
}
System.out.println("getOIMConnection() : End");
}
public void addProcessTask(List<String> userList, String appInst, String taskName, String accountStatus){
try{
ProvisioningService provService = oimClient.getService(ProvisioningService.class);
tcProvisioningOperationsIntf provisioningOperationsIntf = oimClient.getService(tcProvisioningOperationsIntf.class);
UserManager userManager = oimClient.getService(UserManager.class);
for(String userLogin : userList){
System.out.println("User Login - " + userLogin);
User user = userManager.getDetails(userLogin, null, true);
List<Account> provList = provService.getAccountsProvisionedToUser(user.getEntityId());
System.out.println("No of accounts : " + provList.size() + " for user : " + user.getLogin());
for (Account account : provList){
System.out.println(account.getAppInstance().getApplicationInstanceName());
if ((appInst.equals(account.getAppInstance().getApplicationInstanceName())) &&
(account.getAccountStatus().equals(accountStatus))){
long pInstKey = Long.parseLong(account.getProcessInstanceKey());
long taskKey = getTaskKey(pInstKey, taskName);
if(taskKey != 0L){
provisioningOperationsIntf.addProcessTaskInstance(taskKey, pInstKey);
}
System.out.println("Successfully added task " + taskName + " to " + appInst + "!!!");
}else{
System.out.println("None of the accounts match the app instance");
}
}
}
}catch (Exception e){
System.out.println("Error occured while adding process task " + e.getMessage());
}
}
public long getTaskKey(long prcInstKey, String taskName) throws tcAPIException,
tcAPIException, tcColumnNotFoundException{
TaskDefinitionOperationsIntf taskDefnOpsIntf = oimClient.getService(TaskDefinitionOperationsIntf.class);
if((taskName == null) || (taskName.length() == 0)){
System.out.println("Task Name not found");
}
Map<String, String> tskSrchFilter = new HashMap<String, String>();
tskSrchFilter.put("Process Definition.Tasks.Task Name", taskName);
tcResultSet tskSrchResSet = taskDefnOpsIntf.getTaskDetail(prcInstKey, tskSrchFilter);
long retValue = 0L;
if ((tskSrchResSet != null) && (tskSrchResSet.getTotalRowCount() != 0)){
if(tskSrchResSet.getTotalRowCount() == 1){
tskSrchResSet.goToRow(0);
retValue = tskSrchResSet.getLongValue("Process Definition.Tasks.Key");
System.out.println("retValue :: " + retValue);
}else{
System.out.println("Multiple Tasks found for Task Name :: " + taskName);
}
}else{
System.out.println("No Task found for task Name :: " + taskName);
}
return retValue;
}
public List<String> getUsersFromFile(String sourceFile){
System.out.println("Reading the data from CSV file :" + sourceFile);
String userLogin = "";
List<String> users = null;
try{
BufferedReader br = new BufferedReader(new FileReader(sourceFile));
users = new ArrayList<String>();
br.readLine();
while(null != (userLogin = br.readLine())){
users.add(userLogin.trim());
}
br.close();
}catch (FileNotFoundException e){
System.out.println("CSV file not found " + e.getMessage());
}catch (IOException e){
System.out.println("IO exception occured" + e.getMessage());
}catch (Exception e){
System.out.println("Error occured while reading file" + e.getMessage());
}
return users;
}
public static void main(String[] args){
AddProcessTask obj = new AddProcessTask();
//Users for which process task needs to be added
String sourceFile = "D:/AddProcessTask/Users.csv";
//Application Instance
String appInstName = "ActiveDirectory";
//Task Name
String taskName = "Email Updated";
//Account Status
String accountStatus = "Provisioned";
//get OIM Client
obj.getOIMConnection();
//get list of users for which process task needs to be added
List<String> userList = obj.getUsersFromFile(sourceFile);
//add process task for users
obj.addProcessTask(userList, appInstName, taskName, accountStatus);
}
}
Sample Users.csv file as shown below:
Happy Learning!!!