service.error() или service.setWarning() в Maximo automation javascript не показывает всплывающее окно в пользовательском интерфейсе

#javascript #service #automation #popup #maximo

#javascript #Обслуживание #автоматизация #всплывающее окно #maximo

Вопрос:

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

  1. Я пытаюсь вызвать service.setWarning(), но скрипт все равно обрабатывает вместо отображения предупреждающего сообщения, если я выполню какое-либо взаимодействие с пользовательским интерфейсом позже, это предупреждающее сообщение будет отображаться случайным образом позже.
  2. Затем я пробую service.error(), который должен показать сообщение об ошибке, аналогичное сообщению об исключении в Maximo, скрипт перестает выполняться, но всплывающего сообщения нет.
  3. Если я проверю SystemError.log, я смогу увидеть как предупреждение, так и сообщение об ошибке, отображаемые в журнале?

Итак, что является причиной этого и как я могу заставить его вести себя правильно?

EDIT1: вот сценарий, я уже настроил сообщение в конфигурации базы данных (запрос группы сообщений, messagekey 2VENDORS):

     load("nashorn:mozilla_compat.js");
importPackage(Packages.psdi.security);
importPackage(Packages.psdi.mbo);
importPackage(Packages.psdi.server);

var mxServer = MXServer.getMXServer();
var userInfo = mxServer.getSystemUserInfo();

var rfqLineSet = mbo.getMboSet("RFQLINE");
var totalCost = 0;
var current_datetime = new Date();
var today = current_datetime.toISOString();

for(var currMbo=rfqLineSet.moveFirst(); currMbo!=null; currMbo=rfqLineSet.moveNext()) { 
    totalCost = totalCost   currMbo.getDouble("LINECOST");
}

if (totalCost < 50000) {
    var rfqVendorSet = mbo.getMboSet("RFQVENDOR");
    
    if (rfqVendorSet.count() > 2) {
        service.error("RFQ","2VENDORS",null);
    }
}
  

Версия Maximo 7.6.1

EDIT2: я попробовал service.yncerror («ЗАПРОС», «2VENDORS», null); который должен отображать всплывающее сообщение об ошибке «да / нет», но с той же проблемой, оно появляется только в SystemError.log

EDIT3: я провел несколько тестов и обнаружил, что если я пишу код на Jython, то всплывающее окно работает, но не на Javascript. Как это может быть?

ОБНОВЛЕНИЕ: я перевел все свои скрипты на использование python вместо javascript, кажется, что Maximo лучше всего работает со сценарием автоматизации, написанным на python.

Спасибо.

Комментарии:

1. Пожалуйста, добавьте свой код и предупреждения / ошибки к вопросу

2. На какой версии Maximo вы работаете?

3. Я добавил сценарий и версию в вопросе.

4. Что произойдет, если вы измените строку «service.error …» на throw MXApplicationException("RFQ", "2VENDORS"); , что произойдет? Вы все еще получаете свою ошибку только в журналах?

Ответ №1:

«Предупреждения» в Maximo — это некоторые биты данных, которые просто передаются вместе с набором MBO. В качестве предупреждения они не должны останавливать выполнение, просто сообщают вам о чем-то важном, но они даже не будут делать этого самостоятельно. В какой-то момент вам нужно что-то сделать, чтобы извлечь предупреждения из набора и отобразить их. Если вы этого не сделаете, Maximo будет сам по себе для определенных действий (обычно для тех действий, которые будут включать предупреждение, добавленное самим Maximo), но, вероятно, это не тот случай, когда вы действительно хотите, чтобы оно отображалось. Я видел, как многие люди путают это и не понимают, что это за предупреждения или как они на самом деле работают.

«Ошибки» предназначены для логических сообщений, останавливающих работу. Что-то пошло не так, и пользователь должен знать об этом, прежде чем запускать больше логики. Это больше похоже на ваш вариант использования. Ошибки по-прежнему должны быть сообщением пользователю, поэтому вы должны предоставить сообщение для метода ошибки. Вы не можете просто поместить туда любую строку, которую хотите, в качестве своего сообщения (ну, вы не должны), поскольку это не позволяет Maximo переводить сообщение или заполнять переменные сообщения. Это также означает, что вам нужно изменять код всякий раз, когда вы хотите изменить сообщение, вместо простого изменения конфигурации в реальном времени. Вместо этого вам нужно перейти к конфигурации базы данных и добавить туда новое сообщение. Когда вы это сделаете, вы создадите группу сообщений и значение ключа сообщения для своего сообщения. Теперь, когда вы вызываете метод error, вы передадите эту группу ошибок и ключ ошибки в качестве параметров. Maximo примет это, найдет его в таблице сообщений, а затем отобразит сообщение, связанное с этой группой и ключом для вашего настроенного языка. В это время он также может заменить некоторые специальные переменные сообщения, но это урок для другого раза.

Например, вы можете перейти к конфигурации базы данных и открыть диалоговое окно для сообщений и добавить сообщение «Значение, которое вы ввели в поле «количество», не является числом. Пожалуйста, введите номер, прежде чем продолжить «. и дайте ему группу сообщений «MyCustomGrp» и ключ «NotANumber». Затем в вашем коде, когда вы хотите остановить код и отобразить это сообщение, вы должны вызвать service.error("MyCustomGrp", "NotANumber") .

Другая потенциальная проблема, с которой вы можете столкнуться, заключается в том, что вам нужно запускать код, который выдает ошибку, каким-либо образом связанную с интерактивным сеансом пользователя. Как правило, это само собой разумеющееся, но есть некоторые вещи, которые вы могли бы сделать, чтобы ваш код выполнялся отдельно от этого интерактивного сеанса пользователя. Если вы видите сообщение об ошибке в журналах, значит, вы правильно настроили эту часть, и это, вероятно, означает, что ваш код не является частью интерактивного сеанса пользователя. Здесь очень важно знать остальную часть вашего кода.

Комментарии:

1. привет, я добавил скрипт в соответствии с просьбой, пожалуйста, посмотрите, спасибо.