Bewährte Verfahren für Scripting
Mit Scripting können Sie die Geschäftslogik Maximo® Manage mithilfe von Python, JavaScript, oder einer anderen JSR223-compliant Scripting-Sprache erweitern. Der gesamte Scriptcode wird in Java™ -Bytecode kompiliert und als Teil der Maximo Manage -Laufzeitcaches zwischengespeichert. Wenn das Script gestartet wird, ist es der zwischengespeicherte Bytecode, der von der Java Virtual Machine über die JSR223 -Bridge ausgeführt wird. Da der Scriptcode in demselben Thread wie andere in Java geschriebene Maximo Manage -Geschäftslogik ausgeführt wird, kann sich ein schlecht geschriebener Scriptcode negativ auf die Leistung des Systems auswirken. Befolgen Sie die Maximo Manage -Leistungsrichtlinien, da Scripting dem angepassten Code von Maximo Manage entspricht.
Wahl des richtigen Startpunkts und der richtigen Veranstaltung
thisvalue der aktuelle Initialisierungswert des Attributs ist:if priority is not None:
thisvalue=2*priorityDas MBO-Framework startet dieses Script nur, wenn der Code oder die Benutzerschnittstelle auf dieses Attribut verweist.
if service.getMbo().getString("status")=="APPR":
evalresult=False
evalresult=TrueKostenintensive Objektinitialisierungsereignisse vermeiden, wenn sie über die Registerkarte 'Liste' aufgerufen werden
from psdi.common.context import UIContext
if UIContext.getCurrentContext() is not None and UIContext.isFromListTab()==False:
..costly initialization..Achten Sie auf widersprüchliche Scripts für Startpunktereignisse
Mit dem Scripting-Framework können Sie mehrere Scripts an dasselbe Startpunktereignis anhängen. Dies stellt ein Problem dar, wenn der Script-Code erwartet, dass er in einer bestimmten Reihenfolge vor oder nach bestimmten anderen Scripts in demselben Startpunktereignis ausgeführt wird. Da das Maximo-Ereignisthema eine ungeordnete Karte ist, werden die Ereignisse ohne festen Auftrag ausgelöst. Dies kann zu Problemen führen, wenn die Bestellabhängigkeit nicht ordnungsgemäß verwaltet wird. Sie sollten den Grund für das Anhängen mehrerer Scripts für dasselbe Startpunktereignis bewerten und bewerten, ob es sinnvoller ist, sie zu einem Script zu kombinieren. Die andere Option besteht darin, sicherzustellen, dass keine Abhängigkeit zwischen den Scripts besteht.
Aufruf von 'save' in der Mitte einer Transaktion vermeiden
mbo.getMXTransaction().add(<newly created a mboset>)MboSet.count () mehrmals aufrufen
cnt = mboset.count()
if cnt<=1:
service.log(“skipping this as count is “+cnt)if mboset.count()<=1:
service.log(“skipping this as count is “+mboset.count())MboSet schließen
try:
..some code..
finally:
mboset.cleanup()Wenn Sie MboSets, nicht löschen, kann es zu Fehlermeldungen wegen unzureichendem Arbeitsspeicher kommen.
Vermeiden Sie das Mozilla -Kompatibilitätsscript für Nashorn.
Die Umstellung von Rhino und Java 7 auf Nashorn und Java 8 wird aus Leistungsgründen empfohlen. Nashorn funktioniert in Java 8 besser als Rhino. Die Verwendung des Mozilla -Kompatibilitätsscripts mit Nashorn kann zu einer schlechten Leistung in Java 8 führen.
Prüfen Sie vor der Protokollierung, ob die Protokollierung aktiviert ist.
service.log("count of mbos "+mboset.count())Dieser Code führt leider dazu, dass mboset.count() aufgerufen wird, obwohl die Scriptprotokollierung inaktiviert ist.
from psdi.util.logging import MXLoggerFactory
logger = MXLoggerFactory.getLogger("maximo.script");
debugEnabled = logger.isDebugEnabled()
if debugEnabled:
service.log("count of mbos "+mboset.count())service können Sie überprüfen, ob die Protokollierung aktiviert ist:if service.isLoggingEnabled():
service.log(“count of mbos “+mboset.count())Zugriff auf Skript-Cache vermeiden
Der Zugriff auf den Skript-Cache über den Automatisierungsskriptcode führt zu einer zirkulären Abhängigkeit und verursacht Instabilität, wenn der Skript-Cache geladen wird, d. h. bei Teilladung. Wenn Sie ein Skript schreiben, verwenden Sie Bibliotheksskripte für die modulare Skriptentwicklung und vermeiden Sie so den Zugriff auf das Skript aus dem Cache.