Some of the features that this workflow addresses are
- Approval to Manager or Role Owners is dynamic based on the custom OIM system property "approval-condition". Value is set either "AND" or "OR".
- Manager or Role Owner can be set to be notified only with no approval required. In this case only email is sent to notify them but no approval is required from them. Custom OIM system property are created to address this.
- manager-notify-only = TRUE or FALSE
- TRUE = only notify the manager no approval request sent.
- FALSE = notify the manager and send an approval request.
- roleowner-notify-only = TRUE or FALSE
- TRUE = only notify the role owner no approval request sent.
- FALSE = notify the role owner and send an approval request.
- Third Level System Notification was required but it should be dynamic. Custom OIM system property are created to address this
- sysadmin-notify-only = TRUE or FALSE
- TRUE notify the sys admin
- FALSE Do not notify the sys admin
- If a manager makes the request on behalf of a subordinate then the approval is automatically skipped in the approval chain.
- If a role owner makes the request then the approval is automatically skipped if he/she is in the approval chain.
- Emails are triggered before and after the human approval task from notification templates within OIM web console. OIM API's were used to send out the emails. This was done to ease the email body modification which was otherwise be required to be done from the JDeveloper and SOA composite being redeployed.
BPEL Process
BPEL Workflow level global variables
Java Code for the java embedding activity 1
|
Approval Task Details.
Manager Approval and Skip Condition
Role Owners Approval and Skip Condition
Dynamic Voted Outcome
Java Code for the java embedding activity 2
try {
String oimUserName =
"";
String oimPassword =
"";
oracle.security.jps.JpsContext ctx =
oracle.security.jps.JpsContextFactory
.getContextFactory().getContext();
final
oracle.security.jps.service.credstore.CredentialStore cs =
(oracle.security.jps.service.credstore.CredentialStore) ctx
.getServiceInstance(oracle.security.jps.service.credstore.CredentialStore.class);
oracle.security.jps.service.credstore.CredentialMap cmap = cs
.getCredentialMap("oracle.oim.sysadminMap");
oracle.security.jps.service.credstore.Credential cred = cmap
.getCredential("sysadmin");
if (cred instanceof
oracle.security.jps.service.credstore.PasswordCredential) {
oracle.security.jps.service.credstore.PasswordCredential pcred =
(oracle.security.jps.service.credstore.PasswordCredential) cred;
char[] p =
pcred.getPassword();
oimUserName = pcred.getName();
oimPassword =
new String(p);
}
String oimURL =
"t3s://localhost:443/oim";
String roleApprover =
"xelsysadm";
java.util.Hashtable
env = new java.util.Hashtable();
env.put(oracle.iam.platform.OIMClient.JAVA_NAMING_FACTORY_INITIAL,
oracle.iam.platform.OIMClient.WLS_CONTEXT_FACTORY);
env.put(oracle.iam.platform.OIMClient.JAVA_NAMING_PROVIDER_URL,
oimURL);
oracle.iam.platform.OIMClient client = new
oracle.iam.platform.OIMClient(
env);
System.out.println("Before Login");
client.login(oimUserName, oimPassword.toCharArray());
System.out.println("Login Successful");
oracle.iam.request.api.RequestService
reqSvc = client
.getService(oracle.iam.request.api.RequestService.class);
oracle.iam.identity.rolemgmt.api.RoleManager roleSvc = client
.getService(oracle.iam.identity.rolemgmt.api.RoleManager.class);
oracle.iam.identity.usermgmt.api.UserManager usersvc = client
.getService(oracle.iam.identity.usermgmt.api.UserManager.class);
// Code for
sending e-mail Notification
oracle.iam.notification.api.NotificationService notsvc = client
.getService(oracle.iam.notification.api.NotificationService.class);
// Code for
sending e-mail Notification
Object reqIdXMLElem =
getVariableData("inputVariable", "payload",
"/ns3:process/ns4:RequestID");
String reqId =
((oracle.xml.parser.v2.XMLElement) reqIdXMLElem)
.getText();
System.out.println("The
request ID is " + reqId);
oracle.iam.request.vo.Request req = reqSvc
.getBasicRequestData(reqId);
System.out.println("req--->" + req);
String requesterID =
req.getRequesterKey();
System.out.println("requesterID ->" + requesterID);
java.util.List<oracle.iam.request.vo.Beneficiary> beneficiaries
= req
.getBeneficiaries();
System.out.println("beneficiaries----->" +
beneficiaries);
if (beneficiaries !=
null) {
for
(oracle.iam.request.vo.Beneficiary benf : beneficiaries) {
String beneficiaryID = benf.getBeneficiaryKey();
System.out.println(" beneficiaryID->" + beneficiaryID);
oracle.iam.identity.usermgmt.vo.User user1 = usersvc
.getDetails(benf.getBeneficiaryKey(), null, false);
System.out.println("user1------>" + user1);
java.util.HashMap userMap = user1.getAttributes();
System.out.println("userMap ->" + userMap);
String mgrKey = userMap.get("usr_manager_key").toString();
System.out.println("mgrKey ->" + mgrKey);
java.util.List<oracle.iam.request.vo.RequestBeneficiaryEntity>
rbes = benf
.getTargetEntities();
for
(oracle.iam.request.vo.RequestBeneficiaryEntity rbe : rbes) {
String key = rbe.getEntityKey();
System.out.println("key---->"
+ key);
String type = rbe.getEntityType();
System.out.println("type---->" + type);
if
(type.equalsIgnoreCase("Role")) {
System.out.println("type is role");
oracle.iam.identity.rolemgmt.vo.Role role = roleSvc
.getDetails(key, null);
//setVariableData("sysadmin-notify-only", "true");
// Code for
sending e-mail Notification
String
adminNotify="false";
adminNotify=(String)getVariableData("sysadmin-notify-only");
if(adminNotify.equalsIgnoreCase("true"))
{
String userLogin=userMap.get("User Login").toString();
System.out.println("usrLogin ->" +userLogin);
//get sysadmin login
String
sysAdminLogin="xelsysadm";
//get role name
String roleName=null;
roleName=role.getAttribute(oracle.iam.identity.rolemgmt.api.RoleManagerConstants.ROLE_DISPLAY_NAME).toString();
System.out.println("Role Name"+ roleName);
//get requester display name
oracle.iam.identity.usermgmt.api.UserManager requesterservice = client
.getService(oracle.iam.identity.usermgmt.api.UserManager.class);
System.out.println("Requester ID "+requesterID);
oracle.iam.identity.usermgmt.vo.User
requester = usersvc.getDetails(requesterID, null, false);
java.util.HashMap requesterMap = requester.getAttributes();
System.out.println("requesterMap
->" + requesterMap);
String requesterDisplayName=requesterMap.get("First
Name").toString()+" "+requesterMap.get("Last
Name").toString();
System.out.println("requester
Full Name ->" +requesterDisplayName);
oracle.iam.notification.vo.NotificationEvent notevent = new
oracle.iam.notification.vo.NotificationEvent();
String[] receiverUserIds= {sysAdminLogin};
notevent.setUserIds(receiverUserIds);
notevent.setTemplateName("SystemAdminNotification");
java.util.HashMap templateParams = new java.util.HashMap();
templateParams.put("usr_key",beneficiaryID);
templateParams.put("request_id",reqId);
templateParams.put("role_name",roleName);
templateParams.put("requester_name",requesterDisplayName);
notevent.setSender(null);
notevent.setParams(templateParams);
System.out.println("Sending Notification");
notsvc.notify(notevent);
//End of Code for sending e-mail notification
} // End of adminNotify if condition
}
}//
End RequestBeneficiaryEntity for loop
} // End
beneficiaries for loop
} // End if
} catch (Exception e) {
System.out.println("----------------------");
e.printStackTrace();
System.out.println("----------------------");
}
|