June 26, 2013

Automatically set Everyplace start center for mobile users

Maximo Everyplace is the easiest solution to go mobile with Maximo however there is one little thing that always annoys me (and mobile users).

After having created mobile versions of the Maximo apps, the administrator has to define a mobile start center with a Favorite Applications portlet to access them. Unfortunately, there is no way to set this as a 'mobile' Start Center so each user have to click on the Display Settings link and select the Is Mobile check box for the specific start center.

In the real world this means that after having set up Maximo Everyplace I have to send an email to all the mobile users with the instructions about how to setup their mobile start center.

Here is a simple escalation to automatically set the Is Mobile checkbox for the designated start center for all the users.

First of all we need an Action to set the flag:
  • Action: SETMSC
  • Description: Set Mobile Start Center
  • Object: SCCONFIG
  • Type: Set Value
  • Attribute: ISMOBILE
  • Value: 1
  • Accessible From: ESCALATION

Then we can define the Escalation to run the action:
  • Name: SETMSC
  • Description: Set Mobile Start Cente
  • Condition: groupname in ('[EVGROUP]') and ismobile=0
  • Schedule: hourly
  • Create Successful Execution Entry?: No
  • Escalation point: Empty
  • Action: SETMSC

The [EVGROUP] should match the name of your Security Group(s) with the mobile start center assigned.

June 24, 2013

Opening of Maximo Summer Series!

Italy may not be the strongest economy in the EU but certainly offers some benefits.
I will stay for the next three weeks in a wonderful place in the south of Italy where I can enjoy some sun and sandy beaches like this.

Maximo and EAM are both my job and my hobby so I will continue to post new articles and tips from my beach chair.

Stay tuned!

June 20, 2013

Embed Maximo user interface in a web page

This was a tough week but I have learned many things. I have been two days in Florence and other two days in Montebelluna near Venice. Now I am in the train going back home for a well deserved vacation at the beach.

Today I have discovered a nice way to embed Maximo UI in a custom web portal. The customer wants to provide a very simple self service center in its own intranet web site.
The trick to achieve this is to use an undocumented parameter called portalmode. Let's see how to do it.

Download the sample mymx.html file. This HTML file is a simple web page that has a very classical structure. A title bar at the top, a left navigation portfolio and a content page on the right. Open mymx1.html with a text editor and update the two URLs with your Maximo server hostname to match your environment. Note how the portalmode parameter is passed in the URLs and how the IFRAME element is used to embed the frame in the web page.
Save the file, open it with a web browser. If you click on one of the two links on the left you will be prompted with the Maximo login page and then taken to your SR application. Here is how it will look like.

You can see some good and bad things.
  1. The Go To menu, graphics and other stuff on the top bar are hidden (good)
  2. Playing with URLs you can easily define shortcusts to Maximo apps (good)
  3. The buttons are somewhat scrambled on the right side (bad)
  4. The application is truncated on the righ side (bad)
  5. The login page is displayed (bad)

Now we have to keep the good things and avoid the bad ones. Issues 3 and 4 can be solved customizing the SR app. Issue 5 can be solved implementing SSO.

Simplify the SR application

Open the Application designer and create a new Power App based on SR object.
  • Application: MYSR
  • Description: Simple SR app for the Intranet
  • Main Object: SR
  • Key Attribute: TICKETID
  • Module Name: SD

Remove unneeded fields from the MYSR app. Remove the pageHeader, pageFooter and menubar rows in the XML file to remove the headers and footers. Import back the MYSR app and test it. The simplified app will not allow any navigation but that's exactly what we are looking for.
For your convenience, here is my streamlined MYSR app definition.

Avoid the login page

In your intranet portal you probably already have your login page and it is not fair nor elegant to ask the users to login again into Maximo.
Here you need to implement SSO (Single Sign On). It's not the goal of this article to explain how to implement SSO between a web site and Maximo so we will simulate it. If you need more details about implementing SSO for Maximo you look at this forum thread.
As decribed in this article, login credentials can be passed in the URL so all you have to do to do the trick is to pass those credentials in the links.

Putting all together

Change the link in the HTML file to load the new MYSR app and pass the user credentials as described above. You will have links like this:

And here is the final result!

June 18, 2013

Maximo Integration Framework features

This entry is part of the Maximo Integration Framework series.

How many times you have asked yourself: Should I upgrade?
Maximo Integration Framework has been improved a lot in the recent versions and fixpacks. Look at this list of features and you may find a good reason to upgrade.
  • OSLC - Link and share data by using OSLC integration (Open Services for Lifecycle Collaboration)
  • EMail interaction - Enabling email updates for objects and workflow assignments
  • REST API - Support for Object Structures and MBOs as REST Resources
  • Text JMS messages - Support for messages in a TEXT format
  • Publish Channel Eventing - Improved support for capturing events from a child object within an object structure
  • Application-based Importing and Exporting - Provide importing and exporting capabilities directly from an application such as WO, PO, Asset etc.
  • Support for Application Authorization - Inbound message processing using authorization from an application
  • Web Services via the Application Server - Support for JAX-WS leveraging the application server’s container.  Allows for support of WS policies such as WS-SECURITY, WS-ADDRESSING, etc.
  • BIDI Support - Support for Bi-Directional content within integration messages
  • Attachments - Support for including attachments on integration messages
  • WorkFlow - Support for initiating/waking up a work flow process via integration
  • Nulling Fields - Support for nulling out fields from files and/or interface tables
  • View/Delete Queue - UI dialog to view/delete queue messages
  • Web Service Interactions - Provide wizard-based UI to build interaction from Maximo to external web service
  • Message Reprocessing - Data Import of large files offers ability to manage messages in error via a file
  • Data Import - Enhanced features for Preview Mode functionality
  • Action Class to support initiating an invocation channel - Pre-built Action class provided to support invocation channel execution
  • Integration Query - Support of a SQL WHERE clause

