Add Work Log Functionality to other Maximo Objects

The Work Log is a great piece of functionality added to Maximo in version 6. It provides a chronological and historical view of notes captured against a Work Order or a Service Request. In previous versions, the record’s long description field was the only mechanism for capturing notes. Now, the Work Log allows for better organization of notes – specifically how notes were captured, displayed, and reported on. As versions of Maximo progressed over time, more applications began adopting Work Logs to organize notes. Work Logs are now present in Purchase Requisitions, Purchase Orders, and other record types. However, Work Logs are not present everywhere in Maximo… yet.

This article will describe how to configure Work Logs for other record types, so that they too can have the benefit of organized, chronological notes. In this example, we will add Work Logs to Location records in Maximo.

EDIT: This solution works for site-level parent objects, such as Locations. Organization-level parent objects, such as Companies, will throw an exception as they do not have a SITEID attribute in their table definition.

Step 1: Check Field Lengths

The WORKLOG table has a field called RECORDKEY that is used to store the key attribute information for the related record. In the case of Work Orders, the WONUM field is stored as the RECORDKEY. In the case of Service Requests, the TICKETID is stored as the RECORDKEY.

As we are configuring Work Logs for Locations, we need to store the LOCATION field as the RECORDKEY in the WORKLOG table. Before doing so, let’s make sure that the field length of the WORKLOG.RECORDKEY is at least as long as the LOCATIONS.LOCATION field, to prevent character length issues down the line.

  1. Log into Maximo as an administrative user
  2. Navigate to the System Configuration > Platform Configuration > Database Configuration application
  3. Locate the LOCATIONS object, then navigate to the Attributes tab
  4. Locate the LOCATION attribute, and note its field type and length
  5. Navigate back to the List View, locate the WORKLOG object, then navigate to the Attributes tab
  6. Locate the RECORDKEY attribute, and note its field type and length
  7. Update the Length attribute to be at least as long as the length of the LOCATIONS.LOCATION field, if necessary
  8. Save the record and perform the Database Configuration steps, if necessary

Step 2: Add New Relationship

We will need to relate the LOCATIONS table to the WORKLOG table via a relationship in Maximo. This relationship will be used as part of the subsequent configuration to display Work Log entries that are related to a given Location.

  1. Log into Maximo as an administrative user
  2. Navigate to the System Configuration > Platform Configuration > Database Configuration application
  3. Locate the LOCATIONS object, then navigate to the Relationships tab
  4. Click the New Row button:
    1. Name: WORKLOG
    2. Child: WORKLOG
    3. Where Clause: recordkey=:location and class=’LOCATION’ and siteid=:siteid
    4. Remarks: Relationship to the WORKLOG table, used to find all work log records for a given Location record. The resulting set will contain zero or more records.
  5. Click the Save button

Step 3: Add Screen Changes

