Procedimientos recomendados de creación de scripts
Las secuencias de comandos le permiten ampliar la lógica empresarial IBM® Maximo® Manage mediante Python, JavaScript, o cualquier otro lenguaje de secuencias de comandos JSR223-compliant. Todo el código de script se compila en el código de bytes Java™ y se almacena en la memoria caché como parte de las memorias caché de tiempo de ejecución de Maximo Manage . Cuando se inicia el script, es el código de bytes almacenado en memoria caché que ejecuta la máquina virtual Java utilizando el puente JSR223 . Puesto que el código de script se ejecuta en la misma hebra que otra lógica empresarial de Maximo Manage escrita en Java, el código de script mal escrito puede afectar negativamente al rendimiento del sistema. Siga las directrices de rendimiento de Maximo Manage porque los scripts son equivalentes al código personalizado Maximo Manage .
Elegir el punto de lanzamiento y el acontecimiento correctos
thisvalue es el valor de inicialización de atributo actual:if priority is not None:
thisvalue=2*priorityLa infraestructura MBO sólo inicia este script cuando el código o la interfaz de usuario hacen referencia a este atributo.
if service.getMbo().getString("status")=="APPR":
evalresult=False
evalresult=TrueEvitar sucesos de inicialización de objetos costosos si se invocan desde la ficha Lista
from psdi.common.context import UIContext
if UIContext.getCurrentContext() is not None and UIContext.isFromListTab()==False:
..costly initialization..Tenga cuidado con los scripts de sucesos de punto de ejecución en conflicto
La infraestructura de scripts le permite adjuntar varios scripts al mismo suceso de punto de ejecución. Esto plantea un problema si el código de script espera ejecutarlo en un orden determinado antes o después de otros scripts en el mismo suceso de punto de ejecución. Puesto que el tema de suceso de Maximo es un mapa no ordenado, los sucesos se desencadenan sin una orden fija. Esto puede provocar problemas si la dependencia de orden no se gestiona correctamente. Debe evaluar la razón para adjuntar varios scripts para el mismo suceso de punto de ejecución y evaluar si tiene más sentido combinarlos en un script. La otra opción es asegurarse de que no haya ninguna dependencia entre los scripts.
Evitar llamar a guardar en medio de una transacción
mbo.getMXTransaction().add(<newly created a mboset>)Llamando a MboSet.count () muchas veces
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())Cierre del MboSet
try:
..some code..
finally:
mboset.cleanup()Si no borra los MboSets, pueden producirse errores de memoria insuficiente.
Evitar el script de compatibilidad de Mozilla para Nashorn
Se recomienda pasar de Rhino y Java 7 a Nashorn y Java 8 por razones de rendimiento. Nashorn funciona mejor en Java 8 que Rhino. El uso del script de compatibilidad de Mozilla con Nashorn puede dar como resultado un bajo rendimiento en Java 8.
Comprobar si el registro está habilitado antes del registro
service.log("count of mbos "+mboset.count())Lamentablemente, este código hace que se llame a mboset.count() aunque el registro de script esté inhabilitado.
from psdi.util.logging import MXLoggerFactory
logger = MXLoggerFactory.getLogger("maximo.script");
debugEnabled = logger.isDebugEnabled()
if debugEnabled:
service.log("count of mbos "+mboset.count())service le permite comprobar si el registro está habilitado:if service.isLoggingEnabled():
service.log(“count of mbos “+mboset.count())Evitar el acceso a la caché de scripts
Acceder a la caché de scripts desde el código del script de automatización da lugar a una dependencia circular y provoca inestabilidad cuando se carga la caché de scripts, es decir, carga parcial. Cuando escriba un script, utilice los scripts de la biblioteca para el desarrollo de scripts modulares y evite así acceder al script desde la caché.