Java Customization

In this page I will collect all the resources that I develop or find for customizing and extending Maximo/TPAE using Java. This includes Maximo Business Objects (MBO), application beans (AppBean and DataBean), actions, conditions, MIF user entry/exit class, and any possible usage of Java within TPAE.
Note that starting from TPAE 7.5 there is a powerful scripting feature that is a good alternative to Java customization.

Learning Java

Where to Start

Basic Topics

Intermediate Topics

Advanced Stuff

Application cutomizations

Additional Resources


  1. Thank you for this blog, it's realy usefull

  2. Hi Bruno,

    I wanted to know whether we can directly update CLASSNAME attribute in MAXATTRIBUTECFG table instead of going into Database Configuration application and following step by step procedure to apply config changes in database? Is it a good practice ? does this method (updating maxtable from backend directly) would really update the config changes ?


    1. Well, I do think it will update the database (be careful to update both MAXOBJECTCFG/MAXATTRIBUTECFG and MAXOBJECT/MAXATTRIBUTE) but unfortunately the change won't take effect in a running system unless you somehow refresh the cache.

      To refresh the cache, taking Maximo in and out of Admin Mode should do. Restarting the app. server should also suffice.

      Generally there is not a lot to gain by changing the database directly, given the danger of corrupting something when bypassing the checks and the automatic propagation of changes in the app. code. Unless you know exactly what you are doing and are also doing lots of operations maybe in different environments (dev, qa, etc.) is when a database script makes sense instead of doing all these changes repeatedly using the UI or a migration package.

  3. Hi Bruno.
    Edit History Function Enhancement for Changes in Cancelled Status.
    Do we have chance to edit the fields in Cancelled Status. if have please let me know. How we can do this ?

  4. Hi Bruno,

    For a power app with multiple tabs, when we open one of the records ,in what sequence the init()method is called? Is the init()method called for each tab (each tab is based on different tables and they all are related to the main tab and have their own class files)

    When I open a record, I want to initialize data in one of the tabs along the main tab.

    Do I write my logic in init() method of the main tab or the init() method of the tab where I want to initialize the data. How should I approach this?


  5. Ho can we find find custom views , custom domains , custom App designer changes ?
    Custom Beans in maximo environment?

    1. Hi Bruno

      do you have a working download link for "Maximo Developer Reference Guide"? the link in your article does not work. thanks.

    2. Hi Bruno ,

      Is there any kind of Code review checklist for Maximo automation script and even MBO/Java customizations for maximo.

  6. Hi Bruno, Have you come across Maximo scheduler customisation. THe idea is to have Maximo scheduler view multiple forecasted PMs (say for duration of an year) and also forecast the labor,material,services,tools at each point in a year ?

    Any ideas on how to proceed to view the forecast in Scheduler (and not as a custom report)?

  7. Hi Bruno,
    your blog is a very nice compilation of information! Thanks!

    Do you know if it is possible to (deep-)link to a specific solution in the Maximo Knowledge Base?
    Until now I could not find a possibility to do that (although it would come in handy for e-mailing a solution).

    Thanks for any helpful comment. :-)

    1. I'm not sure to understand your point.
      Many applications and actions are reachable with standard URL links. See this post for details.

  8. Hi Bruno

    How can open the source code of a Maximo Class. I can extend but i want to open and see the source code of the super class. I use Maximo 7 and work with Maximo developer in Eclipse.


    1. Maximo source code is not OpenSource. The terms and conditions deny any reverse engineering of the source code.
      However... I know many developers use to decompile code to learn how Maximo works.
      This is my preferred decompiler:

    2. Yes... some developers do that. There is even an Eclipse plug-in for the very same decompiler and even after decompiling on the fly there is automatic code realignment to make the source line numbers coincide when debugging. The realignment stuff didn't worked very well until relatively recently, but now it is working fine.

      This is an incredibly valuable source of information when you try to see how something it is done or even for troubleshooting purposes.

  9. Hi Bruno

    I have a custom bean class that extends from databean work on Inventory application for barcode dialog that show some records. the dialog have a relationship invbalnces to show all item bens records that are in inbalances table.The problem is that if on Inventory tab and choose the Barcodeinventory dialog that I created from select action it work and show all current item bens records but if on list tab and select multiple records then choose the dialog it doesn't work and it show only one record and I want to show all items I selected with bens records.I hope you understand me and help me to solve it.

    Thanks for advanced.

  10. Hello Bruno,
    I have created simple validation class for custom field (string but should consist of up to 15 digits). If i add some numbers including a letter, exception is shown which is ok. If I go to edit my value, delete the letter and tab out of the field, the exception will be shown again. I can see in the log file that although the value is changed on the GUI (deleted the letter), class does not see the change. Only if I click enter, it will be ok. Am i missing something?
    Thank you

  11. Hello Bruno,

    Can you please create a tutorial on how to change the status via Java Customization? I would like to understand the complete detail behind changing status i.e when I hit the change status and select a new status, how does Maximo takes care of this change via Java customization?

    Thanks in advance.

  12. Hi Bruno,

    I want some information/guidance from you for the following scenario. Please do reply.

    I am using SCCD in some bank and want to create any new button or menu in SCCD UI, so that when i click on this button/menu it should fetch data about my ticket or problem from SCCD and push it outside to some third party system for further processing .

    Please provide me any link/tutorial or just give me some pointers to do this. Do i have to write custom java code or it can be performed through maximo scripting framework ?

    In short i am trying to integrate SCCD with a third party system and initiate transfer of some data to third party system from SCCD.

    Thanks in advance

  13. Hi Bruno,
    good day

    Thank you very much for sharing your knowledge and experience
    kindly i have a customer requirement as below:
    The EVN is SCCD 7.5.1 Advanced ,DB2, WAS
    I need to create an offering with set of automated populated attributes
    i have been searched and i believe that it must be a custom dialog offering with extended MBO
    the issue that I'm very weak in JAVA Customization
    could you please help me by providing detail example for this issue

    Thank in advance

    Sherif Hosney

    Team Leader IBM Tivoli Software Products

  14. Hi Bruno,
    good day

    Very thanks for your knowledge sharing, I have requirement like SR, does it possible to clone SR object? I got the way to clone SR application, but I can't find the way to clone SR object.

  15. hello Bruno Portaluri ,
    i followed your steps in configuring Eclipse for Maximo development but i have an error

    "!Connection to database not present, could not initialize Maximo developer"

    how can i solve that problem ??

    best regards

  16. Hi Bruno,
    I need to get a logged in userid in logout.jsp page.
    Based on userid we need to redirect to another page instead of normal maximo logout page. If I use maxsession.getUserInfo().getLoginId() it is throwing null pointer exception and leading it to internal server error on logout. I tried using mxserver too there I am getting admin system admin userid. Please let me know is there anyway to get the logged in id on sign out of the session.


  17. Hi Bruno,

    I'm very curious if I can change values in a lookup for a field on runtime. There's no link at the bullit "Field domain and getList() method". Do you have some information on this?

    Kind regards!

  18. Hi Bruno & all,
    How to delete some MBOs?
    Is that Okey?
    SqlFormat sqlf = new SqlFormat(this, "itemum=:1 and polineid=:2 and ponum =:3");
    sqlf.setObject(1, "POLINE", "polinenum","1");
    sqlf.setObject(2, "POLINE", "polineid","4231");
    sqlf.setObject(3, "POLINE", "ponum","PO-0113");
    MboSet delmbo = this.getMboSet("$polinedel", "POLINE",sqlf.format())

    Thanks & Kind regards

  19. Hi Bruno, There are couple of topics for which the hyperlink seems to be broken, can you pls help.

  20. Hello Bruno,

    In the current project, we need to filter classifications records(in the specification tab) based on the customer value associated to a location or an asset. Indeed, the classification records are correctly filtered when we try to associate a classification to an existing location or asset.

    However,when we associate a classification to a new asset or location, the filter doesn't work.

    We have overridden maximouiwebClasses.psdi.webclient.beans.assetcat.AssociateSpecBean.initialize()
    method to filter the classification records.

    Can you please suggest where I'm going wrong?

  21. Hi,

    I have a requirement. There is a button called Restore Application Defaults in the Advanced Search, More search options. The user wants that button some where else in the screen so that they can reduce the number of clicks.

    Is there any way to do it. If so how to do it.

    Thanks in advance.

  22. Ciao Bruno,
    ho questo caso d'uso:
    Tre applicazioni APP1, APP2, APP3 sono legate tra di loro con dei "salti" attraverso un GO TO APPLICATION da un menu su un campo in questo modo:
    - da APP1 posso saltare ad APP3
    - da APP2 posso saltare ad APP3.

    Nel metodo Initialize() della classe relativa ad APP3 (public class App3 extends DataBean) ho bisogno di trovare l'informazione relativa all'applicazione da cui provengo, discriminando tra App1 o App2. E' possibile reperire questa informazione e dove?

    Damiano Vittone

  23. hi Bruno, (or anyone who knows the answer)

    What specific java framework is Maximo built on? I have done struts and faces but this is no where near them. Thanks

  24. Hi Bruno,

    Appreciate your article. Could you please add the document to the link - 'Maximo Developer Reference Guide', currently, on accessing it gives an error message - '504 Gateway Error - Backend Application Server Unreachable'