Search This Blog

Tuesday, July 9, 2024

MAS : Maximo Application Suite Education Roadmap and available trainings for BP's

 Here is PDF with details roadmap having cost and no cast self paced IBM trainings for MAS functional and technical education roadmap.

MAS_Technical_Courses_IBM

Thursday, April 11, 2024

MAXIMO : Query Manager App

 

Streamline Your Maximo Queries with the Custom Query Manager App

IBM Maximo offers powerful querying capabilities, but managing user-created queries can be a real headache. There's no centralized way to edit or transfer ownership of saved queries. This can lead to several issues, especially in large organizations:

  • Orphaned Queries: When users leave the organization, their queries become orphaned. Updating details from the backend becomes difficult, potentially causing errors or improper loading of start centers that rely on those queries.
  • Inefficient Management: Lack of a central location for managing queries makes it cumbersome to track ownership, edit details, or redistribute queries as needed. This can lead to confusion and wasted time for both users and administrators.
  • Limited Collaboration: Sharing or collaborating on queries can be challenging without a clear understanding of ownership and access rights.

Introducing the Query Manager App

This blog post introduces a custom Maximo application called "Query Manager" that simplifies query management for both users and administrators. Built as a Power Application on the Query object, Query Manager provides a user-friendly interface for:

  • Viewing Query Details: Users can access basic information about a saved query, including its name, description, and owner.
  • Editing Queries: Users can easily modify their own saved queries directly within the application.
  • Transferring Ownership: Administrators can take ownership of queries created by other users, ensuring proper maintenance and access control.

Enhanced Visibility with Start Center Usage Table

Query Manager goes beyond basic query details. It includes a table that displays a list of start centers where the selected query is currently used. This allows users to quickly understand the impact of a query and its potential impact on reports and workflows.

Here is how it look in action:



Benefits of Query Manager

  • Improved User Experience: Streamlined editing and ownership transfer capabilities empower users to manage their queries effectively.
  • Enhanced Control for Administrators: Administrators gain the ability to take ownership of orphaned queries or redistribute them as needed.
  • Increased Visibility: The start center usage table provides valuable insights into query utilization, aiding in decision-making and optimization.
  • Reduced Risk of Errors: By facilitating ownership transfer, Query Manager eliminates the need for potentially risky backend updates when users leave the organization.

Building the Query Manager App

Developing the Query Manager application requires familiarity with Maximo customization tools. Here's a high-level overview of the steps involved:

  1. Create a New Power Application: Design the application interface using Maximo's Application Designer. Include sections for query details, edit and ownership buttons, and the start center usage table.
  2. Develop Custom Logic: Create business logic to handle user actions such as edit query, transfer ownership, and retrieve start center usage data for the selected query.
  3. Implement Security: Ensure proper access controls for edit and ownership functionalities, restricting them to authorized users or roles.
Here are my configuration and code components ( V 7.6.1.3)
1. Application XML :
               
2. Automation Scripts
3. Sigoptions : 
4. Application Authorization : 

Here you can access all these artifacts and set up this application in your maximo instance within 10 minutes.

Query Manager by Prashant Bavane

Conclusion

The Query Manager application effectively addresses a common challenge in Maximo: managing user-created queries. By providing a centralized platform for editing, transferring ownership, and visualizing start center usage, Query Manager empowers users and administrators to leverage Maximo's querying capabilities more efficiently.

Next Steps

  • Explore Maximo's Power Applications and customization options to build your own Query Manager app.
  • Consider integrating additional features like search functionality or query version control.

With Query Manager, you can take control of your Maximo queries, enhancing user experience, streamlining management, and reducing the risk of errors associated with orphaned queries.

Friday, February 9, 2024

MAXIMO : Don't Let Your Assets Sleepwalk: Wake Up with Twilio SMS Notifications in Maximo 7.6.1.3

Imagine this: a critical piece of equipment goes down in the dead of night. You rely on email notifications, but your technicians rarely check their inboxes after hours. The delay in response costs your company precious time and productivity. Ugh!

This scenario is all too common, but fear not! Timely communication is key to effective asset management, and Twilio's SMS integration with IBM Maximo 7.6.1.3 can be your knight in shining armor.

Picture this: an alert pops up on your tech's phone, instantly notifying them of the issue. They spring into action, resolving the problem before it snowballs. Equipment humming happily? Check. Happy boss? Double check!

So, how do you make this SMS dream a reality? Don't worry, we've got you covered. This sample use case will walk you through the process, step-by-step, like a friendly Maximo whisperer. And you can easily plug-in into your unique situations with little to no much changes.

Ready to get started? Buckle up!

1. Twilio Time: Your Gateway to Speedy Alerts:

Think of Twilio as your communication hub. Sign up for their free trial (plenty of credits for testing!), and grab your Account SID and Auth Token – these are your magic keys. We'll use them later.

