Share

Maximo to Tandem - Update Asset Properties

The solution integrates asset data from Maximo into Tandem by updating user-defined parameters to provide key insights. These include the number of open work orders and service requests, dynamic URL links to work orders for each Tandem asset, and other relevant operational details. Additionally, the solution enriches Tandem assets with Maximo properties such as install date, description, manufacturer, and more, leveraging Tandem's visualization capabilities to enhance insights.

Pre-Requisites

Tandem

A Tandem facility must already be setup before starting this solution. The user-defined parameters section lists all properties that should exist in the Tandem facility's facility template or should be created and added there. Each asset in Tandem that needs to be mapped to an asset in Maximo, must have this manual one-time configuration.

How to obtain the Client ID and Secret for Tandem

To obtain a client ID and client Secret for authentication, you can follow the tutorial found here.

To add the client id and secret to the Tandem facility, please follow the tutorial found here

Note:
NOTE: Make sure Tandem Data API is checked under API Access.

IBM Maximo:

An API user created and configured in IBM Maximo with appropriate permissions to read and write asset data. For information on how to create the API key, please refer to the help docs here.

Security

This assumes that access credentials with the appropriate permissions are available to read and write data to Tandem and to access the IBM Maximo API.

For Autodesk Tandem, an application with access to the Tandem Data API should be created in Autodesk Platform Services. The client ID from this application should be added as a user in the Tandem facility with Edit/Manage permission.

On the other hand, for IBM Maximo API, the logged in user must have the correct permissions set for API access. Follow the documentation here.

User-defined parameters

A set of user defined properties are required to store the data read from Maximo into Tandem. The Scheduled data stream comes with a pre-defined set of properties as mentioned below to be created under the default category Maximo, which the user can use to create the parameters in Tandem. Below table details each property and its scope.

Property Name Description Data Type
OrgId Organization id which is the account represented on IBM Maximo. This is usually 'Autodesk', unless the client wants to rename this otherwise. String
SiteId The building id which represents a facility in Tandem. String
AssetId The unique id of an Asset coming from IBM Maximo. Number
AssetNum The asset name or num from IBM Maximo which is the same as element name in Tandem. String
NewAssetNum The new asset number or name changed. String
Description Asset Description String
Location Asset Location which is mapped to Element Level. String
StatusDescription A string representation of the Asset Status coming from Maximo. String
SerialNum Asset Serial Number String
Manufacturer Asset Manufacturer String
Vendor Vendor supplying the asset. String
GLAccount GLAccount number that is associated with the Asset. String
HealthScore The health score represented in a numeric format. Number
AccuracyEU The value summed with the Span, URV, and Reading EU fields to obtain the total accuracy of the asset. String
Priority Number
WorkOrdersUrl The unique url in Maximo to all the work orders for the asset. Hyperlink
ServiceRequestUrl The unique url in Maximo to all the service requests for the asset. Hyperlink
WOCount The total work orders on this asset. Count(Integer)
SRCount The total service requests on this asset. Count(Integer)
WOInProgress The total work orders in the 'In Progress' status. Count(Integer)
WOWaitingMaterial The total work orders waiting for Material. Count(Integer)
WOWaitingApproval The total work orders on this asset that are approved and ready to be actioned. Count(Integer)
WOWaitingPlanning The total work orders on this asset that are waiting for the planning to be complete. Count(Integer)
WOWaitingScheduling The total work orders on this asset that are awaiting schedule to start action. Count(Integer)
SRNew The total number of new Service Requests on this asset. Count(Integer)
SRQueued The total number of Service requests that are queued for action. Count(Integer)
SRPending The total number of Service Requests that are in 'Pending' status. Count(Integer)
SRInProgress The total number of Service Requests that are in 'In Progress' status. Count(Integer)
FlexField A Flex field with constant value which can be used for asset filter in Tandem. This field is optional. For example, you can write to a parameter in the ‘Maximo’ Category called “Tandem Connect Pipeline” with a static value of “Maximo > Tandem Pipeline” for all assets to assist with troubleshooting down the road. String

Solution Features