This is where the fun begins! We need to add the Work Log screen details to our Locations application in Application Designer. The steps below can be simplified by copying and pasting the XML for the new Work Log screen details into the exported Location XML file, and importing the resulting file back. If you run into trouble, watch our YouTube video on how to perform these steps.

  1. Log into Maximo as an administrative user
  2. Navigate to the System Configuration > Platform Configuration > Application Designer application
  3. Locate the LOCATION application, then navigate to the Workspace tab
  4. Click the Export Application Definition button on the toolbar (ensure your popup blocker allows popups from the Maximo URL)
  5. Save the resulting XML file to a local or network drive
  6. Edit the LOCATION.XML file with your favorite text editor
  7. Add the following <tab> control to the document after the last <tab> control in the main tab group:
    <tab id="log_tab" label="Log">
    	<section border="true" id="log_section">
    		<sectionrow id="log_section_r1">
    			<sectioncol id="log_section_r1c1">
    				<section id="log_section_r1c1_1">
    					<multiparttextbox dataattribute="location" descdataattribute="description" id="log_section_r1c1_1_attr_1"/>
    				</section>
    			</sectioncol>
    			<sectioncol id="log_section_r1c2">
    				<section id="log_section_r1c2_1">
    					<textbox dataattribute="siteid" id="log_section_r1c2_1_attr_1"/>
    				</section>
    			</sectioncol>
    		</sectionrow>
    	</section>
    	<table id="worklog" label="Work Logs" orderby="createdate desc" relationship="WORKLOG">
    		<tablebody displayrowsperpage="18" filterable="true" id="worklog_tb">
    			<tablecol filterable="false" hidden="false" id="worklog_tb1" mxevent="toggledetailstate" mxevent_desc="Show Detail" sortable="false" type="event"/>
    			<tablecol dataattribute="recordkey" id="worklog_tb2" sortable="true">
    				<textbox id="worklog_tb2_1" menutype="hyperlink"/>
    			</tablecol>
    			<tablecol dataattribute="class" id="worklog_tb3" sortable="true"/>
    			<tablecol dataattribute="createby" id="worklog_tb4" sortable="true"/>
    			<tablecol dataattribute="createdate" id="worklog_tb5" sortable="true"/>
    			<tablecol dataattribute="logtype" id="worklog_tb6" linkedcontrolid="worklog_tb_details_sec17" sortable="true"/>
    			<tablecol dataattribute="description" id="worklog_tb7" sortable="true"/>
    			<tablecol dataattribute="clientviewable" id="worklog_tb8" sortable="true"/>
    			<tablecol filterable="false" hidden="false" id="worklog_tb_delete" mxevent="toggledeleterow" mxevent_desc="Mark Row for Delete" mxevent_icon="btn_garbage.gif" sortable="false" type="event"/>
    		</tablebody>
    		<tabledetails id="worklog_tb_details">
    			<section id="worklog_tb_details_sec1" label="Details">
    				<sectionrow id="worklog_tb_details_row1">
    					<sectioncol id="worklog_tb_details_row1_col1">
    						<section id="worklog_tb_details_row1_col1_1">
    							<textbox dataattribute="recordkey" id="worklog_tb_details_sec11" menutype="hyperlink"/>
    							<textbox dataattribute="class" id="worklog_tb_details_sec12"/>
    							<textbox dataattribute="createby" id="worklog_tb_details_sec13"/>
    							<textbox dataattribute="createdate" displaytype="DATETIME" id="worklog_tb_details_sec16"/>
    							<textbox dataattribute="logtype" id="worklog_tb_details_sec17" lookup="valuelist"/>
    							<checkbox dataattribute="clientviewable" id="worklog_tb_details_sec18"/>
    						</section>
    					</sectioncol>
    					<sectioncol id="worklog_tb_details_row1_col2">
    						<section id="worklog_tb_details_row1_col2_1">
    							<textbox dataattribute="description" id="worklog_tb_details_sec14" lookup="longdesc"/>
    							<richtexteditor dataattribute="description_longdescription" height="100" id="worklog_tb_details_sec15" width="660"/>
    						</section>
    					</sectioncol>
    				</sectionrow>
    			</section>
    		</tabledetails>
    		<buttongroup id="worklog_buttons">
    			<pushbutton default="true" id="worklog_newrow" label="New Row" mxevent="addrow"/>
    		</buttongroup>
    	</table>
    </tab>
    
  8. A couple of notes:
    1. If you are linking to an object other than Locations, be sure to change the header <section> control to reference the primary key of the object you are linking to.
    2. If you don’t want to allow for deletion of a row, or want to control deletion through a Signature Option, you can remove or modify the <tablecol> control with the toggledeleterow event.
  9. Save the LOCATION.XML file
  10. Import the LOCATION.XML file back into Application Designer by using the Import Application Definition button on the toolbar.

Step 4: Link the Records

In order for this to work, we’ll need to create a simple Automation Script to link the Work Log entry with its parent Location. This script will fire upon add of a new WORKLOG entry, and will populate the Record Class and Record Key fields on the WORKLOG table from the parent Location record. This ensures that the current Work Log entry is linked to the proper Location.

  1. Log into Maximo as an Administrative user
  2. Navigate to the System Configuration > Platform Configuration > Automation Scripts application.
  3. From the Select Action menu, choose the Create > Script option
    1. Script: WORKLOG.NEW
    2. Description: Work Log Script on Add
    3. Script Language: python
    4. Log Level: ERROR
    5. Active: Yes
  4. Source Code:
    ownerMbo = mbo.getOwner()
    if ownerMbo and ownerMbo.isBasedOn("LOCATIONS"):
        mbo.setValue("CLASS", "LOCATION", mbo.NOACCESSCHECK|mbo.NOACTION|mbo.NOVALIDATION)
        mbo.setValue("RECORDKEY", ownerMbo.getString("LOCATION"), mbo.NOACCESSCHECK|mbo.NOACTION|mbo.NOVALIDATION)
    

     

  5. Click the Create button

Step 5: Test the Solution

Now that it’s configured, it is time to try out our solution.

  1. Log into Maximo
  2. Navigate to the Assets > Locations application
  3. Find a Location that you would like to add a new Work Log entry against. In this case, we are looking at the ADDR201 Location from the Maximo Demo database.
  4. Click on the Log tab
  5. Click the New Row button
  6. Fill out the pertinent details
  7. Click the Save button

Congratulations! We have Work Logs on Locations. For a visual instruction of the previous steps, check out our video tutorial.

 

We love hearing from our readers!  Feel free to leave comments or feedback below.

 

Run an Automation Script from a Cron Task in Maximo

Cron tasks are jobs that run automatically on a fixed schedule within Maximo. They include important jobs such as the PM Work Order Generation Cron Task, the Inventory Replenishment Cron Task, and others.

There may be times when you come across some requirements where creating your own Cron Task provides the best solution. In previous releases of Maximo, it was required to write a custom Java class to perform the action of the Cron Task when the schedule came due. Therefore, many times we turned to Escalations to provide solutions where scheduled tasks were required.

