Note that starting from TPAE 7.5 there is a powerful scripting feature that is a good alternative to Java customization.
Learning Java
- Introduction to Programming Using Java: Online and printable book for beginners.
- Thinking in Java: A great book about Java. Revision 2 is freely downloadable in Word format.
- The Java Tutorial: Original Sun/Java tutorial.
Where to Start
- Setup the development environment
- Understanding Maximo Business Objects
- Extending Maximo Business Objects
- Deploy custom code
- How to debug Maximo
Basic Topics
- How to query and fetch MBOs
- How to read and update attributes
- How to get current/previous/initial values of an attribute
- How to add a record to an MboSet
- How to navigate relationships
- Read system property in a Java class
- TPAE Java coding standard
Intermediate Topics
- What methods to override
- Best way to loop through an MboSet
- Flags for setValue method
- Retrieve multiple attribute values from an Mbo
- Field validation (link1, link2)
- Field domain and getList() method
- How to check for null values
- Reset the value of a field when another field is modified
- Set a field required after save
- Execute or evaluate a conditional expression (link)
- Stateful MBOs
- Run a Birt Report on click of a Button (link)
Advanced Stuff
- Java MBO performance golden rules
- Avoiding Java classes conflicts using a_customer.xml file
- Logging and tracing
- Formatting and converting data types
- Action class
- Condition class
- Role's Custom Class
- Invoking a Maximo method from another JVM through RMI
Application cutomizations
- AppBean and DataBean (link1, link2)
- How to call a Java method on action menu or toolbar button click
- Display a custom message
- How to display a YES/NO dialog and get user input
- Display a custom dialog box (link)
- DataBean sample (link)
- Virtual beans (link)
- Application events handling (link)
Additional Resources
- Maximo business object development
- Maximo Developer Reference Guide
- JavaDocs for Maximo Asset Management 7.6.0.9
- JavaDocs for Maximo Asset Management 7.6 (dowload)
Thank you for this blog, it's realy usefull
ReplyDeleteHi Bruno,
ReplyDeleteI 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 ?
Thanks,
Sadequa.
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.
DeleteTo 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.
Hi Bruno.
ReplyDeleteEdit 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 ?
Hi Bruno,
ReplyDeleteFor 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?
Thanks
Ho can we find find custom views , custom domains , custom App designer changes ?
ReplyDeleteCustom Beans in maximo environment?
Check out this article.
DeleteHi Bruno
Deletedo you have a working download link for "Maximo Developer Reference Guide"? the link in your article does not work. thanks.
Hi Bruno ,
DeleteIs there any kind of Code review checklist for Maximo automation script and even MBO/Java customizations for maximo.
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 ?
ReplyDeleteAny ideas on how to proceed to view the forecast in Scheduler (and not as a custom report)?
Hi Bruno,
ReplyDeleteyour 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. :-)
I'm not sure to understand your point.
DeleteMany applications and actions are reachable with standard URL links. See this post for details.
Hi Bruno
ReplyDeleteHow 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.
Thanks.
Maximo source code is not OpenSource. The terms and conditions deny any reverse engineering of the source code.
DeleteHowever... I know many developers use to decompile code to learn how Maximo works.
This is my preferred decompiler: http://java.decompiler.free.fr
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.
DeleteThis is an incredibly valuable source of information when you try to see how something it is done or even for troubleshooting purposes.
Hi Bruno
ReplyDeleteI 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.
Hello Bruno,
ReplyDeleteI 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
Hello Bruno,
ReplyDeleteCan 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.
Hi Bruno,
ReplyDeleteI 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
Hi Bruno,
ReplyDeletegood 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
AMA-Corp
Egypt
Hi Bruno,
ReplyDeletegood 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.
hello Bruno Portaluri ,
ReplyDeletei 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
Hi Bruno,
ReplyDeleteI 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.
Thanks,
Sreeni
Hi Bruno,
ReplyDeleteI'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!
Hi Bruno & all,
ReplyDeleteHow 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())
delmbo.delete();
delmbo.save();
Thanks & Kind regards
Bobby
Hi Bruno, There are couple of topics for which the hyperlink seems to be broken, can you pls help.
ReplyDeleteHello Bruno,
ReplyDeleteIn 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?
Hi,
ReplyDeleteI 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.
Ciao Bruno,
ReplyDeleteho 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?
Grazie,
Damiano Vittone
hi Bruno, (or anyone who knows the answer)
ReplyDeleteWhat specific java framework is Maximo built on? I have done struts and faces but this is no where near them. Thanks
Hi Bruno,
ReplyDeleteAppreciate 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'
This comment has been removed by a blog administrator.
ReplyDeleteHi Bruno,
ReplyDeleteWhat is with that all links to commercial sites? Are some mandatory adds? Looks bad.
This is just spam advertising.
DeleteI have changed moderation settings for comments.
Hope it will solve this problem.
Bye