Feature Description
Read Assets from Maximo The solution starts off by reading all assets from Maximo that the API User has access to. This feature uses the latest REST APIs to read all assets and can read multiple pages.
Reading Work Orders and Service Requests from Maximo The solution also reads the Meters, exisiting work orders and service requests associated with each asset and updates the same information on Tandem for those assets.
Customisable User Defined properties The solution supports customised user defined properties that can be provided to the solution as a mapping between the Maximo and Tandem systems.
Update Tandem with Asset Properties The solution can update the user defined properties in Tandem for each asset with the details from Maximo.
Timed and Controlled API Calls The solution provides configurable control over the number of API calls to be sent to the Tandem APIs.

Basic Setup

This section provides the bare minimum configuration required for the solution to be up and running. Each plugin listed below will provide the necessary parameters to be filled in and also their values if needed. Any additional JSON object configuration required for the plugins, will be available in the Appendix section at the bottom of this document.

Scheduled Data Stream

Update the Maximo instance base url and the site id in the assetfilter. A default JSON object with all necessary configuration and structure is provided in the Appendix below. The JSON can be copied onto the Scheduled Data Stream.

Note:

The keys for the properties which are the Maximo asset fields are fixed and must not be changed.

IBM Maximo Service Plugin

Below are the common configuration needed for all Maximo Service Plugins

Parameter Name Description Expected Value
Maximo Base URL The base url for the maximo instance which will be used to access all REST APIs. The base url of the format https://main.manage.xxxxx.suite.maximo.com
Authentication Method The method which will be used to authenticate the REST APIs for maximo. Either Native, LDAP User or API Key.
Authentication Value The value associated with the authentication method selected above. Example: For API Key, the expected format is apikey:xxxxxxxx
Username The username for the 'Native' and 'LDAP' authentication methods.
Password The password for the 'Native' and 'LDAP' authentication methods.
Entity Name List The default entity that the plugin will read. Each Maximo Service has a different value. - "maximo/api/os/mxapiasset" for MaximoAssets

- "maximo/api/os/mxapiwo" for WorkOrder

- "maximo/api/os/mxapisr" for ServiceRequest
Entity Parameter List The options for filtering assets and selecting specific columns. Please see the Appendix for the JSON object to be copied.

Autodesk Tandem Service Plugin

Below are the common configuration needed for all Tandem Service plugins.

Parameter Name Description
Client ID The client id that was created while setting up the APS account.
Client Secret The client secret that was created while setting up the APS account.
Facility URN The facility urn for the tandem facility where the properties are updated.

Advanced Setup

This section details about all the components involved in the solution including the configuration needed and their purpose on the pipeline.

Solution Overview

UpdateAssetProperties

Plugins

Scheduled Data Stream

The scheduled data stream is the start of the pipeline where we can set the frequency of the solution how frequently it should run and update the properties. Below sections explain how the provided properties can be customized.

Customizing the properties

The properties provided out of the box are expected to be all created under the category Maximo, but the user can create them under any category as long as they can configure them here in the Scheduled Data Stream. Each property is a key-value pair where the key is the source (Maximo) field and the value is the property created in Tandem that holds the value for that field from Maximo.

Changing the default Category:

The default category for these user defined properties to be created in Tandem is Maximo. If a user wish to create them under a different category, it must be mentioned in the category field.

Creating multiple Categories:

The parameters created in Tandem can be organized into multiple categories, for example the orgid and siteid can be created under a Global category and the rest of the properties under the Maximo.

The parameters are categorized into three sections:

  • properties: The asset properties which can be stored in Tandem. Out of the box the solution provides the below properties and the default Tandem property names as values described as above.

    {
      "tandem": {
        "category": "Maximo",
        "properties": {
          "orgid": "Global.OrgId",
          "siteid": "Global.SiteId",
          "assetid": "AssetId",
          "assetnum": "AssetNum",
          "newassetnum": "NewAssetNum",
          "description": "Description",
          "location": "Location",
          "status": "StatusDescription",
          "serialnum": "SerialNum",
          "manufacturer": "Manufacturer",
          "vendor": "Vendor",
          "glaccount": "GLAccount",
          "healthscore": "HealthScore",
          "accuracyEU": "AccuracyEU"
        }
      }
    }
  • dynamicProperties: These are the properties which does not have a matching Maximo field, but are calculated based on the data from Maximo. By default, the solution provides the below dynamicProperties. The default fields in the json below are the totals for different status of work orders and service requests for an asset and the urls to the list of work orders and service requests for the same asset.

    {
      "WOInProgress": "WOInProgress",
      "WOWaitingApproval": "WOWaitingApproval",
      "WOWaitingMaterial": "WOWaitingMaterial",
      "WOWaitingPlanning": "WOWaitingPlanning",
      "WOWaitingScheduling": "WOWaitingScheduling",
      "WorkOrdersUrl": "WorkOrdersUrl",
      "SRNew": "SRNew",
      "SRQueued": "SRQueued",
      "SRPending": "SRPending",
      "SRInProgress": "SRInProgress",
      "ServiceRequestUrl": "ServiceRequestUrl"
    }
  • fixedProperties: These are constants that can be sent to the Tandem system. Currently only one FlexField is provided out of the box, but the users can add more if needed.

    {
      "FlexField": "Pipeline-1"
    }
    Note:

    Do not change the keys (left hand side) for any reason.

