THE BPD Blog

From blogs to case studies to news, we love sharing our tips and tricks for asset management, cloud, IoT and smarter operations.

by | May 31, 2017

The Dangers of DOCLINKS and Integration

It is possible to Import and Export attached documents (DOCLINKS) records using the Maximo Integration Framework (MIF). However, care needs to be taken to ensure that these messages don’t cause problems.
Maximo controls the size of a single DOCLINKS record (using System Properties mxe.doclink.maxfilesize and mxe.int.doclink.maxfilesize), but there is nothing in place to restrict the number of records that can be attached to a single Maximo Record (e.g. Workorder, Location, etc.) This means that there is no limit to the maximum size of the set of associated DOCLINKS records. This is not a problem during the normal operation of Maximo as the attachments are accessed one at a time, but it can lead to issues when interfacing to other systems.
For Example:
There is a WORKORDER in Maximo with 200 x 10Mb DOCLINKS records attached to it. 10Mb is the default value for the System Properties. This means that there are 2000Mb of files associated with the WORKORDER.
An Object Structure is setup in the following configuration:

and this is linked to a Publish Channel with the Event Listener Enabled.
When the WORKORDER record is saved, the event listener fires and tries to generate an XML file containing the details of the WORKORDER, as well as a BASE64 Encoded representation of all the files referenced by the DOCLINKS records. This could result in a file that is potentially larger than the size of the original files combined due to the nature of the BASE64 Encoding.
The generation of this message causes the WebSphere Application Server to crash and restart as before it writes the XML data to a file, it must first build it in Memory. So the simple act of saving a single WORKORDER can cause the whole Application Server to crash.
Another potential outcome from this operation is that the Application Server is capable of building the XML in Memory, but when it writes the message to the JMS Queue, it either fills up the Message Store or causes the Messaging Engine to crash. The same problem could also occur when inbound messages are presented to Maximo.
A potential solution to this problem can be handled through the design of the Object Structure used by the Publish Channel. If it is switched round so that DOCLINKS is the Primary Object and WORKORDER is a Secondary Object associated with it:

When the DOCLINKS record is saved, the event listener fires and the XML file that is attempted to generate will now be approximately the size of the value set in the System Property (by default this will be around 10Mb). This shouldn’t cause problems for the Application Server or the Messaging Engine. The file will also be much easier to handle by whatever the External System is at the other end of the interface, be it Biztalk or even another Maximo System.
The change in approach to the interface can sometimes break the required business rules that are in place. Sometimes you only want the WORKORDER and associated DOCLINKS to be sent out once the WORKORDER is set to the APPR status. If the interface is changed so that it will fire when the DOCLINKS record is saved, then this could cause the records to not be sent across if they were added before the WORKORDER status reached APPR. If this is the case, then a different approach needs to be taken, but it is still possible using the following steps:

  • Create Object Structure with DOCLINKS as Primary and WORKORDER as Secondary
  • Associate this Object Structure with a Publish Channel, but ensure that the Event Listener is disabled
  • Edit the associated Java Class for the WORKORDER Object (the same could be achieved with a Object Launch Point Automation Script associated with the WORKORDER Object) so that the following logic is triggered when the record is saved and the STATUS has changed to APPR
    • Using the desired relationship to get hold of the DOCLINKS set from the WORKORDER loop through each of the records
      • For each record trigger the Publish Channel in code

An example snippet of code for this would be:
doclinksWith a bit of consideration to the design of the interfaces, this problem can easily be avoided.

If your organization needs help understanding the dangers of DOCLINKS and integration, please contact us.

Marc Jenkins

Marc Jenkins

0 Comments

Asset Management for Net-Zero Futures

Asset Management for Net-Zero Futures

Sustainability is not a new concept and BPD Zenith have always strived to be socially responsible, however, it is a critical imperative for today’s business operations – and for the planet... There has been a shift from using digital to improve the bottom line, to...

The Hidden Value of CMMS Master Data

The Hidden Value of CMMS Master Data

Having made a significant investment in your CMMS, advances in Data analytics are prompting rethinks about the Master Data that underpins your ability to launch programs such as Asset performance management, Monitor Asset health and enhance Predictive Maintenance. A...

Meet the Team – Sourabh Jain

Meet the Team – Sourabh Jain

1. What is your position at BPD Zenith? My name is Sourabh and I’m currently a Senior Maximo Consultant at BPD Zenith, Sydney. 2. What led you to choose this career path? What alternative career path would you have chosen and why? When I was studying programming for...

Maximo 7.6 to 8.x transition

Maximo 7.6 to 8.x transition

It's challenging to keep up with technology and we understand from a customer perspective it’s much harder to keep up with consistent upgrades and technological changes. But it’s good to see Maximo journey from client server platform (MX4) to Web Application(MX6) and...

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

Come with BPD Zenith to the future of Asset Management

Partner Ecosystem

BPD Zenith partners with a diverse array of the world’s top Technology, Business and Solution Integration leaders.