by | Jul 28, 2020

    Automation Scripts – A Powerful Maximo Feature

    Automation Scripts are powerful features, used for writing, extending or altering the existing functionality to meet specific business requirements without java customization. Most popular scripting languages are Jython, Python and JavaScript. Automation Scripts were first introduced by IBM in Maximo 7.5 and the feature has been significantly improved in Maximo 7.6.

    What is Automation Script?

    Automation scripts are small, targeted pieces of code that can extend the product. An automation script consists of a launch point, variables with corresponding binding values, and the source code. Wizards are used to create the components of an automation script.

    The many benefits of Automation Scripts

    • Scripts are executed on the server at time of call. i.e. the automation scripts are a server-side artifact, as opposed to a client-side one. Hence all your scripts are executed on the server side as opposed to say in the browser.
    • No compilation is required.
    • No outages are required to deploy the automation scripts.
    • Scripts can be enabled/disabled at run time without any outage.
    • Automation scripts provides default variables and bindings to enhance the functionality.
    • A single script can be applied to many attributes. The input variables can be modified.
    • Automation script works as same as Java classes.
    • Easy to develop and implement.
    • Scripts are stored in the Database as metadata.
    • They are supported with upgrades and Migration Manager.
    • No stress on upgrades and you are not going to lose your class if you upgrade Maximo.
    • Automation scripts require no Java skills or Maximo API knowledge.
    • Automation scripts are fired after the MBO, Field classes. Hence its does not break the implemented Maximo OOB functionality; in turn it extends the functionality.

    When can Automation Scripts be used?

    Automation scripts support calls from Maximo Attributes/Applications, Actions for Escalations or Workflow, and custom points such as Workflow Condition Nodes and Conditional Expressions and Integration framework.

    The source code must be written in the languages that are supported by the following script engines:

    • Mozilla Rhino, version 1.6 release 2
    • Jython, version 2.5.2

    Examples of when Automation Scripts can be used

    Example 1: Remove Non-ASCII characters in the Description attribute

    Create Attribute Launch point

    Automation Scripts – A Powerful Maximo Feature

    ~ Create Attribute Launch Point ~

    Launch Point: BPD_FLD_PO_DESC_RMV_NONASCII – Remove Non-Ascii Characters from PO Description

    Object: PO

    Attribute: DESCRIPTION

    Events: Validate

    Script: New

    Asset Management Best Practice: Maintenance Management Reporting Tools

    ~ Step 1 ~

    Asset Management Best Practice: Maintenance Management Reporting Tools

    ~ Step 2 ~

    Asset Management Best Practice: Maintenance Management Reporting Tools

    ~ Step 3 ~

    Source Code:

    def onlyascii(char):

    if ord(char) < 32 or ord(char) > 126: return ”

    else: return char

    try :

    v_text=filter(onlyascii, v_text)

    except (RuntimeError, TypeError, NameError) :

    v_text=”

    Example 2: Check to ensure that dates are not set in the future

    Asset Management Best Practice: Maintenance Management Reporting Tools

    ~Create Attribution Launch Point ~

    Asset Management Best Practice: Maintenance Management Reporting Tools

    ~ Step 1 ~

    Asset Management Best Practice: Maintenance Management Reporting Tools

    ~ Step 2 ~

    Asset Management Best Practice: Maintenance Management Reporting Tools

    ~ Step 3 ~

    Source Code:

    from psdi.server import MXServer

    from psdi.mbo import MboValue

    if (app is None or app == “” ) and mbo.getOwner() is not None:

    app = mbo.getOwner().getThisMboSet().getApp()

    if app is not None:

    srcAttributes = [“INVOICEDATE”, ” EXCHANGEDATE”]

    for index in srcAttributes:

    current = MXServer.getMXServer().getDate()

    val = mbo.getMboValue(index).getDate()

    if val is not None and val.before(current):

    errorkey=”invalidDate”

    errorgroup=”invoice”

    Example 3: Assign a job plan description to PM Work Orders description

    Asset Management Best Practice: Maintenance Management Reporting Tools

    ~ Create Object Launch Point ~

    Asset Management Best Practice: Maintenance Management Reporting Tools

    ~ Step 1 ~

    Asset Management Best Practice: Maintenance Management Reporting Tools

    ~ Step 2~

    Asset Management Best Practice: Maintenance Management Reporting Tools

    ~ Step 3 ~

    Source Code:

    from psdi.mbo import Mbo

    from psdi.mbo import MboConstants

     

    jpdesc=mbo.getString(“JOBPLAN.DESCRIPTION”)

    mbo.setValue(“description”, jpdesc, MboConstants.NOACCESSCHECK)

    Example 4: Reopen Closed Work Order

    Asset Management Best Practice: Maintenance Management Reporting Tools

    ~ Create Action Launch Point~

    Asset Management Best Practice: Maintenance Management Reporting Tools

    ~ Step 1 ~

    Asset Management Best Practice: Maintenance Management Reporting Tools

    ~ Step 2 ~

    Asset Management Best Practice: Maintenance Management Reporting Tools

    ~ Step 3 ~

    from psdi.mbo import SqlFormat

    from psdi.mbo import MboConstants

    from psdi.server import MXServer

     

    if (mbo != None and mbo.getString(“status”)==”CLOSE”):

    pstatusSet = mbo.getMboSet(“$MAXWOSTATUS”,”WOSTATUS”,”wonum = :wonum and siteid = :siteid and status != :status and changedate = (select max(m.changedate) from wostatus

    m where m.siteid = :siteid and m.wonum = :wonum and m.status != :status)”);

    pstatus = pstatusSet.getMbo(0)

    if (pstatus != None):

    p_status = pstatus.getString(“STATUS”);

    c_statusDate = MXServer.getMXServer().getDate();

    #set the status on the work order

    mbo.setValue(“status”, p_status,

    MboConstants.NOACCESSCHECK)

    mbo.setValue(“statusdate”, c_statusDate,

    MboConstants.NOACCESSCHECK)

    mbo.setValue(“historyFlag”, False,

    MboConstants.NOACCESSCHECK)

     

    #add a record in the status history table

    woStatusMboSet = mbo.getMboSet(“WOSTATUS”)

    woStatusMboSet.add(MboConstants.NOACCESSCHECK);

    woStatusMboSet.setValue(“memo”, “Reopen Closed Work

    Order”)

    woStatusMboSet.save()

    else:

    errorkey=”Cannot Reopen WO – Error – ” +

    mbo.getString(“WONUM”) + ” – ” + mbo.getString(“status”)

    errorgroup=” workorder”

    else:

    errorkey=”Cannot Reopen WO – Not Closed – ” +

    mbo.getString(“WONUM”) + ” – ” + mbo.getString(“status”)

    errorgroup=”workorder”

    If you need help with automation scripts or have any questions about the contents of this blog, please contact us.

    Sign up to our free newsletter to explore emerging technologies, industry events and Maximo best practice.