TCP/IP Tuesday

Maximo is a web application and like all web applications it exchanges data over common network protocols such as HTTP. When debugging performance related issues or attempting to diagnose issues with web services it is important to understand at least at a high level the underlying technologies at play.

IP, TCP, and HTTP Overview

IBM Redbook: TCP/IP Tutorial and Technical Overview

Tools used for debugging issues:

The following tools provide listen for changes on the network layer and allow you to see what was exchanged and debug any issues. Fiddler is a high level tool whereas wireshark is much lower level and more verbose. Fiddler can be also be used as a reverse proxy and is mandatory for any web service development.

Fiddler
Wireshark

Redirect / to /maximo

By default Maximo is deployed to the http://servername/maximo url. When the user types in http://servername they will be presented with a generic IBM page. To enable automatic redirection add the following lines to the httpd.conf in the IBM http server.

RewriteEngine On
RewriteRule ^/$ /maximo

IBM Redbooks on your Tablet

IBM has posted new apps for iOS/Android to make it easier to read/view the Redbooks on your tablet. Redbooks are a fantastic source of Maximo, Websphere and other information.

Android

iOS

Link

Roll back the PM when Cancelling a Work Order using Workflow

Roll back the PM when Cancelling a Work Order using Workflow

Workflow suppresses common dialogs. How can you reinstate a PM when the work order is cancelled using workflow?

NEW IBM Education Assistant videos released for Maximo Asset Management v7.1, v7.1.1 and v7.5

New training videos, compliments from our friends at IBM:

– Database upgrade process overview – Maximo 6.2 to 7.5 http://ow.ly/tfehK
– Clone a Maximo 7.1.1 administrative workstation http://ow.ly/tfezo
– Clone a Maximo 7.5 administrative workstation http://ow.ly/tfepw
– Using the report list portlet in Maximo Asset Manager V7.1 http://ow.ly/tfeIX
– Using the report list portlet in Maximo Asset Manager V7.5 http://ow.ly/tfeR0
– How to use HARD and SOFT reservations in work order tracking http://ow.ly/tffkw
– Logging and Log Files Part 1 http://ow.ly/tgIAZ
– Logging and Log Files Part 2 http://ow.ly/tgIFT
– Logging and Log Files Part 3 http://ow.ly/tgIMK
– Escalations http://ow.ly/tgJx6

If you still want more visit their youtube channel: http://www.youtube.com/watch?v=6rqUsKSebVQ&list=PL9EEUnUZCG-VF_–wColkoKqpOzKYJZy0

Error when using Import Preview on large datasets

When using the MIF to import large numbers of records sometimes you will get a “Internal Server Error”. This is the the webserver timing out.

image

Fortunately this can be resolved by increasing the timeout of the Websphere HTTP Plugin. IBM has instructions.

Customizing Maximo: Java vs. Automation Scripts

Maximo 7.5 provides considerable methods to be configured and modified from screens, lookups and integrations. After exhausting the out of box configuration methods it can be extended with custom code in 2 days: Java and Automation scripting. To make things even more interesting, Automation scripts can be done in a variety of languages most commonly (but not limited to) Python and Javascript. Java customization is implemented via dependency injection at runtime. In this article I’m going to examine the pros and cons of each and examine common use cases. Working on different projects with different groups there is a lot of misconception of the capabilities, strengths and weaknesses of different ways to customize Maximo in regards to implementation, support and product upgrades and fix packs. The goal is not to advocate a solution but to educate, inform and spur discussion. Generally Automation Scripts are better for small projects or very basic customizations and Java for everything else. Fortunately both technologies are not mutually exclusive and play well together.

Tools:

  • Java provides mature and flexible tools. The Eclipse platform provides code completion, remote debugging, refactoring, static typing and access to mature build systems and automated testing. Java customizations can be organized into shared libraries and packages
  • Automation Scripts use standard Python development IDEs such as PyCharm. The IDEs will provide limited code completion, error checking and syntax highlighting
  • Java has far more capable, flexible and powerful tooling, but it can require significant effort to setup a project and configure the tools. Complex Maximo projects will benefit greatly from the access to the mature toolset
  • Automation Scripts in contract require virtually zero time to setup. Small projects, prototypes can be built and deployed in short turnaround. Complex or a large number of scripts will conversely be more difficult to implement, maintain and debug without the mature toolsets
  • Java tooling is superior for nearly all but the simplest implementations

Deployment:

  • Java deployment requires registering the custom Java class, compiling, packaging and redeploying the Maximo EAR. Redeploying the Maximo EAR requires taking the system offline
  • Automation Scripts can be deployed online without any outage. Automation scripts can be deployed in a variety of ways such as Migration Manager or manual deployment
  • Automation Scripts are easier, faster and simpler to deploy in nearly all instances than Java

Field Customization:

  • Automation Script (Attribute Point) customization will be triggered after the data in the field changes. Can be used to trigger additional logic such as updating another field or validation
  • Java allows for everything automation scripts in addition to lookups, initialization of non-persistent fields
  • Java allows initializing field classes such as non-persistent lazily, only when shown on screen. To accomplish the same functionality with Automation script the field needs to be initialized in the MBO class which gets called whenever MBO is initialized. This can have a significant performance impact
  • Automation Scripts has one significant feature that Java does not. A single script can be applied to many attributes. The input variables can be modified. To accomplish the same functionality in Java would require customizing many classes if the parent class is not the same

