One of my customers asked me to take a kind of snapshot of work orders at a specific point of the workflow to keep track of special approvals and exact situation of the approved record.
I decided to implement such requirement through the implementation of an automation script to generate a BIRT report automatically and attach it the work order. I my scenario I have triggered it from the workflow but it can be also triggered from an escalation.
#-------------------------------------------------------------------------------
#
# Script: WOREPORTGENSAVE
#
# Launch Point: WORKORDER - Action
#
# Generate a BIRT report and save it as an attachment.
#
#-------------------------------------------------------------------------------
from psdi.mbo import Mbo, MboConstants
from psdi.util.logging import MXLoggerFactory
from psdi.server import MXServer
from com.ibm.tivoli.maximo.report.birt.admin import ReportAdminServiceRemote
from com.ibm.tivoli.maximo.report.birt.runtime import ReportParameterData
from java.io import FileOutputStream
#-------------------------------------------------------------------------------
logger = MXLoggerFactory.getLogger("maximo.dev")
reportName = "wodetail.rptdesign" # name of the report to be lauched
appName = "WOTRACK" # application
reportFolder = "Attachments" # folder where the report will be stored
#-------------------------------------------------------------------------------
logger.debug("Entering WOREPORTGENSAVE")
wonum = mbo.getString("WONUM")
logger.debug("Retrieving destination file and folder")
doctypesMboSet = MXServer.getMXServer().getMboSet('DOCTYPES', mbo.getUserInfo())
doctypesMboSet.setWhere("DOCTYPE='" + reportFolder + "'")
outputFilePath=doctypesMboSet.getMbo(0).getString('DEFAULTFILEPATH')
logger.debug("Output folder: " + outputFilePath)
outputFileName = wonum + "-details.pdf"
outputFile = outputFilePath + "/" + outputFileName
logger.debug("Output file: " + outputFile)
logger.debug("Generating report" + reportName)
# get the handler to BIRT report engine
reportAdminService = MXServer.getMXServer().lookup("BIRTREPORT")
# pass WONUM as report parameter
parameterData = ReportParameterData()
parameterData.addParameter("where", "(WORKORDER.wonum='"+wonum+"')")
reportBytes = reportAdminService.runReport(MXServer.getMXServer().getSystemUserInfo(), reportName, appName, parameterData, outputFileName, ReportAdminServiceRemote.OUTPUT_FORMAT_PDF)
# writes the binary data to the output file
fos = FileOutputStream(outputFile)
fos.write(reportBytes)
fos.close()
logger.debug("Creating DOCLINKS record")
doclinksMboSet = mbo.getMboSet("DOCLINKS")
doclinksMbo = doclinksMboSet.add()
doclinksMbo.setValue("URLTYPE", "FILE")
doclinksMbo.setValue("URLNAME", outputFile)
doclinksMbo.setValue("NEWURLNAME", outputFile)
doclinksMbo.setValue("DOCTYPE", reportFolder)
doclinksMbo.setValue("ADDINFO", True)
doclinksMbo.setValue("DESCRIPTION", "Test Results")