In Maximo 7.6, you can now run an Automation Script directly from a Cron Task. This article will walk through how to configure this.

Step 1: Create a new Automation Script

  1. Log into Maximo as an administrative user.
  2. Navigate to the System Configuration > Platform Configuration > Automation Scripts application.
  3. From the Select Action menu, choose the Create > Script option.
  4. Populate the appropriate fields on your new script:
    1. Script: CRONSCRIPT
    2. Description: Automation Script called from a Cron Task
    3. Script Language: python
    4. Log Level: ERROR
    5. Source: print ‘Automation Script called from a Cron Task’
    6. Click the Create button to create the new script
  5. Press the Close button on the ensuing dialog
  6. Locate the new CRONSCRIPT script in the list, and open the script
  7. Update the Script Source as follows, and press the Save button when finished:
#######################
# Script to generate an SR for a monthly equipment audit
#######################
from psdi.server import MXServer

# Get the variables from the cron task arguments
srDesc = 'Monthly Equipment Audit'
srOwner = 'WILSON'
if arg:
    srDesc,srOwner = arg.split(',')

# Create the SR
srSet = None
try:
    srSet = MXServer.getMXServer().getMboSet('SR', runAsUserInfo)
    srMbo = srSet.add()
    srMbo.setValue('DESCRIPTION', srDesc)
    srMbo.setValue('OWNER', srOwner)
    srSet.save()
finally:
    if srSet:
        srSet.close()

#######################
# End of Script
#######################

 

A few things to note with this source code:

  • This script will create a new Service Request and populate the Description and Owner fields
  • Notice that there are a few implicit variables that Maximo creates for use in the script:
    • arg: This is a delimited list of arguments that you wish to pass into the script. We will show below how to populate the arguments when we create our Cron Task.
    • runAsUserInfo: This variable gives the script access to the user profile that the cron task is running as. This will allow you to fetch Mbo Sets or perform other tasks with a set of credentials.
    • instanceName: While this variable is not utilized in the above script, it represents the Cron Task Instance Name that the script is being called from. This could be useful in the cases where you have multiple cron task instances and need to distinguish which one is actively running.
  • You can utilize the MXServer.getMXServer().getMboSet() method to fetch MBO sets of any record set that the runAsUserInfo profile has access to. Please note the strategy for closing MBO sets when you are finished with them. This alerts the JVM that the object is ready to be garbage collected. It’s important to follow this strategy, or a similar strategy, to avoid potential memory leaks with the JVM.

Now that we have a script, we can create a Cron Task to call it.

Step 2: Create a new Cron Task

  1. Log into Maximo as an administrative user.
  2. Navigate to the System Configuration > Platform Configuration > Cron Task Setup application.
  3. Click the New Cron Task Definition button on the toolbar or under the Common Actions menu.
    1. Cron Task: MYCRON (give your cron task an appropriate identifier)
    2. Description: My Cron Task (give your cron task an appropriate description)
    3. Class: com.ibm.tivoli.maximo.script.ScriptCrontask (this is the key to the setup, the value is case sensitive and must be exact)
    4. Click the Save button
  4. Click the New Row button under the Cron Task Instances table
    1. Cron Task Instance Name: MYCRON01 (give your cron task instance an appropriate identifier)
    2. Description: My Cron Task Instance 01 (give your cron task instance an appropriate description)
    3. Schedule: 1M,0,0,0,1,*,*,*,*,* (this will schedule the task to run on the first of every month; use the schedule builder to select the schedule that you want your cron task to run on)
    4. Run as User: MAXADMIN (select the user that you want the cron task to run as)
    5. Active: Yes
    6. Click the Save button
  5. There should be two new parameters in the Cron Task Parameters table at the bottom of the page.
    1. SCRIPTARG: This parameter is used to pass in variables to the script. You can separate variables by a comma or other delimiter in order to pass in more than one variable to the script.
    2. SCRIPTNAME: This parameter tells Maximo which Automation Script to trigger when the cron task runs.
    3. Fill out the above parameters and click the Save button. The SCRIPTNAME parameter is required, but the SCRIPTARG parameter is optional.

At this point, the Cron Task is configured and ready to go. When the cron task runs it will call the script with the arguments specified in the parameters table.

If you have any trouble, or have questions on how this works, please leave feedback in the comments below.

 

Changing the hostname of a Maximo WebSphere Application Server

There may come a time when you need to change the hostname of your IBM Maximo WebSphere Application Server. This could be due to migrating the configuration to another machine, changing domain/subnet information, or copying a virtual machine for development purposes. Whatever the reason, this article aims to help get Maximo back up and running after a hostname change on the IBM WebSphere Application Server.

For example, let’s assume the old hostname is 172.31.36.36, and we want to change it to maximo.a3jgroup.com in a WebSphere v8.5.5 environment.

