Update April 2021 – This post describes the old REST APIs. A tutorial on the new APIs can be found here.
In this tutorial I will show how easy it is to query and update data in Maximo using the Integration Framework (MIF) REST interface.
To send REST calls you first need to setup an HTTP/REST client. In this tutorial I will use a Google Chrome add-on called Advanced REST Client.
Retrieve a record
In this first example I will show you to retrieve a PERSON record from Maximo using a REST call with an HTTP GET request:
http://[MXHOST]/maxrest/rest/mbo/person/1
Probably you will get an authentication error like this:
Error 401: BMXAA0021E - User name and password combination are not valid. Try again.
This means that you have to pass the authentication credentials to your request. If you are using native authentication you can pass the _lid and _lpwd arguments as described in this example:
http://[MXHOST]/maxrest/rest/mbo/person/1?_lid=wilson&_lpwd=wilson
Now you should see the PERSON record identified by the PERSONUID=1.
NOTE: For all the examples below I will exclude the authentication arguments for simplicity.
MBO and OS resources
The REST API provides access to business objects and integration object structures.
The two calls below will provide access to the same resource:
http://[MXHOST]/maxrest/rest/mbo/person/1
http://[MXHOST]/maxrest/rest/os/mxperson/1
The first call access data straight from the PERSON object through MBO persistence layer.
The second call access data from the MXPERSON integration object structure through the MIF.
You will notice that results are slightly different.
Data format (XML or JSON)
By default Maximo retrieves data in XML format. JSON could be used instead passing the _format argument:
http://[MXHOST]/maxrest/rest/mbo/person/?_format=json
Select records
To retrieve the REVIS person record use the following REST call:
http://[MXHOST]/maxrest/rest/mbo/person/?personid=revis
Note that Maximo will perform a wildcard search by default so if you type ‘re’ instead of ‘revis’ you will get a list of records that contains ‘re’ in the PERSONID field:
http://[MXHOST]/maxrest/rest/mbo/person/?personid=re
To search with an exact match use the ~eq~ token as demonstrated in this examples:
http://[MXHOST]/maxrest/rest/mbo/person/?personid=~eq~revis
http://[MXHOST]/maxrest/rest/mbo/person/?personid=~eq~re
Results can be sorted using the _orderby, _orderbyasc or _orderbydesc argument. Multiple attributes can be passed separated by a comma character.
http://[MXHOST]/maxrest/rest/mbo/person/?personid=re&_orderby=statusdate
http://[MXHOST]/maxrest/rest/mbo/person/?personid=re&_orderby=status,statusdate
Create or Update a record (AddChange)
To create an existing record the AddChange action can be used. The following example will create a new person named RESTINT. Note that in this case a POST request must be used instead of a GET.
http://[MXHOST]/maxrest/rest/mbo/person/?_action=addchange&personid=restint&firstname=Rest&lastname=Int
To update the same record we can use the PERSONUID returned from the create. In my example it’s 161.
http://[MXHOST]/maxrest/rest/mbo/person/161?_action=addchange&personid=restint&firstname=RestNew&lastname=IntNew
Updating child objects
Lets now pretend we need to update an asset specification and one of its attributes. You will see things are now a little more complex.
First of all we can create a new asset with a POST request.
http://[MXHOST]/maxrest/rest/mbo/ASSET/?assetnum=myasset01&siteid=BEDFORD&description=TestTest
Take note of your ASSETUID and query the new record with a GET request.
http://[MXHOST]/maxrest/rest/mbo/ASSET/2585
Now login to Maximo, classify the MYASSET01 as a BEARING, add an ALN attribute and save it.
If you query the asset using the GET request above you will notice that you just have a CLASSSTRUCTUREID attribute with a number in it specifying the classification. This is not usable in our scenario and will not allow to update attribute.
The right approach is to switch to the object service structure. Try to query the new record with a GET request like this:
http://[MXHOST]/maxrest/rest/os/MXASSET/2585
You will see that the HIERARCHYPATH field is now available and a subelement ASSETSPEC returns the attribute.
If we now want to update the value of the ALN attribute we can use a POST with a dotted notation like this:
…/MXASSET/2585?ASSETSPEC.1.ASSETATTRID=BEARTYPE&ASSETSPEC.1.ALNVALUE=ABC&ASSETSPEC.1.LINEARASSETSPECID=0
If you want to set a new classification here’s an example:
http://[MXHOST]/maxrest/rest/os/MXASSET/2585?hierarchypath=BEARING%20\%20ROLLER
Note how the spaces have been encoded in the URL with the ‘%20’ string. Hope this can help all of us dealing with integration scenarios using REST calls…