Procedure ottimali di script
Lo scripting consente di estendere la logica aziendale di IBM® Maximo® Manage utilizzando Python, JavaScript, o qualsiasi altro linguaggio di scripting JSR223-compliant. Tutto il codice script viene compilato in bytecode Java™ e viene memorizzato nella cache come parte delle cache di runtime Maximo Manage . Quando lo script viene avviato, è il bytecode memorizzato nella cache che viene eseguito dalla Java virtual machine utilizzando il bridge JSR223 . Poiché il codice script viene eseguito nello stesso thread di altre logiche di business Maximo Manage scritte in Java, il codice script scritto in modo non corretto può influire negativamente sulle prestazioni del sistema. Seguire le linee guida delle prestazioni di Maximo Manage perché gli script sono equivalenti al codice personalizzato Maximo Manage .
Scegliere il punto di lancio e l'evento corretto
thisvalue
è il valore init dell'attributo corrente:if priority is not None:
thisvalue=2*priority
Il framework MBO avvia questo script solo quando il codice o l'interfaccia utente fanno riferimento a questo attributo.
if service.getMbo().getString("status")=="APPR":
evalresult=False
evalresult=True
Evita costosi eventi di inizializzazione degli oggetti se richiamati dalla scheda Elenco
from psdi.common.context import UIContext
if UIContext.getCurrentContext() is not None and UIContext.isFromListTab()==False:
..costly initialization..
Attenzione agli script di eventi del punto di avvio in conflitto
Il framework di script permette di collegare più script allo stesso evento del punto di avvio. Ciò pone un problema se il codice dello script prevede di eseguirlo in un determinato ordine prima o dopo determinati altri script nello stesso evento del punto di avvio. Poiché l'argomento dell'evento Maximo è una mappa non ordinata, gli eventi vengono attivati senza un ordine fisso. Ciò può potenzialmente causare problemi se la dipendenza dell'ordine non viene gestita correttamente. È necessario valutare il motivo per allegare più script per lo stesso evento del punto di avvio e valutare se ha più senso combinarli in un unico script. L'altra opzione è assicurarsi che non vi siano dipendenze tra gli script.
Evitare di richiamare il salvataggio durante una transazione
mbo.getMXTransaction().add(<newly created a mboset>)
Chiamata di MboSet.count () molte volte
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())
Chiusura di MboSet
try:
..some code..
finally:
mboset.cleanup()
Se non si cancellano gli MboSets, possibile che si verifichino errori di esaurimento della memoria.
Evitare lo script di compatibilità Mozilla per Nashorn
Il passaggio da Rhino e Java 7 a Nashorn e Java 8 è consigliato per motivi di prestazioni. Nashorn ha prestazioni migliori in Java 8 rispetto a Rhino. L'utilizzo dello script di compatibilità Mozilla con Nashorn può causare scarse prestazioni in Java 8.
Verificare se la registrazione è abilitata prima della registrazione
service.log("count of mbos "+mboset.count())
Questo codice sfortunatamente causa la chiamata di mboset.count() anche se la registrazione script è disabilitata.
from psdi.util.logging import MXLoggerFactory
logger = MXLoggerFactory.getLogger("maximo.script");
debugEnabled = logger.isDebugEnabled()
if debugEnabled:
service.log("count of mbos "+mboset.count())
service
consente di verificare se la registrazione è abilitata:if service.isLoggingEnabled():
service.log(“count of mbos “+mboset.count())
Evitare l'accesso alla cache degli script
L'accesso alla cache dello script dal codice dello script di automazione comporta una dipendenza circolare e causa instabilità quando la cache dello script viene caricata, ovvero quando il caricamento è parziale. Quando si scrive uno script, utilizzare gli script della libreria per lo sviluppo di script modulari ed evitare così di accedere allo script dalla cache.