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