Maximo

Maximo

Come for answers, stay for best practices. All we're missing is you.

 View Only

Maximo Mobile - Technician - Performance - excluding workorder history of Asset and Location from data download

By Piyush Sukhadiya posted 04/30/25 07:14 AM

  

The Technician application includes a feature that displays the last three work orders performed on the Asset and Location associated with the current work order. While this functionality provides valuable context for technicians, the underlying relationship used to retrieve these historical work orders can be computationally expensive in many Maximo environments—particularly when the WORKORDER table contains millions of records.

Are you on MAS 9.2?

MAS 9.2 ships an out-of-the-box fix for this problem — no manual relationship or app.xml changes are required. See the MAS 9.2 Out-of-the-Box Optimization section below.

If you are on 9.1 or earlier, continue with the manual steps further below.

MAS 9.2 Out-of-the-Box Optimization — On-Demand Work Order History

IBM Maximo Application Suite 9.2 introduces a significant performance improvement for work order history in the Technician mobile application. In earlier releases, work order history for both Asset and Location was loaded using child relationships on mxapiwodetail, which caused all historical work order records to be preloaded alongside the main work order list — regardless of whether the user ever opened the history view. This created substantial overhead, particularly in environments with large datasets.

In MAS 9.2, these costly child relationships are deprecated and replaced with two new dedicated datasources that fetch history data on-demand from the server. This change dramatically reduces mobile database load while maintaining full history functionality.

Breaking Change: This is a breaking change. Customizations that reference or depend on the child relationship structure for work order history (assetsrecentwos, locationsrecentwos) must be updated to use the new datasource and page approach.

What Changed

Component Previous Implementation (pre-9.2) New Implementation (9.2)
Data Retrieval Child relationships on mxapiwodetail Dedicated datasources with QBE search
Asset History Child relationship assetsrecentwos assetWorkOrderList datasource with asset-specific QBE filtering
Location History Child relationship locationsrecentwos locationWorkOrderList datasource with location-specific QBE filtering
Loading Timing Preloaded with main work order list Fetched on-demand when user opens history view

Deprecated

  • Child relationship assetsrecentwos for Asset history in mxapiwodetail
  • Child relationship locationsrecentwos for Location history in mxapiwodetail

Added

Two new datasources using the mxapiwodetail object structure:

  • assetWorkOrderList — Asset history datasource. QBE is configured in the JS controller to filter by assetnum and siteid.
  • locationWorkOrderList — Location history datasource. QBE is configured in the JS controller to filter by locationnum and siteid.

QBE Search Criteria

Both datasources apply the following filters when loading history:

  • Filters by assetnum or locationnum based on page parameters
  • Filters by siteid (default site)
  • Excludes tasks (istask = false)
  • Includes only CLOSE and COMP status work orders
  • Sorted by statusdate (descending)
  • Limited to 4 records (page size)

Online and Offline Behaviour

Online mode — History is fetched directly from the server on demand, reducing mobile database load:

await assetWorkOrderList.searchQBE(undefined, true);

Offline mode — History is retrieved from records already available in the mobile database using a full table search. If no records are available locally, a "no records" message is shown to the user:

const options = { mobileFullTableSearch: true };
await assetWorkOrderList.searchQBE(undefined, true, options);

Page Parameters

Parameter Description
assetnum Asset number to filter asset history
locationnum Location number to filter location history
wonum Current work order number (excluded from results)

Navigation Implementation

Navigation to the history page is handled in WorkOrderDetailsController.js:

// From WorkOrderDetailsController.js

openAssetWorkOrder(event) {
  this.app.setCurrentPage({
    name: 'assetWorkOrder',
    params: {
      wonum: event.item.wonum,
      assetnum: event.item.assetnum,
      locationnum: event.item.locationnum,
    },
  });
  if (this.app.currentPage) {
    this.app.currentPage.callController('loadRecord', event);
  }
}

Manual Steps — For MAS 9.1 and Earlier

If you are on MAS 9.1 or an earlier version, follow the steps below to optimize or remove workorder history from mobile.

The original implementation of this functionality resulted in excessive database queries—approximately 2n × n (Asset and Location multiplied by total work orders)—during the download of work orders into the mobile application. This approach significantly impacted performance in environments with large datasets.

To mitigate this, improvements were introduced through public defect DT438297 in version 9.0.15, and further enhanced internally by adding new relationships:

  • assetsrecentwos
  • locationsrecentwos

However, for users with databases containing millions of work orders, it was observed that removing this functionality entirely (as detailed below) provided substantial improvements in data download performance for the Technician mobile application.

