• Adi Jaradat

IBM Maximo 7.1 Birt Reports and Chrome

Updated: Feb 25

Its tricky situation when a client with an older version of Maximo is trying to upgrade their browsers and yet maintain backwards compatibility. This situation is particularly interesting when a client is, for relatively valid reasons, is trying to use a newer version of Chrome or any WebKit-based browser (including Edge) and is facing issues when using an older version of Maximo running Birt reports.


In this particular case, the major complaint was regarding BRIT reports! BIRT reports just won’t run and the following not-so-useful message is shown.

Error Message thrown when trying to run Birt reports using Chrome with an older version of Maximo, in this case 7.1

Error Message thrown when trying to run Birt reports using Chrome with an older version of Maximo, in this case 7.1

Digging into this reveals an obvious cause; in this client’s particular environment, the widely known prototype.js library is being referenced. The utterly old version of the famous JavaScript is not to be blamed here but at the same time updating the library to a newer version will impose serious challenges.

/*  Prototype JavaScript framework, version 1.4.0
 (c) 2005 Sam Stephenson sam@conio.net
 *
 THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please diff
 against the source tree, available from the Prototype darcs repository.
 *
 Prototype is freely distributable under the terms of an MIT-style license.
 *
 For details, see the Prototype web site: http://prototype.conio.net/
 *
 /--------------------------------------------------------------------------/  

Further investigating the issue reveals the exact exception being thrown.

Viewing Maximo Birt Javascript error message using Chrome developer tools console

Viewing Maximo Birt Javascript error message using Chrome developer tools console

Lets go to prototype.js:683 and start looking around.


Bug tickets were filed for Chromium and Eclipse and it’s caused by certain application servers (WebSphere and WebLogic included) failing to deal with Content-Type sent by WebKit based browsers.


Looking at the code and sure enough lines 668 and 669 in prototype.js are cause. It worth to mention that those lines of code were correct and valid at the time of developing this Javascript library, however, as internet browsers evolve things which used to be valid or allowed may no longer remain so and prototype.js has kept up with this trend. Of course the main cause for this incompatibility is the outdated version of Maximo and the bundled Birt.

Debugging Maximo Birt prototype.js using chrome developer tools

Debugging Maximo Birt prototype.js using chrome developer tools

A possible work around is to allow WebKit based browsers to send the correct content type without explicitly defining the Content-Type header.

Hot-replacing Maximo Birt prototype.js code lines using chrome developer tools

Hot-replacing Maximo Birt prototype.js code lines using chrome developer tools

You will probably need to update, while fully comprehending the risk, \web\webcontent\birt\ajax\lib\prototype.js. This legacy JavaScript file can be found in com.ibm.tivoli.maximo.report.birt.viewer_1.0.0.jar.


Keep in mind that you will need to update the JavaScript library and place it back into the Birt View JAR file. The updated JAR file needs to be updated in your source repository. Additionally, you can update the cached version of the JAR file by the Application server (WebSphere), just search for the JAR file name and replace all occurrences after backing up the original file.


Users will also need to clear their browser cache to make sure that no residual old JS file is being used when accessing the report.


Links

https://adijaradat.com/post/creating-maximo-generic-iframe-custom-component/

http://prototypejs.org/

https://bugs.chromium.org/p/chromium/issues/detail?id=44438

https://bugs.eclipse.org/bugs/show_bug.cgi?id=310512#c6

4 views0 comments

Recent Posts

See All

Maximo Where Clause

Where clauses are used in Maximo intensively, such as in relationships and search, with a few tricks where clauses can do more than just sea