March 16, 2017

Load failure codes in Maximo with MxLoader

Creating and maintaining the hierarchy of failure codes in Maximo can be quite long and boring task using the standard Failure Codes application. The easiest and fastest way of importing Failure codes and the corresponding hierarchy is using MxLoader.

The example described in this post is available in this tailored in this sample MxLoader file. Please download it before proceeding.

Since there is no out-of-the-box object structure in Maximo to import failure codes, you first have to create the MxLoader custom object structures. This can be easily accomplished by clicking on the Create Custom Object Structures in the MxLoader ribbon in Excel.



The second step is to load the failure codes IDs and descriptions.
The FailureCodes worksheet on the example will load one failure class, two problems, two causes and three remedies.


Note that in the last column we have the language code. This is helpful if you want to transalate the failure codes in multiple languages.

We have just loaded a flat list of failure codes so now we need to create the hierarchical structure. The Failure Hierarchy template allows you to load failure class hierarchy using the custom MXL_FAILURELIST Object Structure. The example in the FailureHierarchy worksheet loads a small hierarchy using the failure codes defined previously.


Note how the failure hierarchy is specified in a flat table.
The object IDs in the square brackets will be generated dynamically by MxLoader during the import process. Do not enter those IDs manually.

This is how this failure tree will look in Maximo.


Note that the Failure Hierarchy template does not allow querying existing failure hierarchy. This can be a limitation if you want to copy a failure class hierarchy from one organization to another or from one server to another.
To extract an existing failure hierarchy you have use an SQL query like this.

SELECT f.orgid, f.failurelist classid, f.failurecode class,
  p.failurelist problemid, p.failurecode problem,
  c.failurelist causeid, c.failurecode cause,
  r.failurelist remedyid, r.failurecode remedy
FROM failurelist f
LEFT OUTER JOIN failurelist p ON p.parent=f.failurelist AND p.type='PROBLEM'
LEFT OUTER JOIN failurelist c ON c.parent=p.failurelist AND c.type='CAUSE'
LEFT OUTER JOIN failurelist r ON r.parent=c.failurelist AND r.type='REMEDY'
WHERE f.parent IS NULL
ORDER BY f.failurecode, p.failurecode, c.failurecode, r.failurecode;


MxLoader is also able to upload custom levels of failure codes in the hierarchy. For example, if you have a custom level called SYSTEM, you can simply add it to the columns and MxLoader will handle it.



References

Failure Codes in IBM Maximo Asset Management (SlideShare)
Failure codes (TechMCQ)
How to load failure code hierarchy using MIF

February 6, 2017

Maximo keyboard shortcuts

You know IBM Maximo has a lot of fields and sometimes can be boring entering data. Here are some keyboard shortcuts that can ease the pain. I have highlighted in bold the most common and useful ones.

  • Tab > The most important keyboard shortcut is the TAB key. It allows you to move across fields without using the mouse and also performs data validation and auto-completion.
  • Space > Select or clear a check box.
  • Alt + F1 > Display field help for field in focus.


There are few other useful shortcuts to move across applications.

  • Alt + C > Go to the Start Center.
  • Alt + G > Open the Go To menu. Use the arrow keys to choose the desired app.
  • Alt + B > Bulletins
  • Alt + R > Reports
  • Alt + P > Profile
  • Alt + S > Sign Out
  • Alt + H > Help
  • Alt + R > Return
  • Alt + W > Return with Value


Last but not least you can quickly create and save records with these Toolbar Buttons shortcuts.

  • Ctrl + Alt + I > Insert New Record
  • Ctrl + Alt + S > Save Record
  • Ctrl + Alt + A > Change Status
  • Ctrl + Alt + C > Clear changes
  • Ctrl + Alt + P > Previous Record
  • Ctrl + Alt + N > Next Record


This is a simplified list of the available keyboard shortcuts. For more information refer to the official documentation.

January 29, 2017