June 17, 2013

Syncing data with an external system using a Publish Channel

This entry is part of the Maximo Integration Framework series.

Publish Channels in MIF allows to send daya to external systems using a variety of protocols. In this article I will demonstrate how to automatically export new or updated assets into CSV/XML files. Those files can then be processed by an external application to perform additional logic or to replicate the assets.

Create an Integration Object Structure MYASSET and add the ASSET object as source.

Remember to select 'Support Flat Structure' if you need CSV export.

Now create the Publish Channel MYASSETS.

Create an External System (or reuse your own) and add the MYASSETS Publish Channel to it.

Enable Publish Channel and test that everything is ok using the 'Data Export' button. A CSV file should appear in few minutes in your MIF output folder (see mxe.int.globaldir system property). If you have problems check the JMS queues, JMSQSEQCONSUMER crontask and anything that may block the publish channel functionality.

To automate of the XML/CSV file when an asset is created or updated, you have to enable the event listener on the Publish Channel. Open the MYASSETS Publish Channel and select the Enable Event Listener menu action.
Now open an asset, change its description and save it. This should automatically trigger the invocation of the Publish Channel and you will see a new file in the MIF directory with the updated asset.

June 11, 2013

SCCD 7.5 and Maximo 7.6 user interface System Properties

SmartCloud Control Desk 7.5 and Maximo 7.6 have introduced new UI skins and navigation behavior.

There are four new System Properties which control the left navigation pane and other related visual attributes.
  • mxe.webclient.homeButtonHeaders - Moves Goto menu to left of the screen and adds Start Center button to the header
  • mxe.webclient.systemNavBar - Enables the lefthand navigation
  • mxe.webclient.tabBreadCrumbs - Removes tabs from list view
  • mxe.webclient.verticalLabels - Sets label above each input field
The skin can be selected setting the mxe.webclient.skin property: tivoli09 is the default 7.5 skin, tivoli13 is new skin.

June 10, 2013

Set a field as required after save

This entry is part of the Maximo Java Development series.

You may have noticed that there are some fields that cannot be modified once an object is saved. An example of this behavior is the ASSET.ASSETNUM field. When you create a new asset you can set it's ID but once you have saved it it cannot be modified.
In this little post I'll show you how to implement this behavior for other fields.

Let's pretend we want to avoid any modification to the original asset serial number once the asset is created.
The Mbo.toBeAdded() method allows to detect if the current Mbo has been already saved or not. The Mbo.setFieldFlag() method allows to set a field as required. You just have to override the init() method of the Mbo put the appropriate logic.

public void init() throws MXException

  if (!toBeAdded())
    setFieldFlag("SERIALNUM", READONLY, true);

The Mbo.setFieldFlag() method allows to set many fields in one shot so a very common technique is to define two arrays of strings to define the lists of attributes to be set as readonly. Look at the following example.

static String alwaysReadOnlyFields[] = {"ORGID", "SITEID"};
static String readOnlyAfterSaveFields[] = {"SERIALNUM", "PRIORITY"};

public void init() throws MXException

  setFieldFlag(alwaysReadOnlyFields, READONLY, true);

  if (!toBeAdded())
    setFieldFlag(readOnlyAfterSaveFields, READONLY, true);

June 9, 2013

How to set the date format in Maximo

To set the date format in Maximo, you use the setting.DISPLAYDATE system property from the System Properties application.
When you enter a date format for this property, it overrides any system settings for displaying date formats in Maximo

If you do not set the system property with DISPLAYDATE, then the display format is based on the profile information (under Profile - Default Information). This setting determines the display date format for this specific user.
This setting is used only if the system property setting.DISPLAYDATE is not set.

If the display date format is not set within Maximo, the format is based on the language setting of the web browser that is used to access Maximo.


June 7, 2013

Maximo add-ons, plugins and extensions on ISM Library

ISM Library is an IBM website where you can find addons, plugins and extensions available for all IBM products including Maximo.

I really think it is worth spending 5 minutes of your time to look at what extensions are available. Here is the link that will take you directly to the list of solutions available for Enterprise Asset management (EAM): https://www-304.ibm.com/software/brandcatalog/ismlibrary/search#rc=AssetManagement:Asset%20Management
I also suggest you to sort results by 'most viewed' to find the most popular solutions.

You will see my Android App for IBM Maximo Everyplace solution at 15th ranking.

June 6, 2013

Return vs. Move Asset - When to use which

There is a common misconception in Maximo on when to use the return item transaction or a move asset transaction.

The return item transaction should be used when an item has been consumed by a GL entity, but for one reason or another, the item was not necessary and therefore needs to be returned to the storeroom at its full issued value. Again, a return is to negate an issue transaction.

The move asset functionality should be used in the case where the user wishes to capture the fact that an asset has moved from one location to another. This means a transfer of value.
In the case of a traditional equipment asset, the value of the asset literally moves from the GL of one location to the GL of another. In the case of rotating assets this still holds true, however the inventory costs associated with that asset are also tracked within the Rotating Suspense account. At the time the rotating asset is moved into an inventory location, any transactions that were written to the Rotating Suspense account will then be transferred to the storeroom’s control account. Additionally, MAXIMO will adjust the average cost.

This has been extracted from Rotating A​sset Accou​nting by Kevin Buonagurio.

June 5, 2013

MaximoDev Blog Facts and Stats (May 2013)

After more than 3 years of blogging I think it's worth sharing some statistics about my blog.