Step 1: Change the Host Name for the Cell Manager and Node

  1. Sign into the IBM WebSphere Application Server machine as an administrative user.
  2. Stop the IBM Cell Manager and Node Agent Windows Services if they are running.
  3. Open a command prompt as an administrator and navigate to the C:\IBM\WebSphere\AppServer\bin directory (substitute your WebSphere folder if necessary).
  4. Run the following command: wsadmin.bat -conntype NONE -lang jython
  5. At the wsadmin> prompt, issue the following command: AdminConfig.list('ServerIndex')
    This will list out the existing servers (typically the Cell Manager and Node). The results will look like:
    '(cells/ctgCell01/nodes/ctgCellManager01|serverindex.xml#ServerIndex_1)'
    '(cells/ctgCell01/nodes/ctgNode01|serverindex.xml#ServerIndex_1)'
  6. For each of the entries returned in the previous step, issue the following command:
    AdminConfig.modify('(cells/ctgCell01/nodes/ctgCellManager01|serverindex.xml#ServerIndex_1)', "[[hostName maximo.a3jgroup.com]]")
    AdminConfig.modify('(cells/ctgCell01/nodes/ctgNode01|serverindex.xml#ServerIndex_1)', "[[hostName maximo.a3jgroup.com]]")
  7. Save the changes by running: AdminConfig.save()
  8. Exit the wsadmin> prompt by running: exit
  9. Start the IBM Cell Manager Windows Service. This should enable you to log into the IBM WebSphere Console.

Step 2: Change the Host Name for the various Ports

  1. Sign into the IBM WebSphere Console as the wasadmin user.
  2. Open the Servers > Server Types > WebSphere application servers page.
  3. Click on the MXServer application server.
  4. Click on the Ports link under Communications.
  5. Click on each address that has the old hostname and change it to the new hostname. Click OK.
  6. Open the System administration > Deployment manager page.
  7. Click on the Ports link under Additional Properties
  8. Click on each address that has the old hostname and change it to the new hostname. Click OK.
  9. Open the System administration > Node agents page.
  10. Click on the nodeagent Node agent.
  11. Click on the Ports link under Additional Properties
  12. Click on each address that has the old hostname and change it to the new hostname. Click OK.
  13. Click the Save to master configuration file link.
  14. Synchronize changes back to the cell.
  15. Log out of the IBM WebSphere Console
  16. Restart the IBM Cell Manager Windows Service.
  17. Start the IBM Node Agent Windows Service.
  18. Depending on whether the MXServer application server is set to start automatically, you may need to log back into the IBM WebSphere Console to start it.

Maximo should now be running on a new host name!

Maximo email with Office 365

I’ve received a lot of questions lately about integrating Maximo with Office 365 for email notification purposes. Let’s take a moment to review the steps necessary to configure this for your organization.

Considerations:

  1. You will need to provide Maximo with a set of credentials that it will use as the “from” email address. All email coming from Maximo will need to utilize this address (more on that below). For the purposes of this tutorial, we are going to assume this configuration.
  2. Alternatively, you can configure a proxy in Office 365 to effectively create a mail relay situation. For example, you might configure a “donotreply@organization.com” address that can be used as the “from” email address that does not need to supply authenticated credentials.

IBM WebSphere Configuration

Office 365 works over SSL. In order for WebSphere to make a proper SSL connection to Office 365, we need to import the Office 365 SSL certificate into WebSphere’s trust store. This will make the connection trusted from WebSphere’s perspective and allow the connection to happen. WebSphere will throw an error if it attempts to make a connection to an untrusted source.

  1. Log into the WebSphere Console as an administrative user.
  2. Navigate to the Security > SSL certificate and key management screen.
  3. Click on the Key stores and certificates link.
  4. Click on the CellDefaultTrustStore link.
  5. Click on the Signer certificates link.
  6. Click on the Retrieve from port button.
  7. Fill out the following required fields:
    1. Host: outlook.office365.com
    2. Port: 993
    3. Alias: outlook.office365.com
  8. Click the Retrieve signer information button.
  9. Click the OK button.
  10. Click the Save to master configuration link.
  11. Once the node synchronization happens, log out of the WebSphere Console.
  12. For this change to take effect, the IBM-related Windows Services will need to be restarted (all Node Agents, the Cell Manager, and the HTTP Server).

Maximo System Properties

The next step is to configure System Properties within Maximo.

  1. Log into Maximo as an administrative user.
  2. Navigate to the System Configuration > Platform Configuration > System Properties application.
  3. Set the mail.smtp.host property to smtp.office365.com
  4. Set the mail.smtp.starttls.enable property to true
  5. Set the mail.smtp.ssl.enable property to false if it is not already false (default is false)
  6. Set the mxe.smtp.user property to the email address you wish all Maximo email notifications to come from (e.g. alex@a3jgroup.com).
  7. Set the mxe.smtp.password property to the Office 365 password for the above user. Please note that it’s also a good idea to check the Masked? checkbox for this property in order to keep the password value hidden in the Maximo user interface.
  8. Click the New Row button to create a new System Property. Fill out the following fields:
    1. Property Name: mail.smtp.port
    2. Description: Port number that the SMTP mail server listens on
    3. Global Value: 587
  9. Click the Save button.
  10. Check the box next to each of the properties above that you had to edit. Then in the Common Actions menu, click the Live Refresh button.
  11. Click the OK button.

