Maximo формула, которая использует пользовательскую формулу функции / сценарий автоматизации? - PullRequest
1 голос
/ 24 января 2020

В Maximo 7.6.1.1:

Я хотел бы создать формулу атрибута, использующую пользовательскую формулу функции / сценарий автоматизации.


Я пытался сделать это с помощью Шаги ниже, но, к сожалению, я получаю сообщение об ошибке при попытке использовать его в WO Tracking:

BMXAA3761E - The event has failed. Ensure that the event is registered correctly.
See the log file in the APP HOME directory for more details about the error.
null

Шаги:

  1. Создать скрипт автоматизации : enter image description here

  2. Добавить / изменить формулу Функция: enter image description here

  3. Добавить / Изменить формулу для атрибута: enter image description here

  4. Создать WO. Сохраните его, чтобы вызвать формулу атрибута.

  5. Ошибка:

enter image description here

Из журнала SystemOut:

Caused by: 
java.lang.NullPointerException
    at com.ibm.tivoli.maximo.expression.FormulaMboEventListener.preSaveEventAction(FormulaMboEventListener.java:213)
    at psdi.server.event.EventTopic$Subscription.preSaveEventAction(EventTopic.java:731)
    at psdi.server.event.EventTopic.preSaveEventAction(EventTopic.java:342)

Кто-нибудь знает, почему я получаю эту ошибку?

Смежный вопрос здесь: Могут ли формулы Maximo возвращать ноль?

Ответы [ 2 ]

1 голос
/ 24 января 2020

Из того, что я вижу, этот preSaveEventAction метод не ожидает значения null и добровольно вылетает. Посмотрите на метод com.ibm.tivoli.maximo.expression.Expression.eval() из Javado c. Он возвращает BigDecimal, подсказку, что формула должна возвращать число.

https://developer.ibm.com/static/site-id/155/maximodev/7609/maximocore/businessobjects/

Итак, причина, по которой вы получаете эту ошибку, заключается ваш скрипт возвращает недопустимое значение, как здесь: Может ли формула Maximo возвращать ноль?

1 голос
/ 24 января 2020

Не уверен, какую проблему вы пытаетесь решить. Если вы просто пытаетесь поиграть с формулой, у меня мало опыта с ней, но, насколько я понимаю, она может только вернуть число. Так что возвращать ноль невозможно. (Хотя есть функция SETVALUENULL, которую можно использовать для установки другого поля на ноль, но сама функция возвращает 0 и 1).

Если цель состоит в том, чтобы вернуть значение координаты X, Y в рабочее задание из Asset / Location / Service Address и установив его в null, когда нет значения, как насчет того, чтобы мы все еще использовали стандартную формулу, и пусть он возвращает 0, когда все равно null. Затем мы создаем отдельный сценарий точки запуска атрибута для события «validate» атрибута ERI, проверяем, имеет ли значение 0, затем мы заменим его на ноль, используя этот код:

    if mbo.getDouble("eri") == 0:
      mbo.setValueNull("eri")
...