Скрипты, выполняемые в консоли

Описание скрипта

Произвольный скрипт, запускаемый из консоли интерфейса администратора.

Консольные скрипты по умолчанию выполняются в одной отдельной транзакции.

Место настройки скрипта

Страница "Консоль", см. Выполнение скрипта в консоли.

Когда выполняется скрипт

Скрипт выполняется:

  • При нажатии кнопки Выполнить скрипт или сочетания клавиш Ctrl+Enter в блоке "Выполнение скрипта из поля ввода".
  • При загрузке файла со скриптом в блоке "Выполнение скрипта из файла".

Кнопка Выполнить скрипт, а также кнопки для выбора файла, во время выполнения скрипта блокируются.

Результат выполнения скрипта

Скрипт возвращает строку, которая будет выдана в окне как результат после выполнения скрипта: "Скрипт выполнен за N мс. Результат выполнения: 'строка, которая была возвращена из скрипта'". Результат выполнения скрипта отображается в окне.

Для Java 11 изменился формат даты при получении groovy скриптом, вместо номера месяца используется буквенное сокращение. Например, раньше дата возвращалась как 05.11.2020, теперь будет 05 окт. 2020 г или 05 нояб. 2020 г (ru) и 05 Feb 2020(en)

В лог записывается результат выполнения (успешное или не успешное выполнение) и сам скрипт, см. Логи приложения.

Переменные и их значения

Глобальные переменные:

  • user — пользователь, инициализировавший событие. Является объектом класса "Сотрудник" (employee)). Если событие инициализировал суперпользователь, то user=null.
  • ip — ip-адрес рабочего места пользователя user. Если действие выполняется автоматически системой (а не пользователем), то переменная не определяется.
  • appVersion — версия приложения.
  • api — используется для обращения к методам api, например api.utils, api.ldap, api.timing, см. Методы API;
  • modules — используется для обращения к скриптовому модулю и конкретному методу, определенному в нем, с помощью конструкции: modules.{код модуля}.{имя метода}({параметры метода}...), см. Скрипт текста модуля;
  • logger — используется для отладки скриптов и позволяет вывести в лог на указанный уровень переданную строку, см. Отладочные сообщения.
  • utils — синоним api.utils.

Особенности скрипта

При выполнении скрипта через консоль можно задавать кодировку скрипта и максимальное время выполнения скрипта, используя специальные комментарии:

  • /*! UTF8 */ — кодировка скрипта;
  • /*& 3600 */ — максимальное время выполнения скрипта в секундах (в примере 1 час).

Если время выполнения не указано или указано неверно, то максимальное время выполнения скрипта составляет 900 секунд (15 минут).

Рекомендации

Для получения FQN класса/типа объекта рекомендуется использовать метод .getMetainfo(). Для сравнения его со строкой необходимо выполнить явное преобразование с помощью метода .toString().

В задачах планировщика обычно выполняются долгие, "тяжелые" скрипты. Рекомендуется планировать выполнение таких скриптов на ночное время или на выходные.

Примеры скрипта

1. Скрипт считает количество объектов класса "Запрос" (serviceCall) в системе на текущий момент.

utils.count('serviceCall',[:])

2. Скрипт заполняет у всех объектов класса "Сотрудник" (employee) определенного типа атрибут указанным значением.

// новое значение атрибута
def newValue = 'asdf' 
def objects = utils.find('employee$type', ['testAttr': '555'])
for(obj in objects)
{
api.tx.call {
utils.edit(obj, ['newAttr' : newValue])
}
}