Handling workflow from automation script

If you need to handle workflows (start, stop, route, etc.) from an automation script you can use the following two Maximo API classes: WorkFlowService and WFInstance. Here are few examples.

The WorkFlowService.initiateWorkflow metod can be used to start a workflow:

from psdi.server import MXServer
# get the workflow service
wfSrv = MXServer.getMXServer().lookup('WORKFLOW')
# start the workflow
wfSrv.initiateWorkflow("MYWF", mbo)

To stop an active workflow you can use WFInstance.stopWorkflow method:

from psdi.server import MXServer
# get the workflow service
wfSrv = MXServer.getMXServer().lookup('WORKFLOW')
# get active instances for the current mbo
wfSet = wfSrv.getActiveInstances(mbo)
# stop the first workflow instance
wfSet.getMbo(0).stopWorkflow("Stopped")

To route a workflow I have used the WorkFlowService.completeAssignment method. Here it is a little more complex since we first have to get the right WFAssignment record to the current Mbo and user.

from psdi.mbo import SqlFormat
from psdi.server import MXServer

def getMboAssignments(mbo, personid):
  sqf = SqlFormat(mbo, "ownertable=:1 and wfassignment.ownerid=:2 and assigncode=:3 and assignstatus='ACTIVE'")
  sqf.setObject(1, "WFASSIGNMENT", "OWNERTABLE", mbo.getName())
  sqf.setLong(2, mbo.getUniqueIDValue())
  sqf.setObject(3, "WFASSIGNMENT", "ASSIGNCODE", personid)
  assignSet = mbo.getMboSet("$CURMBOASGN", "WFASSIGNMENT", sqf.format())
  assignSet.reset()
  return assignSet

wfSrv = MXServer.getMXServer().lookup('WORKFLOW')
wfAsSet = getMboAssignments(mbo, mbo.getUserInfo().getPersonId())
if not wfAsSet.isEmpty():
  wfAs = wfAsSet.getMbo(0)
  wfSrv.completeAssignment(wfAs, "Approved by script", True)
  

Handling workflow from automation script

Leave a Reply

Your email address will not be published. Required fields are marked *


Scroll to top