Maximo Communication Templates

Each of the Communication Templates in the system must now have the Send From email address set to the same email address that was used to populate the mxe.smtp.user System Property.

 

Maximo Scheduled Reports

You may want to schedule reports to run from Maximo to be emailed to users or groups. Like all other email, the Send From address has to be the value that you configured in the mxe.smtp.user System Property. Unfortunately when Maximo schedules a report to be emailed, it uses the email address from the user that created the report schedule as the Send From address. This will cause most scheduled reports to fail.

The least intrusive solution that I’ve come up with is to create a user that has the same email address that was used to populate the mxe.smtp.user System Property, and then create an automation script to change the user at runtime of the scheduled report. This will allow the system to send scheduled reports via email.

  1. Ensure that you have a user account that has the same email address that was used to populate the mxe.smtp.user System Property.
  2. Navigate to the System Configuration > Platform Configuration > Automation Scripts application.
  3. From the More Actions menu, choose the Create > Script with Object Launch Point option.
  4. In the ensuing dialog, Create Script with Object Launch Point: Step 1 of 3, fill out the following fields:
    1. Launch Point: REPORTRUNQUEUE_LP
    2. Description: Report Run Queue Launch Point
    3. Object: REPORTRUNQUEUE
    4. Active: Yes
    5. Events: Save
    6. Save: Add and Before Save (see screenshot)
    7. Script: New
  5. Click the Next button.
  6. In the next step, Create Script with Object Launch Point: Step 2 of 3, fill out the following fields:
    1. Script: REPORTRUNQUEUE_SCRIPT
    2. Description: Report Run Queue Script
    3. Script Language: python
  7. Click the Next button.
  8. In the next step, Create Script with Object Launch Point: Step 3 of 3, fill out the following fields:
    1. Source Code:
from psdi.mbo import MboConstants mbo.setValue("USERID", "AWALTER", MboConstants.NOACCESSCHECK)

Be sure to substitute the User ID of your user for the AWALTER text in the example above. Click the Create button and you’re set!

That should enable you to utilize Office 365 as your email solution from Maximo. Please feel free to leave comments below.

New in Maximo 7.6: KPI Templates

With the launch of Maximo 7.6 came some enhanced functionality around KPI’s. Specifically, two new applications were added to the product: KPI Templates and KPI Viewer. This article will cover the features of how to utilize the KPI Templates application for your organization. For more information on the KPI Viewer application, please sure to visit our related blog article.

In previous versions of Maximo, users created and managed KPI’s through the KPI Manager application. There, they could define the queries that governed the KPI and the Target, Caution, and Alert thresholds. The reason the KPI Templates application was developed for version 7.6 was the challenge of efficiently managing slight variations on KPI’s through the KPI Manager.

For example, take the case of wanting to track the overall backlog of work by man-hours. That number by itself, trended over time, can provide some valuable insight to your organization. However, in most cases, it would behoove the people who analyze that number to know what the breakdown is by craft or crew. Unfortunately, the only way to know this is to create additional KPI’s with a slight change in the query. This can be done by duplicating the query and making the change, which is not overly difficult to do. The challenge comes when you have done this several times and then want to go back and make an adjustment to the query.

This is where KPI Templates come in. We now have an application that we can manage slight query variations in that can automatically generate the resulting records in the KPI Manager application. Let’s see an example.

  1. Log into Maximo as an administrative user.
  2. Go to the Administration > KPI > KPI Templates application.
  3. Create a new KPI Template by clicking the New Template button in the toolbar.
  4. Fill out the following fields:
    1. Description: Backlog Work Orders by Work Type
    2. Application: WOTRACK
    3. Format: Decimal
    4. KPI Query: select count(1) from workorder inner join synonymdomain on workorder.status = synonymdomain.value and synonymdomain.domainid = ‘WOSTATUS’ where synonymdomain.maxvalue not in (‘COMP’,’CLOSE’,’CAN’) and istask = 0 and worktype = ${worktype}
  5. Save the record.

The header section of the Template tab looks very similar to the KPI tab in the KPI Manager application, with one slight variation. Instead of separate Select and Where text boxes, there is a single text box for your KPI Query.

Within the KPI Query, you need to establish at least one variable that will be replaced in each KPI that is generated from the template. Variables are of the form ${variablename}. Variables will be replaced with string literals in the resulting KPI Query, so there is no need to quote them in the template query. In our example, we’ve created a variable called ${worktype}.

