IBM Support

Event Propagation 'issue' in the Maximo Integration Framework

Technical Blog Post


Abstract

Event Propagation 'issue' in the Maximo Integration Framework

Body

With the release of Maximo 7.5, we introduced a feature in the Integration Framework to propagate events on a child object to the parent and generate outbound transactions.

The goal of this feature was to allow customers to generate outbound transactions when a change is made to a child object on an object structure when it is changed in the parent objects application.   

Recently in Support we encountered customers attempting to use this feature to group objects that are not related to one another in the context or the same application  - lets take this simple example. 

First, create an Object Structure with ASSET as the parent, ITEM as the child with relationship ASSET_ITEM, make sure the event propagation is configured. 

Then, create an event enabled Publish Channel and add it to an active External System

Now if you open the "Item Master" application and find an Item that has an Asset associated, then make a change to that Item which will trigger the event propagation, the propagation will not work - you'll see the following message in the log with the Integration logger dialed up to Debug:

"nullcomparing relations - event relation = null os relation = ASSET_ITEM"

Because in the world of the "Item Master" application there is no parent Asset object so the relationship cannot resolve.

So, what can we do?  

Question

What do I need to change so that changes to the child object in an object structure always send out transactions?

Cause

The top-level object in the object structure must also be the top-level business object in an application's MBOSet in order for the child business object to trigger the event.

When you create an object structure such as:

MAINOBJECT

CHILD1

CHILD2

Once you enable the event listener in the Publish Channel for MAINOBJECT, and check the box to propagate events for all of the children, the child events will only propagate to MAINOBJECT when MAINOBJECT is the top-level object in the set of business objects instantiated by the application.

An application which is designed to load one MAINOBJECT and then one or more CHILD1 or CHILD2 objects will work with this object structure. A change to CHILD1 will propagate up to MAINOBJECT and trigger the event on MAINOBJECT and the outbound transaction.

An application which only loads CHILD1 objects and does not include MAINOBJECT will not work. Changes to CHILD1 will cause the propagation mechanism to look for MAINOBJECT, but there is no MAINOBJECT business object loaded, so the event on MAINOBJECT cannot be triggered.

Answer

There are two ways to resolve this:

1. Redesign the applications so that the MAINOBJECT is loaded and CHILD1 and CHILD2 are then loaded under it.

2. Create object structures for each instance of the child object, such as:

Object Structure 1

CHILD1

MAINOBJECT

CHILD1

CHILD2

Object Structure 2

CHILD2

MAINOBJECT

CHILD1

CHILD2

This means you must also modify your external system to accept both formats and remove or ignore the top-level CHILD1 elements so that the result is

MAINOBJECT

CHILD1

CHILD2

This solution may not work in all instances and should be tested for the object structure in question.

[{"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Product":{"code":"SSLKT6","label":"IBM Maximo Asset Management"},"Component":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"","Edition":"","Line of Business":{"code":"LOB59","label":"Sustainability Software"}}]

UID

ibm11133055