Maximo search operators

Maximo search features are quite advanced but often neglected. By using the advanced search techniques described in this post it is possible to find relevant records easier and faster.

Equal

The equal '=' operator can be used to find only records that match that a word or number exactly. In other words '=' means "exact match".
Example: Enter =123 to find any records with the exact characters 123 in the field. (Search results would not include numbers such as 0123 or 1234AB. If you enter just 123, without the =, search results would include 0123 and 1234AB.)

Not Equal

To search for all values that are not equal to a specific value enter '!='.
For example, typing !=WAPPR in the status field will retrieve all records that are not in WAPPR status.

Greater/Less

The '<' and '>' characters can also be used to search for records that are bigger or smaller than a specific value.
  • Greater than '>': searches for any date after or number/word greater than the specified value.
    Example: Enter >1172 finds records of occurrences that have work order number greater than 1172.
  • Less than '<': searches for any date before or number/word smaller than the specified value.
    Example: Enter <1172 finds records of occurrences that have work order number smaller than 1172.

List of values

You can use comma ',' operator to list the records that match with either of the values specified. It basically acts as the OR operator.
For example, typing WAPPR,COMP in the status field will retrieve all records that are in WAPPR or COMP status .

Wildcards

You can use a "wildcard" characters with letters or numbers to indicate you want to find records that begin with, end with, or contain those letters/numbers.
There are four characters you can use as a wildcard:
  • Asterisk '*' or percent sign '%': stand for any number of characters (zero, one, or multiple) in the specified position.
    Example: Enter 123* to find records that start with 123, such as 123, 12345, 123ABC.
    Example: Enter *123 to find records that end in 123, such as 123, 5123, PUMP123.
    Example: Enter *123* to find records that contain 123, such as 123, 1234, PUMP123xy.
  • Underscore '_' or question mark '?': stand for a single character in the specified position.
    Example: Enter 123_ to find any four‐character records that start with 123, such as 1234, 1230, 123g.
    Example: Enter or _18 to find any three‐character records that end with 18, such as 418, J18.

NULL Values

You can search for null and not null values by entering the following values into a search field on the Find tab:
  • To search for a null value enter: ~null~
  • To search for not null values enter: != ~null~

If your keyboard does not have the tilde '~' character you may type enter this character by typing 126 on your numeric keypad while pressing the 'Alt' key.

Dates

A small additional tip for searching dates in the current month.
If you want to search for WO's with scheduled start date less than today, you don't need to type or select the whole date into the search field because Maximo automatically appends the current month and year in the where clause.
For example, if you search with <15, system will return all WO's where scheduled start date before the 15th of the current month.


References

Understanding Search Methodologies
To Search For Records in a Maximo Database
Search for NULL values in Maximo applications


January 18, 2017

Find inactive users in Maximo

Here is a quick SQL query you can use to find inactive users that haven't logged into Maximo in the last 2 months.

DB2
select * from maxuser
where status='ACTIVE'
and sysuser=0
and not exists (select userid from logintracking where logintracking.userid=maxuser.userid and attemptresult='LOGIN' and attemptdate>(current date-60 DAYS))
order by userid;

Oracle
select * from maxuser
where status='ACTIVE'
and sysuser=0
and not exists (select userid from logintracking where logintracking.userid=maxuser.userid and attemptresult='LOGIN' and attemptdate>sysdate-60)
order by userid;

SQL Server
select * from maxuser
where status='ACTIVE'
and sysuser=0
and not exists (select userid from logintracking where logintracking.userid=maxuser.userid and attemptresult='LOGIN' and attemptdate>getdate()-60)
order by userid;

Obviously, the above query works only if you have enabled the login tracking feature in Security Groups - Security Controls.

This is very useful if you want a quick idea about how many users are really accessing the system.
Another interesting use of this query is to optimize Maximo licenses by simply deactivating users that no longer use the system. You can even define an escalation that automatically do the job for you.