For each variable defined within the query, you will need to define a binding for that variable in the KPI Variables table. To continue with our example:

  1. Click the New Row button on the KPI Variables table.
  2. Fill out the following fields:
    1. Variable Name: worktype
    2. Object: WORKORDER
    3. Attribute: WORKTYPE
    4. Type: UPPER
  3. Save the record.

We now have bound the worktype variable to the WORKORDER.WORKTYPE field in Maximo.

The next step is to identify the possible values for your variable(s) and to establish the appropriate KPI targets for each variable value. This is done from both the KPI and Variable Values tables. To continue with our example:

  1. Click the New Row button on the KPI table. You’ll notice a new row has been added to both the KPI and Variable Values tables.
  2. Fill out the following fields in the KPI table:
    1. Target: 10
    2. Caution At: 15
    3. Alert At: 20
    4. Public: Yes
    5. Active: Yes
  3. Fill out the following fields in the Variable Values table:
    1. Value: CM
  4. You can validate the results of the query with variable substitution by clicking the Test Variable button in the KPI table.
  5. Save the record.

Next, perform the same steps as many times as you have variable values. In our example, we’ll create similar variables for EM and PM. Note that each time you click the New Row button in the KPI table, Maximo will automatically copy the values from the previous variable value. Highlight the appropriate KPI row to update your Variable Values.

Finally, we can turn our template into a series of KPIs.

  1. From the Select Action menu, choose the Generate KPIs option.
  2. Maximo will prompt you with the results. Press the OK button.

You can now navigate to the Administration > KPI > KPI Manager application and see your 3 new KPIs.

Please note that if you make changes to the KPI in the KPI Manager application that you may void the link with the template. Changes such as updating the Description or Select Clause of the KPI will result in the template no longer being able to update the KPI with changes.

To make a change to each KPI go back to your template. Let’s say you want to alter the KPI Query slightly by adding a woclass = ‘WORKORDER’ clause to the query. Simply alter your query, save the record, and choose the Select Action > Generate KPIs option. This action will generate any new variables into new KPIs, but also update existing KPIs.

I hope you enjoy this new application!

 

New in Maximo 7.6: KPI Viewer

With the launch of Maximo 7.6 came some enhanced functionality around KPI’s. Specifically, two new applications were added to the product: KPI Templates and KPI Viewer. This article will cover the features of how to utilize the KPI Viewer application for your organization. For more information on the KPI Templates application, please sure to visit our related blog article.

In previous versions of Maximo there were two ways to view KPI’s:

  1. In the KPI Manager application.
  2. On your Start Center.

The KPI Manager application in Maximo is intended to be for administrators of Maximo to create and manage KPI’s for all audiences. This application was not suitable to standard users of Maximo, both because of its complexity and due to licensing considerations.

The Start Center therefore is where the consumption of KPI information tended to take place in Maximo. The challenges with that were:

  1. Having too many KPI’s on the Start Center is both cluttering and a performance drag.
  2. Users are only able to view the KPI’s current value and see an indicator for its direction. No other historical information is provided on the Start Center.

This is where the KPI Viewer comes in. Users now have an application where they can access read-only versions of KPI’s that they have specifically been granted access to through their Security Group authorizations. In addition to being able to view current values and targets, users have full access to historical data, trends and graphs. A new added feature allows users to create an email communication directly from a KPI, and logs that email in the Communication Log tab within the application.

Let’s walk through accessing a KPI through the KPI Viewer application. We start with KPI Manager:

  1. Log into Maximo as an administrative user.
  2. Go to the Administration > KPI > KPI Manager application.
  3. Select an existing KPI.

There are a few things to notice here. First, pay attention to the Is Public? checkbox. Any KPI’s listed in the KPI Manager application with that flag checked will show up in the KPI Viewer application for every user of Maximo. This is a subtle difference from previous versions, where the Public flag meant that you could use the KPI on any Start Center Template.

Second, notice the Security tab. This tab is used to define which security groups can view which KPI’s. This is similar to assigning a KPI to a Start Center Template in previous versions.

The last thing to notice is the Long Description. This text is displayed in a prominent place in the KPI Viewer application when looking at a particular KPI, so it’s wise not only to fill out the Long Description, but to be as verbose as is necessary to convey the meaning and purpose of the KPI to your intended audience.

Next, we’ll navigate to the KPI Viewer application:

  1. Log into Maximo as an end user.
  2. Go to the Analytics > KPI Viewer application.
  3. Select an existing KPI.

The first thing you’ll notice is the Long Description of the KPI from the KPI Manager application. This is where we can give context to the readings for the consumer of the metric.

The next tab over shows Historical Trends. Finally! This is a feature that has long been available to administrators, but never to end users of Maximo. Users have the ability on the Historical Trends tab to view historical data in graphical or raw format (that can be downloaded into Excel for further manipulation).

 

 

Lastly, we now have the ability to generate a Communication (i.e. Email) from Maximo to other users, and capture that communication permanently as part of the KPI record in the system.