2. Sigoptions & Actions: Speak Maximo's Language:

In Maximo-land, sigoptions control what actions you can take. We'll create a new one called "sendsms" and link it to the "sendsms" action in the Asset application as sample use case here. It's like teaching Maximo a new trick!

3. Scripting Magic: Your SMS Superpower:

Now for the cool part – the automation script. This code, triggered whenever you select "sendsms," uses Twilio's API to send those life-saving SMS alerts. Don't worry, we'll provide the code and explain what each part does.   

import java.net.HttpURLConnection as HttpURLConnection import java.net.URL as URL import java.io.OutputStreamWriter as OutputStreamWriter import java.io.BufferedReader as BufferedReader import java.io.InputStreamReader as InputStreamReader import java.util.Base64 as Base64 # Twilio account credentials account_sid = 'account_Id' auth_token = 'auth_token' twilio_number = '+13512008888' # Function to send SMS using Twilio def send_sms(to_number, message): url = 'https://api.twilio.com/2010-04-01/Accounts/' + account_sid + '/Messages.json' data = { 'To': to_number, 'From': twilio_number, 'Body': message } data_str = '&'.join(["{}={}".format(key, value) for key, value in data.items()]) url_obj = URL(url) connection = url_obj.openConnection() connection.setRequestMethod("POST") connection.setDoOutput(True) auth_str = account_sid + ":" + auth_token encoded_auth_str = Base64.getEncoder().encodeToString(auth_str.encode()) connection.setRequestProperty("Authorization", "Basic " + encoded_auth_str) connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded") writer = OutputStreamWriter(connection.getOutputStream()) writer.write(data_str) writer.flush() response_code = connection.getResponseCode() reader = BufferedReader(InputStreamReader(connection.getInputStream())) response = "" line = reader.readLine() while line is not None: response += line line = reader.readLine() reader.close() return response_code, response # Example usage to_number = '+1788xx5011' # Receiver's phone number message = 'Hello from IBM Maximo ! via Twilio SMS Gateway' status_code, response = send_sms(to_number, message) print('SMS sent with status code:', status_code) print('Response:', response)

4. Testing, Testing, 1, 2, 3:

Ready to see your handiwork in action? Open Maximo, choose an asset, and hit "sendsms." Did your phone buzz with a notification? If so, you're golden! Check the Twilio console for confirmation. High five! Here it is in actions :

In Assets new action to send sms :


And now once clicking it , it sends this template sms to mentioned number as of now hard coded in our automation script for this explanation purpose as below                         

5. Beyond the Basics: Level Up Your SMS Game:

Want to customize the message content or trigger notifications based on specific events? We've got tips for that too! Plus, we'll mention some potential roadblocks and how to navigate them smoothly.

Remember, integrating Twilio with Maximo isn't just about fancy tech; it's about empowering your team to respond quickly and efficiently, ultimately saving you time, money, and maybe even your sanity!

Ready to wake up your asset management with the power of SMS? Dive into the full similar use cases following the detailed instructions in this post and share insights for community.

P.S. Don't forget to share your SMS notification success stories in the comments!

Tuesday, August 29, 2023

MAXIMO : Email Listener using OAUTH using GMAIL account - 7.6.1.2 /3

 Here I am going to provide details steps for how to configure email listener using GMAIL with OAUTH authentication.


Pre-requisite you should have SMTP configurations set up and emails in Maximo are already working.

You may refer IBM documentation for this - Configuring SMTP.

So once SMTP is properly set up and email sending through Maximo applications works fine , we will need to move to prepare and get OAUTH parameters like Refresh Token , Client ID , Client Secret etc. for email address being used for email listener with OAUTH protocol.

Here I will cover steps for getting these details for Gmail account.

First step is to have email account  : Create a new Gmail account   / you may use your existing Gmail account.

Next steps is work with Google Cloud API to configure and generate/ get required parameters like Client ID , Client Secret and Refresh token for above Gmail account using cloud API library services.

Broadly this can be done using following steps :

1. Set up project using Google cloud dashboard logging in with your Gmail account.

2. Next enable GMAIL API under your project

    


3. Once API is enabled , credentials need to be created for connecting to account via GMAIL API

            

    




After hitting Save and continue , you should provide scope for API access /authorization
         


Now you should be able to download details in JSON format or can copy it from google cloud dashboard like Client ID , Client Secret.

    


Now next step is to get refresh token for this Email configuration/ client ID using postman client :
To get refresh token first we need to get code to establish session with api

URL :   Hit URL from browser in below format and within browser while redirecting it will generate CODE
        

It should ask you to login using your email account 
    

