Скрипт текста модуля

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

Универсальный параметризованный groovy скрипт. В рамках скрипта определяются методы, которые могут использоваться в скриптах при настройке системы и классы, расширяющие groovy.lang.Script.

Для обращения к модулю и конкретному методу, определенному в нем, используется конструкция: modules.{код модуля}.{имя метода}({параметры метода}...).

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

В момент выполнения скрипта, использующего определенную в модуле функцию. Может вызываться из любого скрипта в SMP.

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

Возвращаемого значения нет.

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

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

  • user — пользователь, инициализировавший событие. Является объектом класса "Сотрудник" (employee).

    Если событие инициализировал суперпользователь, то user=null.

    Если событие инициализировано скриптом на вход в статус, то переменная user берется из контекста инициировавшего его скрипта.

    Если событие инициализировано скриптом действия по событию (скрипт действия по событию инициализирует выполнение метода из скриптового модуля), то переменную user нужно передавать явно.

    Пример: пользователь выполнил изменение атрибута → произошло изменение статуса объекта (действие по событию) → произошло изменение ответственного (действие на вход в статус) → произошло оповещение (действие по событию) .Во всех скриптах этой цепочки переменная user должна содержать сотрудника, выполнившего первоначальное изменение атрибута.

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

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

  • Можно вызывать функции одного модуля из другого модуля.
  • Чтобы класс-модуль был доступен через modules в режиме компиляции всех модулей за один раз необходимо, чтобы класс являлся расширением groovy.lang.Script и имя класса совпадало с кодом скриптового модуля.

    В одном модуле может быть объявлено несколько классов, расширяющих groovy.lang.Script. Если ни одно имя класса не совпадает с кодом модуля, то модуль не будет доступен в modules. Если хоть одно имя класса совпадает с кодом модуля, то в modules будет именно этот класс.

    Настройка режима компиляции выполняется в конфигурационном файле dbaccess.properties, см. Скрипты и скриптовые модули

  • Использование глобальных и контекстных переменных при определении переменной с аннотацией @Field приводит к ошибке выполнения любого скрипта приложения.

    Пример строки, которая приводит к ошибке:

    @Field String someVariable = utils.get('root', [:]).title

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

1. Скрипт текста модуля с кодом "example":

def hello(def who)
{
return "Hello $who"
}

Обращение к модулю в скрипте SMP:

modules.example.hello("Иванов") 
// результат "Hello Иванов"

2. Скрипт текста модуля с кодом "example". Функция создания объекта типа ou$example с определенным названием:

Обращение к функции модуля в скрипте SMP:

modules.example.createExample('Супер отдел')

3. Модуль: Bar

class Bar extends Script {

Bar() {

this(new Binding([:]))

}

Bar(Binding binding) {

super(binding)

}

Object run() {

return null

}

def sum(a,b) {

return a + b

}

}

Доступен через modules

modules.Bar.sum(3, 4)