I hope you enjoy all of the benefits of the new application!

 

Maximo SSL (HTTPS) Configuration

I won’t get into a lengthy discussion about why you should use SSL to secure browser traffic. I’ll simply offer that your Maximo environment, especially if the environment can be accessed over the public internet, should be secured. Here are a few reasons:

  • SSL Encrypts Sensitive Information
  • SSL Provides Trust and Authentication
  • SSL Can Provide Compliance in certain Industries

The disadvantages are that it costs money to obtain and verify a certificate from a Certificate Authority, and it takes some time to configure. Hopefully, this blog post will help to reduce the amount of time necessary to configure SSL with Maximo.

Please note that you can also create a self-signed certificate which will suffice in forcing the browser traffic to be encrypted. However, users will see that the certificate is not trusted in the browser, and it might lead them to ask questions or not trust the connection.

This article will take you through setting up Maximo with SSL through a GoDaddy SSL Certificate, which is currently ranging anywhere from $50.00 to $300.00 annually based on the level of encryption, features, and number of sub-domains you want to secure. We will use the most basic single-domain option for this exercise.

Step 1: Create a Key Database and Generate a new Certificate Signing Request

Run the IBM Key Management Utility

  • Sign on to the server where the IBM HTTP Server is installed as an administrator.
  • Run the IBM Key Management Utility program from your Start Menu > IBM HTTP Server V8.5

Create a Key Database

  • Create a new Key Database File. This file will hold your private keys and must be kept secure:
    • Key database type: CMS
    • File Name: maximo.kdb
    • Location: C:\IBM\HTTPServer\ (provide an appropriate path for your system)
    • Click OK

Secure the Key Database

  • You will be prompted for a password to secure your new key database:
    • Enter a password
    • Confirm the password
    • Check the Stash password to a file checkbox
    • Click OK

Create a New Certificate Signing Request

  • Create a New Certificate Request from the menu options. This request, also known as a Certificate Signing Request (CSR), is what will be sent to the Certificate Authority for verification. With the information provided in the request, the CA will do their homework on you to make sure you are who you say you are, including possibly attempting to contact you or your business by email or phone. It’s important that this information is as accurate as possible:
    • Key Label: MAX_SSL_KEY
    • Key Size: 2048
    • Common Name: www.mycompany.com (this is the host name that you want to secure and must be correct!)
    • Organization: My Company Inc
    • Locality: Your city
    • State/Province: Your state
    • Zipcode: Your zip
    • Country or region: Your country
    • Email Address: admin@mycompany.com
    • Enter the file name: C:\IBM\HTTPServer\maximo.arm
    • Click OK. We’re going to leave the IBM Key Management Utility open for now. We’ll come back to it later.

Step 2: Purchase an SSL Certificate, Upload the CSR, and Download the Certificate

Purchase an SSL Certificate

Request an SSL certificate

After you purchase an SSL certificate, you need to request it for the website’s domain name (or “common name”) you want to use.

Activate your credit

  1. Log in to your GoDaddy account.
  2. Click SSL Certificates.
  3. Next to the SSL certificate credit you want to use, click Set up.
  4. If you have multiple credits, select the credit you want to use, and then click Set up.
  5. Refresh the page; you should see a New Certificate. If you don’t, continue to refresh the page until you do.

Request your certificate

  1. Next to your New Certificate, click Manage.
  2. Select Provide a CSR, and then enter the CSR from your server. Back on the server where the IBM HTTP Server is installed, open the C:\IBM\HTTPServer\maximo.arm file in your favorite text editor. Copy its contents. This is your Certificate Signing Request (CSR).
  3. Click Request Certificate.

Verification Process

  • GoDaddy will verify your certificate request. How long this takes depends on the type of certificate (typically between 1 and 7 days). Once we have that certificate we can continue with the process. Until then, we wait.

Download the Certificate

  • After GoDaddy approves your SSL certificate request, you can download your primary and intermediate certificate from within the SSL application on the GoDaddy website.
  • On your SSL certificate home page, click Download.
  • Select the Apache server type.
  • Click Download ZIP file.

Copy the Certificate to your IBM HTTP Server

  • Copy the ZIP file to the C:\IBM\HTTPServer\ folder on the server where the IBM HTTP Server is installed.
  • Extract the contents of the ZIP file to the C:\IBM\HTTPServer\ folder.
  • Note that there should be two files: one that represents your certificate, and one that represents GoDaddy’s intermediate certificate. You will need both to install the certificate in the next step.

Step 3: Install the Certificate

Run the IBM Key Management Utility

  • Sign on to the server where the IBM HTTP Server is installed as an administrator.
  • Run the IBM Key Management Utility program from your Start Menu > IBM HTTP Server V8.5
  • Open your maximo.kdb key database created earlier, using the password you created earlier to unlock the key database.