IBM Maximo Service

The IBM Maximo Service plugin allows users to connect to either on-prem Maximo or the Maximo Application Suite (SAAS) instances to read data from the Manage module for Assets and its relevant information. The plugin by default connects to a cloud instance using the API Key authentication.

In this solution, there are 3 instances of the plugin used to read Assets and for each Asset, read the WorkOrders and ServiceRequests.

Array Utility Service

This is the plugin that splits the assets read by Maximo Service plugin into one asset at a time.

Converters

There are 3 instances of this plugin used in the solution.

Transform

This plugin contains the transformation logic of converting the Maximo properties to the Tandem user defined properties. This convertor reads the data from Maximo and the configuration from the Scheduled data stream for the user defined properties. Then applies the transformation logic for the properties and the fixedProperties. The plugin calculates the values for all dynamicProperties and sends them as a batch to Tandem to be updated for the asset. If the user defined properties in Tandem are configured differently to the out of the box properites provides, then the user has to update them accordingly as mentioned above in the Scheduled Data Stream plugin.

PrepTandem

The convertor plugin which will prepare the incoming object to be of the format accepted by the Tandem Service. This creates a tcMetadata object that contains the facilityId, modelId and the assetId with the data object containing the properties and its values.

IncrementPageNo

The convertor is a simple javascript code that reads the current pageNo from the Maximo Assets plugin and then increments it to the next page to be sent to the Maximo Service plugin.

Throughput Controller

This plugin enables solutions to send a limited number of API calls to the Tandem service, ensuring we do not overload or exceed Tandem’s rate limits. By default, the plugin is configured to send only 50 requests every 15 seconds. If this configuration needs to be adjusted, it is crucial to avoid generating an overwhelming number of API calls within a short period.

Autodesk Tandem Service

There are 2 instances of the plugin. One does a scan to get all assets based on the assetnum filter that is passed on, the second plugin

Scan

The scan plugin is configured to accept a set of user defined properties along with the AssetNum property which matches the element's user defined property AssetNum. This is achieved by setting the Asset Filter parameter of the plugin to accept the AssetNum from the incoming data and match it with the user defined property AssetNum. The plugin will return the Tandem Asset Id for the matched AssetNum.

UpdateTandem

The plugin will accept the AssetId, FacilityId and ModelId which will give a unique asset identifier in Tandem and update the properties for the asset.

Troubleshooting

  • If the data from Maximo is not being updated in Tandem, the possible issue will be with the User defined properties and the category they are created.
    • The attribute is used in the facility template for Tandem Facility.
    • The asset uses the Classification where the attribute is applied.
    • The asset in Tandem must exactly match the attribute value in the AssetFilter parameter of the Autodesk Tandem Service plugin at the end of the solution.
  • For all other exceptions and errors, check the Exception tab for each plugin for more information.

Appendix