For users on version ≥ 9.0.15 and 9.1, the following steps can be taken to disable this feature:

  • Remove the relationships:
    • assetsrecentwos (id="rrb4e")
    • locationsrecentwos (id="r7mpj")
      from app.xml
  • Remove the associated button from the UI in app.xml with:
    • id="vde7k"
    • icon="carbon:calendar--heat-map"


Note: changes below are only for versions before 9.0.15, as they were corrected in the OOB application after that.

This article will help improve performance if you observe that the following queries are firing too many times and are costly while you fetch work order data in the Mobile Technician app.

select * from workorder where (((status = 'COMP' or status = 'CLOSE')))......


And if you don't want to use this "View history" function in your application,

Remove the following from app.xml,

1. This will remove the button from the UI. Remove following button

<button icon="carbon:calendar--heat-map" on-click="openAssetWorkOrder" on-click-arg="{{'item':woAssetLocationds.item, 'locItem':woLocationds.item, 'woNum': woDetailResource.item.wonum}}" hidden="{page.state.assetLocation}" disabled="{page.state.loading || page.state.workloading ||page.state.historyDisable}" kind="secondary" id="vde7k"/>

2. This will remove the workorder history records of the Asset.
Remove the following attributes from woAssetLocationds datasource

<attribute name="rel.wobyasset{wonum,description,status,status_maxvalue,statusdate,worktype,siteid}" id="w74bm">
  <maximo-child-filter related-path="asset.wobyasset" order-by="-statusdate" limit="3" where="status in [&quot;COMP&quot;,&quot;CLOSE&quot;]" id="m2ypx"/>
</attribute>

2. This will remove the workorder history records of the Location.
Remove the following attributes from woLocationds datasource

<attribute name="rel.wobylocation{wonum,description,status,status_maxvalue,statusdate,worktype,siteid}" id="n7d8n">
              <maximo-child-filter related-path="locations.wobylocation" order-by="-statusdate" limit="6" where="status in [&quot;COMP&quot;,&quot;CLOSE&quot;]" id="bm558"/>
 </attribute>



Keeping history icon to view history

The query contains a status filter in two distinct where clauses, which are costly database queries.

There are few options here :

1) Show all the Wos except Cancelled in Mobile for Workorder history of Asset or Location.

Remove the where clause from app.xml from the following lines:

<maximo-child-filter related-path="asset.wobyasset" order-by="-statusdate" limit="3" where="status in [&quot;COMP&quot;,&quot;CLOSE&quot;]" id="m2ypx"/>

and change this to
<maximo-child-filter related-path="asset.wobyasset" order-by="-statusdate" limit="3" id="m2ypx"/>


Same for Locations

<maximo-child-filter related-path="locations.wobylocation" order-by="-statusdate" limit="6" where="status in [&quot;COMP&quot;,&quot;CLOSE&quot;]" id="bm558"/>

change this to
<maximo-child-filter related-path="locations.wobylocation" order-by="-statusdate" limit="6" id="bm558"/>

2) Update the relationships in Database configuration, to remove "Cancelled" clause from where clause.
This may affect other functionality in your Manage or Integrations where this is being used by including cancelled Workorders as well wherever this relationship is used.

  1. Go to Database configuration Application
  2. Search and go to "Asset" record
  3. Search and select "wobyasset" relationship
  4. Update where clause from

assetnum=:assetnum and siteid=:siteid and istask=0 and status in (select value from synonymdomain where domainid ='WOSTATUS' and maxvalue not in ('CAN'))

to

assetnum=:assetnum and siteid=:siteid and istask=0

The same goes for Locations

  1. Go to Database configuration Application
  2. Search and go to "LOCATIONS" record
  3. Search and select "WOBYLOCATION" relationship
  4. Update where clause from

location=:location and siteid=:siteid and istask=0 and status in (select value from synonymdomain where domainid ='WOSTATUS' and maxvalue not in ('CAN'))

to

location=:location and siteid=:siteid and istask=0

3) Create a new relationship that returns only Closed and completed Workorders.

  1. Update app.xml to use the new relationship. Search for the attribute with rel.wobyasset and rel.wobylocation and update as rel.NEWRELATIONSHIP
  2. Remove the where clause – as shared in the very first option.

4) Adding new indexes can also help improve performance

  1. CREATE INDEX "MAXIMO"."WORKORDER_STATUS_LOC_IDX" ON "MAXIMO"."WORKORDER" ("STATUS", "LOCATION", "SITEID", "ISTASK");
  2. CREATE INDEX "MAXIMO"."WORKORDER_STATUS_ASSET_IDX" ON "MAXIMO"."WORKORDER" ("STATUS", "ASSETNUM", "SITEID", "ISTASK");



Additional Resources:

Maximo Mobile - Performance optimization

#MaximoMobile #Mobile #Technician #Performance #MaximoMobilePerformance

0 comments
118 views

Permalink