SlideShare a Scribd company logo
1362 - Implementation of Complex ITIM Workflows Fred Santos
Fred Santos Pan EMEA Subject Matter Expert Group IBM Software Group ®
Agenda ITIM Workflow Concepts: a quick Overview Workflow Types Workflow Data Workflow Elements Workflow and JavaScript Workflow Extensions Complex ITIM Workflows by Example
Abstract ITIM manages security policies by using workflows.  The ability to develop customized workflows are essential to getting value out of an ITIM deployment and in high demand during customer engagements. Skills Level: Advanced
Workflow Types Operation Workflows Lifecycle Management Persons and BPPersons Accounts Global Entitlement Workflows Provisioning Processing Accounts
Operation Workflows Associated with manipulation of Entities: Account Person BPPerson Global workflows can be defined and called from other operation workflows
Operation Workflows Can be defined at two levels: Entity Type Entity The Entity Type Workflows are inherited by all entities of that type. E.g.: Operation Workflows defined at the level of Entity Type Account, will be inherited by all Accounts, regardless of profile The Entity Workflows override those inherited from the Entity Type level E.g.: a customized Modify NT account workflow overrides the modify workflow inherited from the Account Entity Type
Operation Workflows Person and BPPerson operations: Add Modify Delete  Suspend Restore Transfer SelfRegister
Operation Workflows Account Operations: Add Modify Delete Suspend Restore ChangePassword
Entitlement Workflows Specified in Provisioning Policies Entitlement Workflows are NOT mandatory Triggered by: Account Add Account Modify Executed before the relevant Operation Workflow The Operation Workflow do not start before the Entitlement Workflow completes
Workflow Data Three types of Workflow Data: Javascript variables Relevant Data Workflow Context Objects
Javascript Variables Defined in Javascript code: Javascript Nodes Postscript tabs “ Custom” code in some other Nodes Start and End Nodes Can’t be Serialized or made Persistent Exist in the context of their definition When the node completes, all variables will be out of scope
Relevant Data Defined in the Workflow Properties page Exists throughout the life of the workflow Stored in the ITIM Database Can be associated with contexts: Subject Requestee Both Not Applicable
Relevant Data Types of Relevant Data: Input/Output Parameters Workflow Defined User Defined
Input/Output Parameters in Entitlement Workflows Input Parameters: Entity – Account: In an add request, it contains the data for the new account In an a modify request, it contains only the modified attributes Service The Service where the account exists or will be create Owner - Person: The Person associated with the account Output Parameters: Entity – Account
Input Parameters in Operation Workflows Static Operations: Add: Person or Account (Account) Modify: Account SelfRegister: Person Non-Static Operations: Delete: Person or Account (Person) Modify: Person Suspend: Person or Account Restore: Person or Account Transfer: Person ChangePassword: Account
System Defined and User Defined Data System Defined Data: Defined only in some workflows User Defined Data: Defined in the Workflow Properties Page Made persistent in the ITIM Database Accessed in Javascript with userObject = ItemName.get(); Changed in Javascript with ItemName.set(userObject);
Workflow Context Objects Contain information about the object in question Activity Process Accessible in Javascript code
Workflow Elements Start and End Approval Request for Information Work Order Script Loop Operation and Subprocess Extension Transition Lines
Workflow and JavaScript Most Elements Allow Javascript code to be executed: Start and End Nodes Script Nodes Postscript Tabs (Approval, Extension, …) Transition Lines Allows: Manipulation of Relevant Data Conditional logic in Transition Lines
Workflow and Javascript FESI Extensions can be used in Javascript code Created as Java classes implementing the Javascript API Installed in the ITIM classpath Registered in enRole.properties Used as Objects var userObj = new extObject(); Functions var userVar = extFunction(val1, val2);
Workflow Extensions Java classes implementing the Workflow API Installed in the ITIM classpath Registered in workflowextensions.xml Used by adding an Extension node in the Workflow Select the class name in Extension Name Map the Input and Output Parameters to Relevant Data The Input and Output Parameters are defined in the Java class
Workflow Extensions Can be used to Hide sensitive processing logic Access external data stores Files Databases LDAP Servers Implement logic difficult to code or inefficient in Javascript Number crunching Encapsulate processing in a single node
Complex Workflows: Example 1 Global Operation (Account Entity Type) Approval_Process
Complex Workflows: Example 1 // Initialise loop instance counter to zero and exitloop switch to false.  loopinstance.set(0); exitloop.set("false"); // Check current process type. If not Account Process Type, Loop back through Parent Processes  // until Account Process type is found or until the root Parent reached. Default value is et to unknown.  current = process; exitwhile = false; parentType = ""; parentTypeDesc.set("Unknown"); while  (!exitwhile) { if ((current.type.substring(0,1)=="A" || current.type.substring(0,1)=="L") && current.type.length == 2){ parentType=current.type; exitwhile = true; } else if (current.parentId == 0 || current.parentId == "0"){ exitwhile = true; } else {current=current.getParent();} } if (parentType=="AA") {parentTypeDesc.set("Account Add");} else if (parentType=="AC") {parentTypeDesc.set("Account Change");} else if (parentType=="AP") {parentTypeDesc.set("Account Password Change");} else if (parentType=="LS") {parentTypeDesc.set("Suspend Multiple Accounts");} else if (parentType=="LR") {parentTypeDesc.set("Restore Multiple Accounts");} else if (parentType=="LD") {parentTypeDesc.set("Delete  Multiple Accounts");} else if (parentType=="LP") {parentTypeDesc.set("Change Password for Multiple Accounts");} else if (parentType=="AS") {parentTypeDesc.set("Suspend Account");} else if (parentType=="AR") {parentTypeDesc.set("Restore Account");} else if (parentType=="AD") {parentTypeDesc.set("Delete Account");} // otherAccount Check if (service.get().getProperty("erservicename")[0] == "otherAccount") { otherAccountCheck.set("true") } parentTypeDesc.get();
Complex Workflows: Example 1 Subject <JS>function getprop(ob, prop){x=ob.getProperty(prop);if (x.length != 0){return x[0];}else{return &quot;&quot;;}}&quot;&quot;;</JS>ARMS <JS>if (otherAccountCheck.get() == &quot;false&quot;) {return (service.get().getProperty(&quot;erservicename&quot;)[0]);} else {return (getprop(entity.get(), &quot;erOtherAccountService&quot;));}</JS> <JS>if (otherAccountCheck.get() == &quot;false&quot;) {return (parentTypeDesc.get());} else {return (getprop(entity.get(), &quot;erOtherAccountOperation&quot;));}</JS> Request For <JS>o=owner.get();getprop(o,&quot;cn&quot;);</JS> Waiting for Your approval Message <JS>function getprop(ob, prop){  x=ob.getProperty(prop);  if (x.length != 0) { return x[0]; } else { return &quot;&quot;; }}&quot;&quot;;</JS>There is a <JS>if (otherAccountCheck.get() == &quot;false&quot;) {return (service.get().getProperty(&quot;erservicename&quot;)[0]);} else {return (getprop(entity.get(), &quot;erOtherAccountService&quot;));}</JS> account <JS>if (otherAccountCheck.get() == &quot;false&quot;) {return (parentTypeDesc.get());} else {return (getprop(entity.get(), &quot;erOtherAccountOperation&quot;));}</JS> request for <JS>o=owner.get();getprop(o,&quot;cn&quot;);</JS> waiting for your approval.<JS>if (otherAccountCheck.get() != &quot;false&quot;) {return (&quot;\nAccount Information: &quot; + getprop(entity.get(), &quot;erotheraccountcontent&quot;) +&quot;\n&quot;);} else {return (&quot;&quot;);}</JS>Please see the service charging information for <JS>if (otherAccountCheck.get() == &quot;false&quot;) {return (service.get().getProperty(&quot;erservicename&quot;)[0]);} else {return (getprop(entity.get(), &quot;erOtherAccountService&quot;));}</JS> account from http://www.ibm.com To approve/reject the request, go to MyTodo List >> Pending Requests. Login to ITIM:http://www..ibm.com/ITIM Thank you for using ITIM. If you have any questions please see the ITIM service pages or contact your local Service Desk. Please, do not reply to this message. ITIM is a central webtool for requesting, generating, maintainingand managing System and Application accounts in IBM . http://www.itim.ibm.com/ITIM
Complex Workflows: Example 1 Relevant Data Account  Entity Type AND Split Type AND  Join Type 1 Days 0 Hours 0 Minutes 0 Seconds Escalation Limit Escalation Participant Participant Approval Rrequest Description Approval with a 1 Day Timeout Activity Name OneDayApprovalTimeout ActivityID Approval node Node Type Attribute Value Attribute Name participant = new Participant(ParticipantType.SUPERVISOR); Custom Attribute Value Attribute Name participant = new Participant(ParticipantType.SUPERVISOR); Custom Attribute Value Attribute Name owner Person owner service Service service entity Account entity Relevant Data ID Type ID
Complex Workflows: Example 1 true;  Script AND Split Type AND  Join Type LOOP_START ActivityID Script node Node Type Attribute Value Attribute Name exitloop.set(&quot;true&quot;); true; Script AND Split Type AND  Join Type EXIT_LOOP ActivityID Script node Node Type Attribute Value Attribute Name loopinstance.set(loopinstance.get()+1); true; Script AND Split Type AND  Join Type LOOP_END ActivityID Script node Node Type Attribute Value Attribute Name
Complex Workflows: Example 1 getApproverDN process.auditEvent(&quot;Attempting to get approver details&quot;); if (supervisorApproval.get() == &quot;true&quot; ) { process.auditEvent(&quot;Getting normal approver&quot;); person = owner.get(); manager = person.getProperty(&quot;erSupervisor&quot;);  //managers erglobalId approver.set(manager[0]); approver2.set(manager[0]); approver3.set(manager[0]); process.auditEvent(&quot;Normal approver resolved&quot;); } else {  //Special Approver process.auditEvent(&quot;Getting special approver&quot;); personSearch = new PersonSearch();  //ModelExtension needs to be registered for workflow in fesiextension.properties file to use PersonSearch  searchFilter = &quot;(employeeNumber=&quot; + approverEmpNum.get() +&quot;)&quot;;  searchResult = personSearch.searchByFilter(&quot;ibmPerson&quot;, searchFilter, 2);  //2 means search scope is subtree  approverEntity = searchResult[0];  //The search result is an array of the directory objects  approver.set(approverEntity.dn); if (approverEmpNumDeputy1.get() != null) { personSearch = new PersonSearch();  //ModelExtension needs to be registered for workflow in fesiextension.properties file to use PersonSearch  searchFilter = &quot;(employeeNumber=&quot; + approverEmpNumDeputy1.get() +&quot;)&quot;;  searchResult = personSearch.searchByFilter(&quot;ibmPerson&quot;, searchFilter, 2);  //2 means search scope is subtree  approverEntity1 = searchResult[0];  //The search result is an array of the directory objects
Complex Workflows: Example 1 getApproverDN approver2.set(approverEntity1.dn); } else { approver2.set(approverEntity.dn);  // Same approver as the first } if (approverEmpNumDeputy2.get() != null) { personSearch = new PersonSearch();  //ModelExtension needs to be registered for workflow in fesiextension.properties file to use PersonSearch  searchFilter = &quot;(employeeNumber=&quot; + approverEmpNumDeputy2.get() +&quot;)&quot;;  searchResult = personSearch.searchByFilter(“ibmPerson&quot;, searchFilter, 2);  //2 means search scope is subtree  approverEntity2 = searchResult[0];  //The search result is an array of the directory objects  approver3.set(approverEntity2.dn); } else { approver3.set(approverEntity.dn);  // Same approver as the first } process.auditEvent(&quot;Special approver resolved&quot;); } /*  //For debugging if needed process.auditEvent(&quot;approverEmpNum &quot; + approverEmpNum.get() ); process.auditEvent(&quot;approver &quot; + approver.get() ); process.auditEvent(&quot;approver2 &quot; + approver2.get() ); process.auditEvent(&quot;approver3 &quot; + approver3.get() ); process.auditEvent(&quot;approverEmpNumDeputy1 &quot; + approverEmpNumDeputy1.get() ); process.auditEvent(&quot;approverEmpNumDeputy2 &quot; + approverEmpNumDeputy2.get() ); */
Complex Workflows: Example 1 (continued) Account Restore uses Approval_Process
Complex Workflows: Example 2 Add Account
Complex Workflows: Example 3 IBM Software Group Restore Account
Complex Workflows: Example 3 current = process; exitwhile = false; parentType = &quot;&quot;; parentTypeDesc.set(&quot;Unknown&quot;); while  (!exitwhile) { if (current.parentId == 0 || current.parentId == &quot;0&quot;){ parentType=current.type; exitwhile = true; } else { current=current.getParent(); } } process.auditEvent(&quot;Parent Type: &quot; + parentType); if (parentType==&quot;AR&quot;) { sendEmail.set(&quot;false&quot;); } else { sendEmail.set(&quot;true&quot;); } process.auditEvent(&quot;sendEmail set to : &quot; + sendEmail.get()); parentTypeDesc.get();
Complex Workflows: Example 4 ChangePassword
Complex Workflows: Example 4 CHECK_REQUESTOR  // Check to see if Requestee is also requestor requestorCheck.set(&quot;false&quot;); sysUserDN = CurrentProcess.getRequestorDN(); if (sysUserDN==&quot;null&quot; || sysUserDN==&quot;-1&quot; || sysUserDN==null) { // Not a human requestor requestorCheck.set(&quot;false&quot;); } else { sysUserAccount = SystemUser.getByDN(sysUserDN); curr_parent = sysUserAccount.parent.toString(); requestorPersonDN=curr_parent.substring(curr_parent.indexOf(':') + 2, curr_parent.length); requesteeDN = process.requesteeDN; test = &quot;-&quot; + requesteeDN + &quot;- compared with -&quot; + requestorPersonDN + &quot;- &quot;; if (requesteeDN == requestorPersonDN) { requestorCheck.set(&quot;true&quot;); } else { requestorCheck.set(&quot;false&quot;); } } test += &quot;with result &quot; + requestorCheck.get(); process.auditEvent(test); test;
Complex Workflows: Example 4 Set_Pwd_change_attrs // Set Service curr_account = Entity.get(); curr_service = curr_account.getProperty(&quot;erservice&quot;)[0]; service.set(new Service(curr_service)); curr_owner = curr_account.getProperty(&quot;owner&quot;)[0]; owner.set(new Person(curr_owner)); // Set attributes // Set erW2kPasswordForceChange to true curr_account.setProperty( &quot;erW2kPasswordForceChange&quot;, true ); Entity.set(curr_account); true;
Complex Workflows: Example 5 Delete Person
Complex Workflows: Example 6 Add Person
Appendix 1 Workflow Elements
Workflow Elements Start and End Approval Request for Information Work Order Script Loop Operation and Subprocess Extension Transition Lines
Start and End Elements Always exist Can’t be deleted Can add Javascript code to them
Approval Element Requests the Approval from a Participant The Participant must be an ITIM user Applicable to People and Accounts Usable in Operation Workflows and Entitlement Workflows Has Postscript tab
Request for Information Requests Information from a Participant The attributes to be provided will be presented on the Person or Account form ACIs not needed Applicable to People and Accounts Usable in Operation Workflows and Entitlement Workflows Has Postscript tab
Work Order Sends email to a Participant For Notification To request some action outside ITIM Participant doesn’t need to be ITIM user Must be in ITIM with mail attribute filled Javascript can be used in the message Has Postscript tab
Script Element Used to run Javascript code FESI extensions can be used
Loop Element Executes one or more elements in a Loop Loop Types Do While Evaluates condition  before executing Do Until Evaluates condition after each execution Not Supported: Transitions directly into and out of the Loop  Nested Loops
Operation Element Calls an existing Operation Workflow from another The called Entity Type and Entity in the called workflow can be different from the calling workflow The called workflow doesn’t return data to the calling workflow
Subprocess Element Calls one Entitlement Workflow from another Must map relevant data in the calling to input parameters in the called workflow
Extension Element Used to call an application extension to the workflow engine Are Java classes Implement the Workflow API Need to be registered in workflowextensions.xml
Transition Lines Execution Flows that connect Workflow Elements Any number of Transition Lines can enter or leave a Workflow elements Javascript code can be added to Transition Lines
Transition Lines: Split Types Split Types And All paths leaving the element will be evaluated and all paths evaluated to true will be followed  Or The transitions are evaluated until one is found to be “true” and that path is then followed; all other paths are not evaluated
Transition Lines: Join Types Join Types And All elements on active paths leading to this element must complete before the joined element is executed Or The first path leading to the element that is evaluated to true will cause the element to be executed Since it’s not possible to order the paths, only ONE path should evaluate to true
Appendix 2 How to Document Workflows
How to Document Workflows
How to Document Workflows
How to Document Workflows
How to Document Workflows
How to Document Workflows
Thank you!

More Related Content

PPT
Java Class Loader
PDF
Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...
PDF
Ksug2015 - JPA3, JPA 내부구조
PDF
Connecting Connect with Spring Boot
PDF
Programação orientada a objetos: herança
PPT
Hibernate
PDF
AWS Builders Online Series | EC2와 Lambda로 AWS 시작하기 - 조용진, AWS 솔루션즈 아키텍트
PDF
Aula 02 - Principios da Orientação a Objetos (POO)
Java Class Loader
Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...
Ksug2015 - JPA3, JPA 내부구조
Connecting Connect with Spring Boot
Programação orientada a objetos: herança
Hibernate
AWS Builders Online Series | EC2와 Lambda로 AWS 시작하기 - 조용진, AWS 솔루션즈 아키텍트
Aula 02 - Principios da Orientação a Objetos (POO)

What's hot (20)

PDF
AWS Black Belt Online Seminar 2018 AWS Certificate Manager
PPT
wrapper classes
DOC
jdbc document
PPT
Deploying java beans in jsp
PDF
JPA and Hibernate
PPTX
Introduction to APIs & how to automate APIs testing with selenium web driver?
DOCX
Spring notes
PDF
20201118 AWS Black Belt Online Seminar 形で考えるサーバーレス設計 サーバーレスユースケースパターン解説
PDF
SolrCloud on Amazon ECS
PDF
【ログ分析勉強会】セッションアクティビティログは使えるのか
PPTX
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
PDF
Apigee の FAPI & CIBA 対応を実現する「Authlete (オースリート)」
PDF
Spring core module
PPT
20. Object-Oriented Programming Fundamental Principles
PPTX
Testing RESTful web services with REST Assured
PDF
AWS Black Belt Online Seminar 2016 クラウドのためのアーキテクチャ設計 -ベストプラクティス-
PDF
POO - 10 - Herança
PDF
[AWSマイスターシリーズ] Amazon Elastic Compute Cloud (EC2)
PDF
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
PDF
AWS 비용, 어떻게 사용하고 계신가요? - 비용 최적화를 위한 AWS의 다양한 툴 알아보기 – 허경원, AWS 클라우드 파이낸셜 매니저:...
AWS Black Belt Online Seminar 2018 AWS Certificate Manager
wrapper classes
jdbc document
Deploying java beans in jsp
JPA and Hibernate
Introduction to APIs & how to automate APIs testing with selenium web driver?
Spring notes
20201118 AWS Black Belt Online Seminar 形で考えるサーバーレス設計 サーバーレスユースケースパターン解説
SolrCloud on Amazon ECS
【ログ分析勉強会】セッションアクティビティログは使えるのか
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
Apigee の FAPI & CIBA 対応を実現する「Authlete (オースリート)」
Spring core module
20. Object-Oriented Programming Fundamental Principles
Testing RESTful web services with REST Assured
AWS Black Belt Online Seminar 2016 クラウドのためのアーキテクチャ設計 -ベストプラクティス-
POO - 10 - Herança
[AWSマイスターシリーズ] Amazon Elastic Compute Cloud (EC2)
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
AWS 비용, 어떻게 사용하고 계신가요? - 비용 최적화를 위한 AWS의 다양한 툴 알아보기 – 허경원, AWS 클라우드 파이낸셜 매니저:...
Ad

Similar to Tech_Implementation of Complex ITIM Workflows (20)

PDF
Ispim reference pdf
PPTX
Extending Workflow Foundation With Custom Activities
PPTX
WF_in_retail_banking_enterprise_systems
PPT
03WCFWindowsCommunicationFoundationWorkflowServices.ppt
PPT
Introduction To Work Item Customisation
PPT
]project-open[ Workflow Developer Tutorial Part 3
PPT
Windows Workflow Foundation
PPT
09 workflow
PPT
Customizing Oracle EBS OA Framework
PPT
]project-open[ Workflow Developer Tutorial Part 2
PPT
PDF
Groovy Architectural Flexibility
PPTX
Introduction To Windows Workflow Foundation 4.0
PDF
jBPM5 Community Training Module #5: Domain Specific Processes
DOC
Tibco business events (be) online training institute
ODP
XPages is Workflow's new best friend
PPTX
Step by Step Beginner's Guide on Workday Integration
PPTX
Workflow functional concept on openerp7
PPTX
Working effectively with legacy code
PPT
About work flow
Ispim reference pdf
Extending Workflow Foundation With Custom Activities
WF_in_retail_banking_enterprise_systems
03WCFWindowsCommunicationFoundationWorkflowServices.ppt
Introduction To Work Item Customisation
]project-open[ Workflow Developer Tutorial Part 3
Windows Workflow Foundation
09 workflow
Customizing Oracle EBS OA Framework
]project-open[ Workflow Developer Tutorial Part 2
Groovy Architectural Flexibility
Introduction To Windows Workflow Foundation 4.0
jBPM5 Community Training Module #5: Domain Specific Processes
Tibco business events (be) online training institute
XPages is Workflow's new best friend
Step by Step Beginner's Guide on Workday Integration
Workflow functional concept on openerp7
Working effectively with legacy code
About work flow
Ad

More from 51 lecture (20)

PPT
1244600439API2 upload
PDF
1242982622API2 upload
PDF
1242982374API2 upload
PPT
1242626441API2 upload
PDF
1242625986my upload
PDF
1242361147my upload ${file.name}
PDF
this is ruby test
PDF
this is ruby test
PDF
this is ruby test
PPT
this is ruby test
PPT
this is ruby test
PPT
this is test api2
PPT
My cool new Slideshow!
PPT
Stress Management
PPS
Iim A Managment
PPT
Time Management
PDF
Conversation By Design
PPT
Web 2.0
PPT
dynamics-of-wikipedia-1196670708664566-3
PDF
javascript reference
1244600439API2 upload
1242982622API2 upload
1242982374API2 upload
1242626441API2 upload
1242625986my upload
1242361147my upload ${file.name}
this is ruby test
this is ruby test
this is ruby test
this is ruby test
this is ruby test
this is test api2
My cool new Slideshow!
Stress Management
Iim A Managment
Time Management
Conversation By Design
Web 2.0
dynamics-of-wikipedia-1196670708664566-3
javascript reference

Recently uploaded (20)

PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
NewMind AI Weekly Chronicles - August'25 Week I
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
NewMind AI Monthly Chronicles - July 2025
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Electronic commerce courselecture one. Pdf
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Encapsulation theory and applications.pdf
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PPTX
Big Data Technologies - Introduction.pptx
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Machine learning based COVID-19 study performance prediction
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
NewMind AI Weekly Chronicles - August'25 Week I
The AUB Centre for AI in Media Proposal.docx
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
NewMind AI Monthly Chronicles - July 2025
20250228 LYD VKU AI Blended-Learning.pptx
Electronic commerce courselecture one. Pdf
Understanding_Digital_Forensics_Presentation.pptx
Encapsulation theory and applications.pdf
Dropbox Q2 2025 Financial Results & Investor Presentation
Big Data Technologies - Introduction.pptx
CIFDAQ's Market Insight: SEC Turns Pro Crypto
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Machine learning based COVID-19 study performance prediction
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Advanced methodologies resolving dimensionality complications for autism neur...

Tech_Implementation of Complex ITIM Workflows

  • 1. 1362 - Implementation of Complex ITIM Workflows Fred Santos
  • 2. Fred Santos Pan EMEA Subject Matter Expert Group IBM Software Group ®
  • 3. Agenda ITIM Workflow Concepts: a quick Overview Workflow Types Workflow Data Workflow Elements Workflow and JavaScript Workflow Extensions Complex ITIM Workflows by Example
  • 4. Abstract ITIM manages security policies by using workflows. The ability to develop customized workflows are essential to getting value out of an ITIM deployment and in high demand during customer engagements. Skills Level: Advanced
  • 5. Workflow Types Operation Workflows Lifecycle Management Persons and BPPersons Accounts Global Entitlement Workflows Provisioning Processing Accounts
  • 6. Operation Workflows Associated with manipulation of Entities: Account Person BPPerson Global workflows can be defined and called from other operation workflows
  • 7. Operation Workflows Can be defined at two levels: Entity Type Entity The Entity Type Workflows are inherited by all entities of that type. E.g.: Operation Workflows defined at the level of Entity Type Account, will be inherited by all Accounts, regardless of profile The Entity Workflows override those inherited from the Entity Type level E.g.: a customized Modify NT account workflow overrides the modify workflow inherited from the Account Entity Type
  • 8. Operation Workflows Person and BPPerson operations: Add Modify Delete Suspend Restore Transfer SelfRegister
  • 9. Operation Workflows Account Operations: Add Modify Delete Suspend Restore ChangePassword
  • 10. Entitlement Workflows Specified in Provisioning Policies Entitlement Workflows are NOT mandatory Triggered by: Account Add Account Modify Executed before the relevant Operation Workflow The Operation Workflow do not start before the Entitlement Workflow completes
  • 11. Workflow Data Three types of Workflow Data: Javascript variables Relevant Data Workflow Context Objects
  • 12. Javascript Variables Defined in Javascript code: Javascript Nodes Postscript tabs “ Custom” code in some other Nodes Start and End Nodes Can’t be Serialized or made Persistent Exist in the context of their definition When the node completes, all variables will be out of scope
  • 13. Relevant Data Defined in the Workflow Properties page Exists throughout the life of the workflow Stored in the ITIM Database Can be associated with contexts: Subject Requestee Both Not Applicable
  • 14. Relevant Data Types of Relevant Data: Input/Output Parameters Workflow Defined User Defined
  • 15. Input/Output Parameters in Entitlement Workflows Input Parameters: Entity – Account: In an add request, it contains the data for the new account In an a modify request, it contains only the modified attributes Service The Service where the account exists or will be create Owner - Person: The Person associated with the account Output Parameters: Entity – Account
  • 16. Input Parameters in Operation Workflows Static Operations: Add: Person or Account (Account) Modify: Account SelfRegister: Person Non-Static Operations: Delete: Person or Account (Person) Modify: Person Suspend: Person or Account Restore: Person or Account Transfer: Person ChangePassword: Account
  • 17. System Defined and User Defined Data System Defined Data: Defined only in some workflows User Defined Data: Defined in the Workflow Properties Page Made persistent in the ITIM Database Accessed in Javascript with userObject = ItemName.get(); Changed in Javascript with ItemName.set(userObject);
  • 18. Workflow Context Objects Contain information about the object in question Activity Process Accessible in Javascript code
  • 19. Workflow Elements Start and End Approval Request for Information Work Order Script Loop Operation and Subprocess Extension Transition Lines
  • 20. Workflow and JavaScript Most Elements Allow Javascript code to be executed: Start and End Nodes Script Nodes Postscript Tabs (Approval, Extension, …) Transition Lines Allows: Manipulation of Relevant Data Conditional logic in Transition Lines
  • 21. Workflow and Javascript FESI Extensions can be used in Javascript code Created as Java classes implementing the Javascript API Installed in the ITIM classpath Registered in enRole.properties Used as Objects var userObj = new extObject(); Functions var userVar = extFunction(val1, val2);
  • 22. Workflow Extensions Java classes implementing the Workflow API Installed in the ITIM classpath Registered in workflowextensions.xml Used by adding an Extension node in the Workflow Select the class name in Extension Name Map the Input and Output Parameters to Relevant Data The Input and Output Parameters are defined in the Java class
  • 23. Workflow Extensions Can be used to Hide sensitive processing logic Access external data stores Files Databases LDAP Servers Implement logic difficult to code or inefficient in Javascript Number crunching Encapsulate processing in a single node
  • 24. Complex Workflows: Example 1 Global Operation (Account Entity Type) Approval_Process
  • 25. Complex Workflows: Example 1 // Initialise loop instance counter to zero and exitloop switch to false. loopinstance.set(0); exitloop.set(&quot;false&quot;); // Check current process type. If not Account Process Type, Loop back through Parent Processes // until Account Process type is found or until the root Parent reached. Default value is et to unknown. current = process; exitwhile = false; parentType = &quot;&quot;; parentTypeDesc.set(&quot;Unknown&quot;); while (!exitwhile) { if ((current.type.substring(0,1)==&quot;A&quot; || current.type.substring(0,1)==&quot;L&quot;) && current.type.length == 2){ parentType=current.type; exitwhile = true; } else if (current.parentId == 0 || current.parentId == &quot;0&quot;){ exitwhile = true; } else {current=current.getParent();} } if (parentType==&quot;AA&quot;) {parentTypeDesc.set(&quot;Account Add&quot;);} else if (parentType==&quot;AC&quot;) {parentTypeDesc.set(&quot;Account Change&quot;);} else if (parentType==&quot;AP&quot;) {parentTypeDesc.set(&quot;Account Password Change&quot;);} else if (parentType==&quot;LS&quot;) {parentTypeDesc.set(&quot;Suspend Multiple Accounts&quot;);} else if (parentType==&quot;LR&quot;) {parentTypeDesc.set(&quot;Restore Multiple Accounts&quot;);} else if (parentType==&quot;LD&quot;) {parentTypeDesc.set(&quot;Delete Multiple Accounts&quot;);} else if (parentType==&quot;LP&quot;) {parentTypeDesc.set(&quot;Change Password for Multiple Accounts&quot;);} else if (parentType==&quot;AS&quot;) {parentTypeDesc.set(&quot;Suspend Account&quot;);} else if (parentType==&quot;AR&quot;) {parentTypeDesc.set(&quot;Restore Account&quot;);} else if (parentType==&quot;AD&quot;) {parentTypeDesc.set(&quot;Delete Account&quot;);} // otherAccount Check if (service.get().getProperty(&quot;erservicename&quot;)[0] == &quot;otherAccount&quot;) { otherAccountCheck.set(&quot;true&quot;) } parentTypeDesc.get();
  • 26. Complex Workflows: Example 1 Subject <JS>function getprop(ob, prop){x=ob.getProperty(prop);if (x.length != 0){return x[0];}else{return &quot;&quot;;}}&quot;&quot;;</JS>ARMS <JS>if (otherAccountCheck.get() == &quot;false&quot;) {return (service.get().getProperty(&quot;erservicename&quot;)[0]);} else {return (getprop(entity.get(), &quot;erOtherAccountService&quot;));}</JS> <JS>if (otherAccountCheck.get() == &quot;false&quot;) {return (parentTypeDesc.get());} else {return (getprop(entity.get(), &quot;erOtherAccountOperation&quot;));}</JS> Request For <JS>o=owner.get();getprop(o,&quot;cn&quot;);</JS> Waiting for Your approval Message <JS>function getprop(ob, prop){ x=ob.getProperty(prop); if (x.length != 0) { return x[0]; } else { return &quot;&quot;; }}&quot;&quot;;</JS>There is a <JS>if (otherAccountCheck.get() == &quot;false&quot;) {return (service.get().getProperty(&quot;erservicename&quot;)[0]);} else {return (getprop(entity.get(), &quot;erOtherAccountService&quot;));}</JS> account <JS>if (otherAccountCheck.get() == &quot;false&quot;) {return (parentTypeDesc.get());} else {return (getprop(entity.get(), &quot;erOtherAccountOperation&quot;));}</JS> request for <JS>o=owner.get();getprop(o,&quot;cn&quot;);</JS> waiting for your approval.<JS>if (otherAccountCheck.get() != &quot;false&quot;) {return (&quot;\nAccount Information: &quot; + getprop(entity.get(), &quot;erotheraccountcontent&quot;) +&quot;\n&quot;);} else {return (&quot;&quot;);}</JS>Please see the service charging information for <JS>if (otherAccountCheck.get() == &quot;false&quot;) {return (service.get().getProperty(&quot;erservicename&quot;)[0]);} else {return (getprop(entity.get(), &quot;erOtherAccountService&quot;));}</JS> account from http://www.ibm.com To approve/reject the request, go to MyTodo List >> Pending Requests. Login to ITIM:http://www..ibm.com/ITIM Thank you for using ITIM. If you have any questions please see the ITIM service pages or contact your local Service Desk. Please, do not reply to this message. ITIM is a central webtool for requesting, generating, maintainingand managing System and Application accounts in IBM . http://www.itim.ibm.com/ITIM
  • 27. Complex Workflows: Example 1 Relevant Data Account Entity Type AND Split Type AND Join Type 1 Days 0 Hours 0 Minutes 0 Seconds Escalation Limit Escalation Participant Participant Approval Rrequest Description Approval with a 1 Day Timeout Activity Name OneDayApprovalTimeout ActivityID Approval node Node Type Attribute Value Attribute Name participant = new Participant(ParticipantType.SUPERVISOR); Custom Attribute Value Attribute Name participant = new Participant(ParticipantType.SUPERVISOR); Custom Attribute Value Attribute Name owner Person owner service Service service entity Account entity Relevant Data ID Type ID
  • 28. Complex Workflows: Example 1 true; Script AND Split Type AND Join Type LOOP_START ActivityID Script node Node Type Attribute Value Attribute Name exitloop.set(&quot;true&quot;); true; Script AND Split Type AND Join Type EXIT_LOOP ActivityID Script node Node Type Attribute Value Attribute Name loopinstance.set(loopinstance.get()+1); true; Script AND Split Type AND Join Type LOOP_END ActivityID Script node Node Type Attribute Value Attribute Name
  • 29. Complex Workflows: Example 1 getApproverDN process.auditEvent(&quot;Attempting to get approver details&quot;); if (supervisorApproval.get() == &quot;true&quot; ) { process.auditEvent(&quot;Getting normal approver&quot;); person = owner.get(); manager = person.getProperty(&quot;erSupervisor&quot;); //managers erglobalId approver.set(manager[0]); approver2.set(manager[0]); approver3.set(manager[0]); process.auditEvent(&quot;Normal approver resolved&quot;); } else { //Special Approver process.auditEvent(&quot;Getting special approver&quot;); personSearch = new PersonSearch(); //ModelExtension needs to be registered for workflow in fesiextension.properties file to use PersonSearch searchFilter = &quot;(employeeNumber=&quot; + approverEmpNum.get() +&quot;)&quot;; searchResult = personSearch.searchByFilter(&quot;ibmPerson&quot;, searchFilter, 2); //2 means search scope is subtree approverEntity = searchResult[0]; //The search result is an array of the directory objects approver.set(approverEntity.dn); if (approverEmpNumDeputy1.get() != null) { personSearch = new PersonSearch(); //ModelExtension needs to be registered for workflow in fesiextension.properties file to use PersonSearch searchFilter = &quot;(employeeNumber=&quot; + approverEmpNumDeputy1.get() +&quot;)&quot;; searchResult = personSearch.searchByFilter(&quot;ibmPerson&quot;, searchFilter, 2); //2 means search scope is subtree approverEntity1 = searchResult[0]; //The search result is an array of the directory objects
  • 30. Complex Workflows: Example 1 getApproverDN approver2.set(approverEntity1.dn); } else { approver2.set(approverEntity.dn); // Same approver as the first } if (approverEmpNumDeputy2.get() != null) { personSearch = new PersonSearch(); //ModelExtension needs to be registered for workflow in fesiextension.properties file to use PersonSearch searchFilter = &quot;(employeeNumber=&quot; + approverEmpNumDeputy2.get() +&quot;)&quot;; searchResult = personSearch.searchByFilter(“ibmPerson&quot;, searchFilter, 2); //2 means search scope is subtree approverEntity2 = searchResult[0]; //The search result is an array of the directory objects approver3.set(approverEntity2.dn); } else { approver3.set(approverEntity.dn); // Same approver as the first } process.auditEvent(&quot;Special approver resolved&quot;); } /* //For debugging if needed process.auditEvent(&quot;approverEmpNum &quot; + approverEmpNum.get() ); process.auditEvent(&quot;approver &quot; + approver.get() ); process.auditEvent(&quot;approver2 &quot; + approver2.get() ); process.auditEvent(&quot;approver3 &quot; + approver3.get() ); process.auditEvent(&quot;approverEmpNumDeputy1 &quot; + approverEmpNumDeputy1.get() ); process.auditEvent(&quot;approverEmpNumDeputy2 &quot; + approverEmpNumDeputy2.get() ); */
  • 31. Complex Workflows: Example 1 (continued) Account Restore uses Approval_Process
  • 32. Complex Workflows: Example 2 Add Account
  • 33. Complex Workflows: Example 3 IBM Software Group Restore Account
  • 34. Complex Workflows: Example 3 current = process; exitwhile = false; parentType = &quot;&quot;; parentTypeDesc.set(&quot;Unknown&quot;); while (!exitwhile) { if (current.parentId == 0 || current.parentId == &quot;0&quot;){ parentType=current.type; exitwhile = true; } else { current=current.getParent(); } } process.auditEvent(&quot;Parent Type: &quot; + parentType); if (parentType==&quot;AR&quot;) { sendEmail.set(&quot;false&quot;); } else { sendEmail.set(&quot;true&quot;); } process.auditEvent(&quot;sendEmail set to : &quot; + sendEmail.get()); parentTypeDesc.get();
  • 35. Complex Workflows: Example 4 ChangePassword
  • 36. Complex Workflows: Example 4 CHECK_REQUESTOR // Check to see if Requestee is also requestor requestorCheck.set(&quot;false&quot;); sysUserDN = CurrentProcess.getRequestorDN(); if (sysUserDN==&quot;null&quot; || sysUserDN==&quot;-1&quot; || sysUserDN==null) { // Not a human requestor requestorCheck.set(&quot;false&quot;); } else { sysUserAccount = SystemUser.getByDN(sysUserDN); curr_parent = sysUserAccount.parent.toString(); requestorPersonDN=curr_parent.substring(curr_parent.indexOf(':') + 2, curr_parent.length); requesteeDN = process.requesteeDN; test = &quot;-&quot; + requesteeDN + &quot;- compared with -&quot; + requestorPersonDN + &quot;- &quot;; if (requesteeDN == requestorPersonDN) { requestorCheck.set(&quot;true&quot;); } else { requestorCheck.set(&quot;false&quot;); } } test += &quot;with result &quot; + requestorCheck.get(); process.auditEvent(test); test;
  • 37. Complex Workflows: Example 4 Set_Pwd_change_attrs // Set Service curr_account = Entity.get(); curr_service = curr_account.getProperty(&quot;erservice&quot;)[0]; service.set(new Service(curr_service)); curr_owner = curr_account.getProperty(&quot;owner&quot;)[0]; owner.set(new Person(curr_owner)); // Set attributes // Set erW2kPasswordForceChange to true curr_account.setProperty( &quot;erW2kPasswordForceChange&quot;, true ); Entity.set(curr_account); true;
  • 38. Complex Workflows: Example 5 Delete Person
  • 41. Workflow Elements Start and End Approval Request for Information Work Order Script Loop Operation and Subprocess Extension Transition Lines
  • 42. Start and End Elements Always exist Can’t be deleted Can add Javascript code to them
  • 43. Approval Element Requests the Approval from a Participant The Participant must be an ITIM user Applicable to People and Accounts Usable in Operation Workflows and Entitlement Workflows Has Postscript tab
  • 44. Request for Information Requests Information from a Participant The attributes to be provided will be presented on the Person or Account form ACIs not needed Applicable to People and Accounts Usable in Operation Workflows and Entitlement Workflows Has Postscript tab
  • 45. Work Order Sends email to a Participant For Notification To request some action outside ITIM Participant doesn’t need to be ITIM user Must be in ITIM with mail attribute filled Javascript can be used in the message Has Postscript tab
  • 46. Script Element Used to run Javascript code FESI extensions can be used
  • 47. Loop Element Executes one or more elements in a Loop Loop Types Do While Evaluates condition before executing Do Until Evaluates condition after each execution Not Supported: Transitions directly into and out of the Loop Nested Loops
  • 48. Operation Element Calls an existing Operation Workflow from another The called Entity Type and Entity in the called workflow can be different from the calling workflow The called workflow doesn’t return data to the calling workflow
  • 49. Subprocess Element Calls one Entitlement Workflow from another Must map relevant data in the calling to input parameters in the called workflow
  • 50. Extension Element Used to call an application extension to the workflow engine Are Java classes Implement the Workflow API Need to be registered in workflowextensions.xml
  • 51. Transition Lines Execution Flows that connect Workflow Elements Any number of Transition Lines can enter or leave a Workflow elements Javascript code can be added to Transition Lines
  • 52. Transition Lines: Split Types Split Types And All paths leaving the element will be evaluated and all paths evaluated to true will be followed Or The transitions are evaluated until one is found to be “true” and that path is then followed; all other paths are not evaluated
  • 53. Transition Lines: Join Types Join Types And All elements on active paths leading to this element must complete before the joined element is executed Or The first path leading to the element that is evaluated to true will cause the element to be executed Since it’s not possible to order the paths, only ONE path should evaluate to true
  • 54. Appendix 2 How to Document Workflows
  • 55. How to Document Workflows
  • 56. How to Document Workflows
  • 57. How to Document Workflows
  • 58. How to Document Workflows
  • 59. How to Document Workflows