Then you have to click "continue" couple times and it will redirect to your maximo login page / redirect URI provided during credentials creation.
After successful login , you can try putting same above URL again and proceed is similar manner as session was already established this time it will automatically login maximo and URL
will now have auth code 





Postman POST request should be done to get refresh token :
URL :  https://oauth2.googleapis.com/token?
Parameters - client_id , client_secret ( values received in above steps)
redirect_uri : - your maximo url e.g. https://host:port/maximo ( which is used as redirect URL during credentials
creation )
grant_type : authorization_code
     prompt = consent
access_type = offline





This request should give you refresh time on first iteration.

Once you get refresh token you should be able to configure Email Listener within Maximo.





This will now complete Email Listener configuration using OAUTH.

I will continue and update this post for additional configurations like Email Interaction and sample PO workflow where PO status will be changed via email response being listened and processed by email listener.


Friday, August 4, 2023

MAXIMO : MIF Integration Changing status with inbound processing

 

How do we have change status functionality get triggered and record status history when sending inbound transaction with new status than the current one on record ?


Status change is an operation that is performed on stateful Maximo Business Objects. For example, a Person object can be changed from ACTIVE to INACTIVE and back by means of a button or menu selection in the application screen.

In order to perform a status change with an inbound Integration Framework transaction, you must include the STATUSIFACE and NP_STATUSMEMO attributes in addition to the STATUS attribute with the new value, and use the StatefulMicSetIn processing class. (Integrations that are provided with Maximo already use this class or have an integration-specific processing class which is an extension of StatefulMicSetIn.)

Note that the STATUS and STATUSDATE fields should be restricted in the object structure. Verify this in the Inbound Setting Restrictions in the Object Structures application.

STATUSIFACE is a boolean attribute which specifies how the transaction should be processed with regards to status changes:

STATUSIFACE=0 - This transaction will perform the specified Action (Add or Replace for example) on the data, save it, and then, if the new status is different from the existing status, perform a status change operation. Note that an invalid status change, such as attempting to cancel a closed workorder, will cause an error.

STATUSIFACE=1 - This transaction is ONLY a status change. Any data other than the key attributes which identify the record are ignored. If the new status is different than the existing status, perform a status change operation.

STATUSIFACE not present or has a null value : not present or null value are treated as STATUSIFACE=0.

The NP_STATUSMEMO attribute is used for the memo or remark which accompanies the status change. For example, if changing a workorder status, the value of NP_STATUSMEMO will be placed in the MEMO field of the WOSTATUS record that is inserted by the status change.

If you create a custom Object Structure for a stateful Maximo object, you must also add STATUSIFACE (and NP_STATUSMEMO if the status has a remarks or memo component in the status change dialog on the screen) to the Object Structure by adding it as a nonpersistent attribute to the main object in Database configuration. 

You must also specify psdi.iface.mic.StatefulMicSetIn as the processing class in the object structure definition. If you are creating a custom processing class, then it must extend the StatefulMicSetIn class.

Usage

In most cases you will only need to specify a STATUSIFACE of 0. This will ensure that the integration action is carried out and that the status will be changed if the new status is different.

If you plan on sending in transactions that will only change a status, such as approving a workorder or deactivating a person, then you can use the same integration that you use for data updates with status changes, but set STATUSIFACE to 1 and only send the key attribute values which identify the record, such as WONUM and SITEID for a workorder, along with the new status value.

Reference : IBM Technote MIF Changing status with an inbound transaction

Thursday, June 22, 2023

MAXIMO : Reset user password from backend

There are sometimes situations like lower environments like DEV , TEST ,TRAINING etc. gets refreshed from Production and all users get inactivated , password reset to default values and in some situations default values gets changes without notice and you had to wait for onshore counter part to be available to share details .


This can be dealt with updating you user's password from backend , generally developers have such access in development environments.

Below are details how to do this in different flavors of databases : 

First of all, get the encrypted password string of maxadmin user, where  for e.g. password is 'maxadmin'

SQL> Select userid, password from maxuser where userid = 'MAXADMIN'


output :
USERID PASSWORD
--------- --------------------------------
MAXADMIN x'10FE6F4650B2ACB49A2121D7E6133E64'

Now update user's password with this string, so that the password would be same like maxadmin's password

Oracle:
UPDATE maxuser
SET PASSWORD = '10fe6f4650b2acb49a2121d7e6133e64'    --
WHERE userid = 'XXXX' --user

SQL Server:
UPDATE maxuser
SET PASSWORD = 0x10fe6f4650b2acb49a2121d7e6133e64    --0x
WHERE userid = 'XXXXX' --user

DB2:
UPDATE maxuser
SET PASSWORD =x'10fe6f4650b2acb49a2121d7e6133e64'    --x''
WHERE userid = 'XXXX' --user


Reference: http://www-01.ibm.com/support/docview.wss?uid=swg21645570