Seifware Inc.
1-87-SEIFWARE
It has been challenging and time consuming to manage workflow assignments when users are on vacation or out of office. In this post, we are demonstrating how end-users and Maximo administrators can effectively manage and automate those assignments.
Depending on your organizational needs, you may need to automate workflow assignments to a colleague within a specific period of time, keep original assignments with you and call back all delegated assignments once you are back in office. If this sounds familiar to you and have similar challenges, this article is for you!
For more posts, please visit www.seifware.com
Background:
Maximo support for delegation: Maximo allows users to specify a workflow delegate to act on their behalf while they are out of the office for a specific period of time (workflow delegate). Currently, it is the main responsibility of the Maximo Administrator to update such details on the person’s record.
“Preserve Original Assignment when Delegating?” is another important flag on the workflow design that allows end-users to keep their original assignments while delegating them.
Limitations of Standard Features: Maximo out of the box does not:
1- Automatically delegate existing workflow assignments.
2- Automatically return unprocessed delegated workflow assignments back to owner.
Maximo Absence Management:
This solution depends on keeping original workflow assignments with the owner while delegating them and on some automation scripts that only run outside maintenance window (admin mode is off) . Since every organization has its unique requirements, the below suggested solution is intended for general use only. Please contact our professional services for guaranteed solutions/support.
Enable workflow delegation on user’s start center: As a first step to automate the delegation, it would be more efficient to move updating delegation details’ responsibility to end-users right from their own start center, personal information . Doing so, end-users will be able to update the delegate and delegation period before leaving the office and clear them right after resuming work. Maximo system administrators can follow the technical section for more information on how to add delegation on user’s start centers.
Keep Original Assignments: This solution is based on the concept of keeping original assignments with the owner while delegating them. Review your workflow design and ensure related “Preserve Original Assignment when Delegating?” flag is enabled for selected roles.
Technical Details:
This solution requires an outage and is compatible with SaaS environments.
Escalations run the actions that are automatically created by related automation action scripts. Please ensure that escalations are running during the minimum activity time period, preferably once daily at night.
OBJECT | ATTRIBUTENAME | TYPE |
WFASSIGNMENT | DELEGATEDTO | same as PERSON.PERSONID |
DELEGATIONDATE | DATE |
OBJECT | CHILD | NAME | SQL |
WFASSIGNMENT | WFASSIGNMENT | SW_ISDELGASSIGNED | wfid=:wfid and assignstatus in (select value from synonymdomain where domainid='WFASGNSTATUS' and maxvalue='ACTIVE') and delegatedto is null |
SW_OWNERASSINMT | wfid=:wfid and keeporigassgn=1 and delegatedto is not null and assignstatus in (select value from synonymdomain where domainid='WFASGNSTATUS' and maxvalue='ACTIVE') |
SCRIPT | LAUNCH POINT DETAILS | SOURCE |
UPDATEASSIGN (Update new Assignments) |
Name: UPDATEASSIGN, Type: Object, Object: WFASSIGNMENT, Event: Save, Save (Add, before Save), Object Event Condition:
|
Appendix A |
DELEGATEASSIGN (Automatically delegating existing assignments through escalation) |
Name: DELEGATEASSIGN, Type: Action, Object: WFASSIGNMENT | Appendix B |
DELGDEL (Automatically withdraw delegated assignments through escalation) |
Name: DELGDEL, Type: Action, Object: WFASSIGNMENT | Appendix C |
Escalation | Action | Parameters |
DELEGATEASSIGN (Automatically delegating existing assignments) |
DELEGATEASSIGN |
Repeat: Yes, Object: WFASSIGNMENT, Frequency: once a day Condition: |
DELGDEL (Automatically withdraw delegated assignments ) |
DELGDEL |
Repeat: Yes, Object: WFASSIGNMENT, Frequency: once a day Condition: |
<sectionrow id="myProfilePersonalInfo_1_row5">
<sectioncol id="myProfilePersonalInfo_1_row5_col1">
<section id="myProfilePersonalInfo_1_row5_col1_1" label="Delegation">
<textbox dataattribute="DELEGATE" id="myProfilePersonalSection_12" lookup="person" />
<textbox dataattribute="DELEGATEFROMDATE" id="myProfilePersonalSection_13" lookup="datelookup" />
<textbox dataattribute="DELEGATETODATE" id="myProfilePersonalSection_14" lookup="datelookup" />
</section>
</sectioncol>
</sectionrow>
<tablecol dataattribute="delegatedto" id="assignwfcol5"/>
<tablecol dataattribute="delegationdate" id="assignwfcol6"/>
#License:
#For Maximo end-users: Free of use/re-use/modification/re-distribution when License and Source sections are present on header.
#For Solution providers: Restricted (Please contact us for more information).
#Source: Seifware Inc. (www.seifware.com).
#Date: August 11th 2019.
#Version: 1.0
#Purpose: Update WF active assignments with delegated person when original assignments are kept with owner.
from psdi.mbo import MboConstants
from psdi.server import MXServer
assignee=mbo.getMboSet("ASSIGNEE").getMbo(0)
lastDelegate = assignee.getLastDelegate(assignee, None)
if not lastDelegate is None and lastDelegate.getLong("personuid") != assignee.getLong("personuid"):
activeSet = mbo.getInstance().getMboSet("ACTIVEASSIGNMENTS")
activeAssign = activeSet.moveFirst()
isDelegateAssigned=0
while (activeAssign):
if activeAssign.getMboSet("ASSIGNEE").getMbo(0).getLong("personuid")==lastDelegate.getLong("personuid"):
isDelegateAssigned=1
break
activeAssign = activeSet.moveNext()
if isDelegateAssigned==0:
mbo.setValue ("delegatedto",lastDelegate.getString("personid"),MboConstants.NOACCESSCHECK | MboConstants.NOVALIDATION_AND_NOACTION)
mbo.setValue ("delegationdate",MXServer.getMXServer().getDate(),MboConstants.NOACCESSCHECK | MboConstants.NOVALIDATION_AND_NOACTION)
#License:
#For Maximo end-users: Free of use/re-use/modification/re-distribution when License and Source sections are present on header.
#For Solution providers: Restricted (Please contact us for more information).
#Source: Seifware Inc. (www.seifware.com).
#Date: August 11th 2019.
#Version: 1.0
#Purpose: Copy existing workflow assignments to the delegate.#
#Delegating escalated assignments... Ensure that the delegate has no active assignment for the same wfid
from psdi.mbo import MboConstants
from psdi.mbo import SqlFormat
from psdi.workflow import WFInstance
from psdi.server import MXServer
assignee=mbo.getMboSet("ASSIGNEE").getMbo(0)
if not assignee is None and mbo.getBoolean("KEEPORIGASSGN") and mbo.isNull("delegatedto"):
lastDelegate = assignee.getLastDelegate(assignee, None)
if not lastDelegate is None and lastDelegate.getLong("personuid") != assignee.getLong("personuid"):
delegateAssignSet= mbo.getMboSet("SW_ISDELGASSIGNED")
sqlFormat = SqlFormat("assigncode=:1")
sqlFormat.setObject(1, "PERSON", "PERSONID", lastDelegate.getString("personid"))
delegateAssignSet.setUserWhere(sqlFormat.format())
delegateAssignSet.reset()
if delegateAssignSet.getMbo(0) is None:
activeSet =mbo.getInstance().getMboSet("ACTIVEASSIGNMENTS")
activeSet.setMXTransaction(mbo.getThisMboSet().getMXTransaction())
mbo.activeAssignment(lastDelegate , activeSet)
mbo.setValue ("delegatedto",lastDelegate.getString("personid"),MboConstants.NOACCESSCHECK | MboConstants.NOVALIDATION_AND_NOACTION)
mbo.setValue ("delegationdate",MXServer.getMXServer().getDate(),MboConstants.NOACCESSCHECK | MboConstants.NOVALIDATION_AND_NOACTION)
#License:
#For Maximo end-users: Free of use/re-use/modification/re-distribution when License and Source sections are present on header.
#For Solution providers: Restricted (Please contact us for more information).
#Source: Seifware Inc. (www.seifware.com).
#Date: August 11th 2019.
#Version: 1.0
#Purpose: Withdraw WF Assignments that have been delegated in the past from a person who is now returned back to work.
# Identify and withdraw delegated active assignments that have associated assignments kept with owner
from psdi.mbo import MboConstants
origAssignmnt =mbo.getMboSet("SW_OWNERASSINMT").getMbo(0)
if not origAssignmnt is None:
assignmntOwner=origAssignmnt.getMboSet("ASSIGNEE").getMbo(0)
if not assignmntOwner is None:
lastDelegate = assignmntOwner.getLastDelegate(assignmntOwner, None)
if lastDelegate is None or lastDelegate.getLong("personuid")==assignmntOwner.getLong("personuid"):
origAssignmnt.setValueNull ("delegatedto",MboConstants.NOACCESSCHECK | MboConstants.NOVALIDATION_AND_NOACTION)
origAssignmnt.setValueNull ("delegationdate",MboConstants.NOACCESSCHECK | MboConstants.NOVALIDATION_AND_NOACTION)
mbo.delete()
* Licensing may apply
Our approach is to keep things simple and keep you informed of all available options. Contact us for more details!