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

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

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

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

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

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

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

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

  • При нажатии кнопки "Выполнить скрипт" или сочетания клавиш 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])
}
}