Примеры скриптов кастомизации
Добавление в текст оповещения последнего комментария к объекту
Если комментарий отсутствует в оповещении указано "отсутствует".
//Категория: Кастомизация оповещения //Назначение: Cкрипт отправляет в письме оповещения последний комментарий, если комментарий отсутствует в оповещении указано "отсутствует" //ИСПОЛЬЗОВАНИЕ ПЕРЕМЕННОЙ------------------------------------------- // В тело оповещения вставляется переменная: ${notification.scriptParams['comm']} //ОСНОВНОЙ БЛОК------------------------------------------------------ def commentList = utils.comments(subject) notification.scriptParams['comm'] = commentList.isEmpty() ? "отсутствует" : commentList[commentList.size() - 1].text
Добавление получателей оповещения из атрибутов
//Категория: Кастомизация оповещения //Назначение: /** * Данный скрипт оперирует следующими понятиями: * - ПОЛУЧАТЕЛЬ * Атрибут содержащий данные необходимые для отправки оповещения. * Получатели могут быть либо строкой, либо ссылкой на бизнес-объект, либо набором ссылок на бизнес-объекты, либо обратной сссылкой. * Если получатель - строка, она должна содержать адрес эл. почты. * Если получатель - ссылка(ки) на бизнес-объект, бизнес-объект должен иметь атрибут с кодом "email" (например, класс "Сотрудник") * - ТЕКУЩИЙ ОБЪЕКТ (subject) * Объект который стал причиной отправки оповещения. Например, если оповещение вызвано сменой статуса запроса, текущим объектом будет запрос. * - ПОЛУЧАТЕЛЬ ТЕКУЩЕГО ОБЪЕКТА - задается параметром RECIPIENTS. * - СВЯЗАННЫЙ ОБЪЕКТ - задается параметром LINKED_OBJECTS * Объект связанный с текущим при помощи одного из атрибутов. * Атрубуты связи могут иметь любой из следующих типов: * - ссылка на бизнес-объект * - набор ссылок на бизнес-объекты * - обратная ссылка * Бизнес-объект может быть любого типа. * - ПОЛУЧАТЕЛЬ СВЯЗАННОГО ОБЪЕКТА - задается параметром LINKED_RECIPIENTS. * * Алгоритм работы: * Скрипт ищет ПОЛУЧАТЕЛЕЙ оповещения в атрибутах ТЕКУЩЕГО ОБЪЕКТА и/или в атрибутах СВЯЗАННЫХ ОБЪЕКТОВ. * Если находит, добавляет к списку получателей оповещения. Если не находит, пишет сообщение в лог и продолжает поиск. */ //ПАРАМЕТРЫ---------------------------------------------------------- def RECIPIENTS = [ //получатели текущего объекта (коды атрибутов объекта subject) '', '' ] def LINKED_OBJECTS = [ //связанные объекты (коды атрибутов объекта subject) '', '' ] def LINKED_RECIPIENTS = [ //получатели связаных объектов (коды атрибутов связанных объектов) '', '' ] def LOGGING_IS_ENABLED = false // true - логирование включено, false - логирование отключено //ФУНКЦИИ------------------------------------------------------------ def foreach(objects, Closure closure) { if(!objects) return false if(objects instanceof Collection) objects.each(closure) else closure(objects) return true } def extractAttribute(object, String attribute) { try { object[attribute] } catch (e) { null } } //ОСНОВНОЙ БЛОК------------------------------------------------------ def countOfRecipients = 0 def log = { message -> if(LOGGING_IS_ENABLED) logger.debug(message) } def error = { message -> if(LOGGING_IS_ENABLED) logger.error("Не удалось добавить получателей ($message)") } def addEmail = { String email, String title -> log("Добавление получателя: '$title <$email>'") notification.to[email] = title countOfRecipients++ } def addRecipientsByCodes = { object, attributes -> attributes.findAll().each { log("Обработка атрибута: '$it'") def recipient = extractAttribute(object ,it) if(!recipient) { error("атрибут не существует или пуст") return } if(recipient instanceof String) addEmail(recipient, '') else { foreach(recipient) { def email = extractAttribute(it, 'email') if(!email) { error("объект ${it.getMetainfo()}='${it.title}' не содержит атрибут 'email' или он пуст") return } addEmail(email, it.title) } } } } log("Скрипт добавления получателей оповещения") log("Поиск по атрибутам объекта subject: ${subject.getMetainfo()} = '${subject.title}'") addRecipientsByCodes(subject, RECIPIENTS) log("Поиск по связанным объектам") LINKED_OBJECTS.findAll().each { attribute -> log("Обаботка атрибута связи: '$attribute'") def object = extractAttribute(subject, attribute) if(!object) { error("атрибут не существует или пуст") return } def result = foreach(object) { log("Обработка связанного объекта: ${it.getMetainfo()} = '${it.title}'") addRecipientsByCodes(it, LINKED_RECIPIENTS) } if(!result) error("атрибут пуст") } log("Всего добавлено получателей: $countOfRecipients")