IBM Maximo Customization and Development

Pages

September 28, 2018

When it comes to asset reliability measurement all the different MTTx acronyms start to appear but sometimes is not clear to everybody the exact meanings of these terms.
In this post I want to give a very simple explanation of these reliability KPIs.

MTTD - Mean Time To Detect - How long it takes to discover a problem.

MTTK - Mean Time to Know - How long it takes to understand the problem.

MTTR - Mean Time To Repair - How long it takes to fix the problem.

MTTF - Mean Time To Failure - Amount of time the system is available and operating. Also known as "uptime".

MTBF - Mean Time Between Failures - Amount of time that elapses between one failure and the next.

MTBF is the sum of MTTF and MTTR, the total time required for a device to fail and that failure to be repaired.
MTBF = MTTR + MTTF

September 27, 2018

We all know that Maximo allows the definition of new internal values for synonym domains. A common example is the LOCTYPE domain that defines the allowed values for the LOCATIONS.TYPE field.
If we want to implement a special business logic for the OPERATING type of locations we can write something like this in our automation script.

The toInternalString method will translate the internal value of the LOCATIONS.TYPE field to the corresponding domain external value.

There are two implementations of the toInternalString method that are documented in the Javadoc.

String toInternalString(String listName, String value)
Convert a specified value in the list to an internal MAXIMO value.
String returned is a single value.
Parameters:
- listName The valuelist name (valuelist.listname). This is not case sensitive.
- value The external value (valuelist.value). This is case sensitive.
Returns The internal value (valuelist.maxvalue)

String toInternalString(String listName, String value, MboRemote mbo)
Convert a specified value in the list to an internal MAXIMO value.
String returned is a single value.
Framework will use the siteid of the passed in MBO if it is site level, or the orgid of the MBO if it is org level to find out the actual values for the specified domain, and use those values for translation. If the siteid and orgid of the MBO is null, all the value records will be considered.
Parameters:
- listName The valuelist name (valuelist.listname). This is not case sensitive.
- value The external value (valuelist.value). This is case sensitive.
mbo the MBO that the translation values are used for or the MBO which the site and org is same with the MBO that the translation is used for.
Returns The internal value (valuelist.maxvalue)

August 30, 2018

In my last project I had to implement a customization to send SMS messages using Skebby. The service APIs are obviously based on REST and JSON so I ended up writing an automation script to integrate Maximo with the Skebby service.
In the process of writing the code I have faced (and solved) some interesting issues so the developed script is quite complex and is an interesting demonstration of several useful techniques:

External REST service invocation (POST and GET)

JSON manipulation

Retrieve Maximo system properties

Usage of Java classes

Appropriate logging using MXLoggerFactory

Display error messages with parameters

The script is based on WORKORDER object and requires two custom system properties (sms.username, sms.password) and two messages (SmsSendError, SmsSendOk).
Here it is.

August 23, 2018

Maximo has a feature that automatically populates the asset when a user enters a location and viceversa. This is a feature may be useful for most clients but some other clients don’t like this behavior. Unfortunately Maximo does not have a built in switch to disable this.

The best solution to solve the problem is to use an automation script with an attribute launch point.
This is documented in this post but i made few improvements to it.
My script resets the asset only when the location has been changed and ASSETNUM is changing from null to a new value. This is because there is already a warning dialog when the asset is changed from another value.

This is how I have defined my automation script. I have tested it for Service Requests application but it should work fine for Work Orders as well.

Script: SR_LOCATION

Language: python

Launch Point: SR_LOCATION_ACTION

Object: SR (this could be also be WORKORDER or TICKET)

Attribute: LOCATION

Event: Run Action (Validate should also work)

Variables: none

Script:

from psdi.mbo import MboConstants
if not mbo.isNull("LOCATION"):
if mbo.getMboValue("ASSETNUM").getPreviousValue().asString()=="" and not mbo.isNull("ASSETNUM"):
mbo.setValueNull("ASSETNUM", MboConstants.NOVALIDATION_AND_NOACTION)

Follow MaximoDev on

Follow by Email

Google+ Followers

Disclaimer

The postings on this site are my own and don't necessarily represent IBM's positions, strategies or opinions.
The materials on this site are provided "AS IS" and the author will not be liable for any direct, indirect or incidental damages arising out or relating to any use or distribution of them.