Install the Intermediate Certificate

  • Change the Key database content drop-down to Signer Certificates.
  • Click the Add… button
  • Choose the intermediate certificate file that you extracted in the previous step. Please note that the file name is likely to be of the nature gd_bundle_*.crt, and that the CRT file extension is not in the default list in the Key Management Utility file browser. Simply change the file extension drop-down to All Files or paste the exact file name into the window.
  • Click OK
  • You should see the intermediate GoDaddy certificates listed.

Install the Certificate

  • Change the Key database content drop-down to Personal Certificates.
  • You should see the MAX_SSL_KEY record that was created earlier when we created our CSR. Highlight that record. Note that the * in front of the MAX_SSL_KEY record indicates it is the default key.
  • Press the Receive button.
  • Choose the certificate file that you extracted in the previous step. Please note that the file name is likely to be some has sequence with a file extension of .crt, and that the CRT file extension is not in the default list in the Key Management Utility file browser. Simply change the file extension drop-down to All Files or paste the exact file name into the window.
  • Click OK
  • If all goes well you should see a Validation Successful message in the Key Management Utility! This means that your key database is now validated with a signed certificate from a Certificate Authority (GoDaddy). We’re almost done!

Step 4: Update the HTTP Server, WebSphere, and Maximo

Update the IBM HTTP Server

  • Sign on to the server where the IBM HTTP Server is installed as an administrator.
  • Edit the C:\IBM\HTTPServer\conf\httpd.conf file. Please note that the directory path may be different based upon your installation (e.g. C:\Program Files\IBM\HTTPServer\).
  • Add the following snippet to the file:
    # Maximo SSL Config
    LoadModule ibm_ssl_module modules/mod_ibm_ssl.so
    Listen 0.0.0.0:443
    ## IPv6 support:
    #Listen [::]:443
    <VirtualHost *:443>
    SSLEnable
    </VirtualHost>
    KeyFile "C:/IBM/HTTPServer/maximo.kdb"
    
  • Save the file.
  • Restart the IBM HTTP Server V8.5 Windows Service.

Update the WebSphere Virtual Host

  • Log into the IBM WebSphere Console as an administrator.
  • Navigate to Environment > Virtual Hosts.
  • Click on the maximo_host Virtual Host.
  • Click on Host Aliases under Additional Properties.
  • Click on the New… button.
  • Add the host name that you used for the Common Name (e.g. www.mycompany.com) in your certificate request as the Host Name. Specify 443 as the Port.
  • Click OK and save the configuration to the Master File.
  • Restart your IBM WebSphere Windows Services (Cell Manager and Node Agent).

Update your Maximo System Properties

  • At this point, you should be able to access Maximo over SSL (HTTPS). There are just a few System Properties that should be updated in order to have everything buttoned up.
  • Log into Maximo as an administrator.
  • Navigate to the System Configuration > Platform Configuration > System Properties application.
  • Update the following properties, which should just involve changing the existing property value to change the http:// to https://
    • mxe.doclink.path01: This is for attached documents.
    • mxe.help.protocol: This is for application help. Please note that in 7.6.0.4 the help is now pointing to IBM’s website. In either case, the property value should be changed to https.
    • mxe.int.webappurl: This is for Integration Framework web service and HTTP calls.
    • mxe.oslc.restwebappurl: This is for OSLC calls through the REST interface.
    • mxe.oslc.webappurl: This is for OSLC calls through the standard interface.

 

That’s it! I hope this has been helpful. Please feel free to leave feedback in the comments section below.

 

Securing Maximo by Forcing Users to SSL (HTTPS)

You’ve taken the step of securing your Maximo environment by implementing SSL in your WebSphere environment. However, just because you’ve implemented the SSL configurations doesn’t mean users must use them. How do you force users to append that little “S” to the back of the HTTP when they navigate to Maximo?

There are passive options, to be sure, but why not force users to the HTTPS address? If the Maximo environment is open to the internet do you really want your data passing through un-encrypted? One method of forcing SSL/HTTPS is by using Apache’s Rewrite Module which we’ll describe below. This way, if a user forgets to use the proper address, they will be automatically re-routed to the correct address.

  1. Ensure that your system is properly setup to handle SSL (HTTPS). I can’t stress this enough. Before forcing users to use secure protocols, make sure that those protocols are working properly. If you need assistance, visit our blog post on Configuring SSL with Maximo.
  2. Backup the httpd.conf file, normally located in the C:\IBM\HTTPServer\conf directory.
  3. Open the httpd.conf in your favorite text editor.
  4. Add the following lines to the file, substituting the appropriate path for “C:/IBM/HTTPServer” for your file system:
    LoadModule rewrite_module modules/mod_rewrite.so
    # Rewrite Rule for SSL. Ensure traffic on SSL.
    RewriteEngine On
    # If it's not 443 (SSL Port) ...
    RewriteCond %{SERVER_PORT} !^443$
    #...redirect it to the same address but make it SSL
    RewriteRule ^(.*) https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
  5. Restart your IBM HTTP Service.
  6. Test your solution!