Melhores práticas de script
O scripting permite que você estenda a lógica de negócios IBM® Maximo® Manage usando Python, JavaScript, ou qualquer outra linguagem de script JSR223-compliant. Todo o código de script é compilado no bytecode Java™ e armazenado em cache como parte dos caches de tempo de execução do Maximo Manage . Quando o script é iniciado, é o bytecode em cache que é executado pela Java virtual machine usando a ponte JSR223 . Como o código de script é executado no mesmo encadeamento que outra lógica de negócios do Maximo Manage gravada em Java, o código de script mal gravado pode afetar negativamente o desempenho do sistema. Siga as diretrizes de desempenho do Maximo Manage porque o script é equivalente ao código customizado Maximo Manage .
Escolha do ponto de partida e do evento corretos
thisvalue é o valor de inicialização do atributo atual:if priority is not None:
thisvalue=2*priorityA estrutura MBO inicia esse script somente quando esse atributo é referido pelo código ou pela interface com o usuário
if service.getMbo().getString("status")=="APPR":
evalresult=False
evalresult=TrueEvite eventos de inicialização de objeto dispendiosos se chamado a partir da guia Lista
from psdi.common.context import UIContext
if UIContext.getCurrentContext() is not None and UIContext.isFromListTab()==False:
..costly initialization..Cuidado com scripts de eventos do ponto de ativação conflitantes
A estrutura de script permite anexar vários scripts ao mesmo evento de ponto de ativação.. Isso representa um problema se o código de script espera executá-lo em uma determinada ordem antes ou depois de determinados outros scripts no mesmo evento do ponto de ativação Como o tópico de evento do Maximo é um mapa não ordenado, os eventos são acionados sem uma ordem fixa Isso pode potencialmente causar problemas se a dependência de pedido não for gerenciada corretamente Você deve avaliar a razão para anexar vários scripts para o mesmo evento de ponto de ativação e avaliar se faz mais sentido combiná-los em um script A outra opção é assegurar que não haja dependência entre os scripts.
Evite chamar salvar no meio de uma transação
mbo.getMXTransaction().add(<newly created a mboset>)Chamando MboSet.count () muitas vezes
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())Fechando o MboSet .
try:
..some code..
finally:
mboset.cleanup()Se você não limpar os MboSets, poderão ocorrer erros de falta de memória.
Evite o script de compatibilidade Mozilla para Nashorn
A mudança de Rhino e Java 7 para Nashorn e Java 8 é recomendada por motivos de desempenho Nashorn tem melhor desempenho em Java 8 do que Rhino. Usar o script de compatibilidade Mozilla com o Nashorn pode resultar em desempenho ruim no Java 8.
Verifique se a criação de log está ativada antes da criação de log
service.log("count of mbos "+mboset.count())Este código infelizmente resulta em mboset.count() sendo chamado, mesmo que a criação de log de script esteja desativada.
from psdi.util.logging import MXLoggerFactory
logger = MXLoggerFactory.getLogger("maximo.script");
debugEnabled = logger.isDebugEnabled()
if debugEnabled:
service.log("count of mbos "+mboset.count())service permite verificar se a criação de log está ativada:if service.isLoggingEnabled():
service.log(“count of mbos “+mboset.count())Evite acessar o cache de scripts
O acesso ao cache de scripts a partir do código do script de automação resulta em dependência circular e causa instabilidade quando o cache de scripts está sendo carregado, ou seja, carga parcial. Ao escrever um script, use scripts de biblioteca para o desenvolvimento de scripts modulares e, assim, evite acessar o script a partir do cache.