import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import sailpoint.object.QueryOptions;
import sailpoint.object.Filter;
import sailpoint.object.Capability;
import sailpoint.object.Identity;
import sailpoint.api.SailPointContext;
import sailpoint.tools.GeneralException;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
// Logger for debugging
Log logger = LogFactory.getLog(“rule.assignCapability.log”);
public static void assignCapability(SailPointContext context) throws GeneralException {
// Query to fetch all identities where department is "HR"
QueryOptions qo = new QueryOptions();
qo.addFilter(Filter.eq("Dept_name", "Engineering"));
// Fetch iterator for identities matching the criteria
Iterator iterator = context.search(Identity.class, qo);
// Get the capability object
Capability capability = context.getObjectByName(Capability.class,"WorkItemAdministrator");
List updatedIdentities = new ArrayList();
List capabilities = new ArrayList();
capabilities.add(capability);
int count = 0;
while (iterator.hasNext()) {
Identity currentIdentity = iterator.next();
currentIdentity.setCapabilities(capabilities);
context.saveObject(currentIdentity);
updatedIdentities.add(currentIdentity);
count++;
}
// Commit transaction after processing all identities
if (count > 0) {
context.commitTransaction();
logger.info(count + " HR identities updated with 'WorkItemAdministrator' capability.");
} else {
logger.info("No HR identities found.");
}
}
// Call the function to update all HR employees
assignCapability(context);
Pls mark this as a solution