Below are the configurations that can be copied into the plugins where ever needed.

  • Scheduled Data Stream (MaximoToTandem):

    {
      "maximo": {
        "baseurl": "<the base maximo url. Example: https://main.xxxxxx.suite.maximo.com>",
        "assetfilter": "siteid=\"BEDFORD\" and status=\"OPERATING\"",
        "assetselect": "assetid,assetnum,newassetnum,description,location,status_description,moved,serialnum,manufacturer,vendor,location,glaccount,priority"
      },
      "tandem": {
        "category": "Maximo",
        "properties": {
          "orgid": "OrgId",
          "siteid": "SiteId",
          "assetid": "AssetId",
          "assetnum": "AssetNum",
          "newassetnum": "NewAssetNum",
          "description": "Description",
          "location": "Location",
          "status": "StatusDescription",
          "serialnum": "SerialNum",
          "manufacturer": "Manufacturer",
          "vendor": "Vendor",
          "glaccount": "GLAccount",
          "healthscore": "HealthScore",
          "accuracyEU": "AccuracyEU",
          "priority": "Priority"
        },
        "dynamicProperties": {
          "WOInProgress": "WOInProgress",
            "WOWaitingApproval": "WOWaitingApproval",
          "WOWaitingMaterial": "WOWaitingMaterial",
            "WOWaitingPlanning": "WOWaitingPlanning",
          "WOWaitingScheduling": "WOWaitingScheduling",
          "WorkOrdersUrl": "WorkOrdersUrl",
          "SRNew": "SRNew",
          "SRQueued": "SRQueued",
          "SRPending": "SRPending",
          "SRInProgress": "SRInProgress",
          "ServiceRequestUrl": "ServiceRequestUrl"
        },
        "fixedProperties": {
          "FlexField": "ABC123"
        }
      }
    }
  • Maximo Service (Maximo Assets):

    //Entity Parameter List
    {
      "maximo/api/os/mxapiasset": [
        {
          "attribute": "lean",
          "operator": "=",
          "value": "1"
        },
        {
          "attribute": "oslc.select",
          "operator": "=",
          "value": "data.maximo.assetselect"
        },
        {
          "attribute": "oslc.where",
          "operator": "=",
          "value": "data.maximo.assetfilter"
        },
        {
          "attribute": "oslc.pageSize",
          "operator": "=",
          "value": "100"
        }
      ]
    }
  • Maximo Service (WorkOrder):

    {
      "maximo/api/os/mxapiwo": [
        {
          "attribute": "lean",
          "operator": "=",
          "value": "1"
        },
        {
          "attribute": "oslc.select",
          "operator": "=",
          "value": "workorderid,wonum,status,status_description,description,assetnum"
        },
        {
          "attribute": "oslc.where=assetnum",
          "operator": "=",
          "value": "data.result.assetnum"
        },
        {
          "attribute": "oslc.pageSize",
          "operator": "=",
          "value": "10"
        }
      ]
    }
  • Maximo Service (ServiceRequests):

    {
      "maximo/api/os/mxapisr": [
        {
          "attribute": "lean",
          "operator": "=",
          "value": "1"
        },
        {
          "attribute": "oslc.select",
          "operator": "=",
          "value": "ticketid,affecteddate,reporteddate,description,description_longdescription,actlabcost,actlabhrs,reportedbyname,glaccount,location,status,impact"
        },
        {
          "attribute": "oslc.where=assetnum",
          "operator": "=",
          "value": "data.result.assetnum"
        },
        {
          "attribute": "oslc.pageSize",
          "operator": "=",
          "value": "10"
        }
      ]
    }

Asset filter examples on Scheduled Data Stream

  • Load all assets for the site "BEDFORD" which are OPERATING and priority greater than 10

    "assetfilter": "siteid=\"BEDFORD\" and status=\"OPERATING\" and priority>10"
  • Load all assets for location "FLOOR1" for the site "BEDFORD"

    "assetfilter": "siteid=\"BEDFORD\" and location=\"FLOOR1\""
  • Load all assets for site "BEDFORD" where priority is any one of 10,20,30

    "assetfilter": "siteid=\"BEDFORD\" and priority IN [10,20,30]"
  • Load all assets for site "BEDFORD" where asset status is either OPERATING or NOT READY

    "assetfilter": "siteid=\"BEDFORD\" and status IN [\"OPERATING\", \"NOT READY\"]"
  • Load all assets where assetnum starts with "IBM"

    "assetfilter": "assetnum=\"IBM%\""
  • Load all assets where location is empty

    "assetfilter": "location!=\"*\""
  • Load all assets where location is not empty

    "assetfilter": "location=\"*\""
  • Load all assets where installdate is between a range

    "assetfilter": "instaldate>=\"2023-02-06T00:00:00-05:00\" and installdate<=\"2024-02-06T00:00:00-05:00\""

Tandem Properties

Was this information helpful?