Tips for using Eclipse with Jython
After you hopefully read the article about setting up Eclipse for Maximo Jython development, there are some Tips & Tricks to get the best results from using Eclipse in combination with Jython. A short summary can be found here:
You often use so called implicit variables when you program in context of a launchpoint. The best known variable is mbo which is used quit often. If you use this variable in context of Eclipse it will throw an error in the GUI, because it has never been declared in context of the script.
My best practice is to assign these variables at the beginning of the script to another variable even using a more meaningful variable name (or even the same name) and using the @UndefinedVariable tag. The above sample would now looks like this and will not throw any error:
workorderMbo = mbo # @UndefinedVariable workorderMbo.getString("wonum")
Prevent Using Script In-/Out Variables
Maximo provides you the opportunity to define In-/Out Variables in context of a launchpoint. Variables defined in that way can be accessed as regular variables in Jython but will seamlessly read/change the content of an MBO attribute. This looks very handy at the beginning, but will make reading of scripts much harder, because you can never be sure which attribute a variable is really bound to. In addition you get much more issues with Undefined Variables in eclipse. So in fact of clarity I am a big fan of not using In-/Out Variables. I will show you the programming alternative to this:
assetNum = mbo.getString(“ASSETNUM”)
Now you could say that the Maximo mechanism will provide you the benefit to assign different values to a variable based on its launchpoint. The situation can also be handled quit simple using some script code:
launchPoint = launchPoint # @UndefinedVariable if launchPoint == ‘MYLAUNCHPOINT1’: assetNum = mbo.getString(“ALTASSETNUM”)
So I hope you will not see any uncovered situations but your script has now all clarity at one place.
Let Eclipse organize your Imports
Have you ever seen a Jython script which starts like this:
from java.io import * from java.rmi import * from psdi.mbo import *
This is really bad style because you will import the complete classes from which you only need a small piece. Much better:
from java.io import files from java.rmi import RemoteException from psdi.mbo import MboConstants
But how can you easily maintain the shown list? Quit easy: Don’t care about – Eclipse will help you. Never define an Import manually!
Just write your code using an method from a class library. When you use an method not yet imported Eclipse will help you with an error. Just place your mouse over the error and you will get a hint like this:
Now press the CTRL-1 one key and Eclipse will show you how it might solve the issue:
By selecting the first option “Import MXServer (psdi.server)” Eclipse will create the import statement for you:
from psdi.server import MXServer
On the other hand side, when you no longer need an import Eclipse will show a warning on that import:
You can just delete the line. Even when you delete a line to much you now know an easy way to restore the imports.
Use a Revision Control System
I think it is agreed best practice to have a Revision Control System in place when you develop more than some small scripts. But sometimes you do not have a choose and there is no tool available in your environment. For that case there is a cool, but not well known function within Eclipse. The Team function provides a local history of your edits within the last 7 days. You do not have to activate it, it’s just there!
To get an older file version right click on the File and select Team > Show Local History…
You can now right click an entry and either open it directly or compare an old version with the current version. That is a very nice feature.
How about the 7 days? You may want a longer retention period for your files.
Select: Window > Preferences in the menu.
In the tabs on the left select: General > Workspace > Local History
In this configuration page you can either completely remove time limits for this function or extend the number of days and size for the history.