MBO Customization:

  • Java allows significant customization to MBOs and MBOSETs to all aspects of initialization, validation and functionality
  • Automation Scripts allow customization to an individual MBO when it is created, deleted, loaded or saved. Field level initialization should not be performed when MBO is loaded as described in field customization

Workflow Customization:

  • Java allows customizing all aspects of workflows such as Actions, Roles and custom dialogs
  • Automation Scripts allow customizing workflow Actions. Within Action customization there is little difference

Support and Maintenance:

  •  There is no difference between support of Automation Scripts and Java. Both require experienced developers familiar with the Maximo API
  • Both Automation Scripts and Java provide full access to the Maximo API and give you equal amount of leverage to extend and improve the product to meet your needs or rope to hang yourself
  • Well designed customizations in either Java or Automation Script will not cause any issues with upgrades. Poorly designed Java/Automation Script customizations can create bugs, upgrade, poor performance or cause the system to crash

 

What is the difference between Maximo Fix Pack, iFix and Hotfixes?

IBM distributes three types of releases to its Maximo product: Fix Packs, Interm Fixes and Hotfixes. I can’t be the only one who gets confused about the differences. IBM has posted a 2 part series explaining the differences. Official fix packs (7.5.0.5, 7.1.1.12) are the most stable/tested and released twice a year. Fix packs will often contain new features. Interm fixs are bug fixes only released more frequently than Fix Packs. Hotfixes are request only untested one off fixes released to customers. Generally Hotfixes should only be applied in emergency scenarios when a Fixpack is not available.

Part 1 : What you always wanted to know about hotfixes…

Part 2: What are Fixpacks, Interim Fixes and Limited Availability Fixes?

Maximo MIF – Enterprise Service Rules

Maximo has a powerful integration framework called the MIF. Often when integrating with external systems you need to apply certain rules or transformations to the incoming or outgoing data. Basic transformations can easily be performed without having to resort to writing code.

CHARTOFACCOUNT (COA) is a common integration. Maximo 7.5+ determines whether a given COA record is able to be used on records based on its ACTIVEDATE/EXPIRYDATE fields. In Maximo the Active flag is readonly and updated based on the Active and Expiry dates.

1

The incoming integration needs to replicate the rules in the GUI which means they will provide ACTIVE/EXPIRY dates.

If COA is ACTIVE:

  • ACTIVEDATE=Now

  • EXPIRYDATE=(Null)

If COA is INACTIVE:

  • ACTIVEDATE=Now

  • EXPIRYDATE=Now

If the external system Maximo is integrating with only has boolean ACTIVE/INACTIVE we can replicate the above logic with integration rules in the Enterprise Services application.

2

Create 2 new integration rules:

On Activate:

  1. RULE = SETACTIVE

  2. ACTION = SET

  3. [Add/Modify Conditions]

    1. FIELD = ACTIVE

    2. EVALUATION TYPE = EQUALS

    3. EVALUATE WHEN = ALWAYS

    4. VALUE = 1

  4. [Sub-Record Fields] – Create all 3

    1. FIELD = ACTIVEDATE

    2. REPLACEWHENNULL = [Checked]

    3. VALUE = &SYSDATE&

    1. FIELD = EXPIREDATE

    2. REPLACEWHENNULL = [Checked]

    3. VALUE = [Null]

    1. FIELD = ACTIVE

    2. REPLACEWHENNULL = [Checked]

    3. VALUE = [Null]

3 4

On Deactivate:

  1. RULE = SETINACTIVE

  2. ACTION = SET

  3. [Add/Modify Conditions]

    1. FIELD = ACTIVE

    2. EVALUATION TYPE = EQUALS

    3. EVALUATE WHEN = ALWAYS

    4. VALUE = 0

  4. [Sub-Record Fields] – Create all 3

    1. FIELD = ACTIVEDATE

    2. REPLACEWHENNULL = [Checked]

    3. VALUE = &SYSDATE&

    1. FIELD = EXPIREDATE

    2. REPLACEWHENNULL = [Checked]

    3. VALUE = &SYSDATE&

    1. FIELD = ACTIVE

    2. REPLACEWHENNULL = [Checked]

    3. VALUE = [Null]

Now the external system can update the Maximo COA by simply setting the ACTIVE=1/0 and not have to worry about the activate and expiry dates. A basic web service can be tested with the following:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:max="http://www.ibm.com/maximo">
<soapenv:Header/>
<soapenv:Body>
<max:SyncMXCOAInterface>
<max:MXCOASet>

<max:CHARTOFACCOUNTS>

<max:ACCOUNTNAME>Test Account</max:ACCOUNTNAME>
<max:ACTIVE>0</max:ACTIVE>

<max:GLACCOUNT>
<max:VALUE>A.B.C</max:VALUE>
</max:GLACCOUNT>

<max:GLCOMP01>A</max:GLCOMP01>
<max:GLCOMP02>B</max:GLCOMP02>
<max:GLCOMP03>C</max:GLCOMP03>

<max:ORGID>ATH_THRM</max:ORGID>

</max:CHARTOFACCOUNTS>
</max:MXCOASet>
</max:SyncMXCOAInterface>
<!--<span class="hiddenSpellError" pre=""-->soapenv:Body>

Extending Maximo with product.xml

Maximo has a rich framework that allows extensions to MBOs and fields using Java classes. Unfortunately whenever updatedb is run for a new product addon or fix pack install the modifications will be undone. Alexandr eQuinteiro has posted a guide on usage of the product.xml file: Extending Maximo using Java Classes – Product XML and Extension