Вывод пользовательских сообщений об ошибке

Вывод пользовательских сообщений об ошибке без использования методов скриптового API:

  • Конструкция для вывода сообщений в интерфейс оператора в скриптах условий на вход в статус / выход из статуса:

    return "message"

Вывод пользовательских сообщений об ошибке с использованием методов скриптового API. Для доступа к методам используется утилитарный метод api.utils или его короткий псевдоним utils:

  • utils.throwReadableException(message, args)

    Вывод в лог пользовательского сообщения об ошибке (message). В интерфейс оператора будет выводиться стандартное системное сообщение об ошибке.

    Метод используется в скриптах условий и действий при входе в статус / выходе из статуса и в скриптах синхронных действий по событиям.

    Метод не может вызываться из консоли.

    Параметры метода:

    • message — формат сообщения об ошибке для лога. String;
    • args — аргументы к формату сообщения. Object.
  • utils.throwUiReadableException(message, args)

    Вывод пользовательского сообщения об ошибке в интерфейсе оператора (на форму) и в лог (консоль). В интерфейс оператора будет выводиться сообщение, которое было передано в данный метод. Никаких дополнительных системных сообщений к тексту ошибки не добавляется.

    Форматы сообщений должны соответствовать спецификации java.util.Formatter. Так же допускается указывать обычный текст вместо форматов. В этом случае следует вместо массива аргументов указывать null.

    Метод используется в скриптах условий и действий при входе в статус / выходе из статуса и в скриптах синхронных действий по событиям.

    Параметры метода:

    • message — формат сообщения об ошибке для интерфейса оператора, сообщение будет продублировано в лог. String;
    • args — аргументы к формату для интерфейса оператора, дублируется в лог. Object.
  • utils.throwReadableException(message, messageArgs, uiMessage, uiMessageArgs)

    Вывод различных пользовательских сообщений об ошибке в интерфейсе оператора и в лог (консоль). Форматы сообщений должны соответствовать спецификации java.util.Formatter. Так же допускается указывать обычный текст вместо форматов. В этом случае следует вместо массива аргументов указывать null.

    Метод используется в скриптах условий и действий при входе в статус / выходе из статуса и в скриптах синхронных действий по событиям.

    Метод не может вызываться из консоли.

    Параметры метода:

    • message — формат сообщения об ошибке для лога. String
    • messageArgs — аргументы к формату сообщения для лога. Если аргументы для форматирования не требуются, то они задаются как [] as String[]
    • uiMessage — формат сообщения об ошибке для интерфейса пользователя. String
    • uiMessageArgs — аргументы к формату сообщения для интерфейса пользователя

    Для скриптов условий при входе в статус / выходе из статуса рекомендуется использовать методы return и utils.throwUiReadableException

    Пример 1:

    utils.throwReadableException("Внимание! нельзя менять категорию на %s", ['меньшую'] as String[], "Внимание! нельзя менять %s %s",['категорию', 'на меньшую'] as String[]);

    Пример 2:

    utils.throwReadableException("Внимание! нельзя менять категорию на меньшую", [] as String[], "Внимание! нельзя менять категорию на меньшую", [] as String[]);

  • Использование конструкции try-catch (обработчик исключений). При использовании конструкции try-catch в api исключение нужно пробрасывать дальше, иначе некоторые системные проверки будут игнорироваться и транзакция будет завершаться успешно. Либо, в зависимости от ожидаемого поведения, вынести действие в отдельную транзакцию с помощью метода api.tx.call.

    Пример. Получение содержимого файла.

    Считываем содержимое файла как массив байтов. Файл не должен быть слишком большим, поскольку его содержимое будет помещено в оперативную память, что может негативно сказаться на производительности. Не следует использовать в одном скрипте вместе с методами добавления файлов (например, utils.attachFile), т.е. добавление файла и его считывание одним скриптом (или в одной транзакции), может привести к ошибке.

    Copy
    def file = fileList[0] // объект типа "Файл"
    try
    {
    byte[] data = utils.readFileContent(file)
    }
    catch(e)
    {
    logger.error "Ошибка при чтении содержимого файла из файлового хранилища"
    utils.throwReadableException(e.message, [] as String[]); // также можно использовать метод "throw e" 
    }