Скриптовый модуль restModule. Ссылки с переадресацией

Модуль restModule — скриптовый модуль, предназначенный для формирования ссылок-команд для выполнения действий с объектом и последующей переадресацией пользователя по заданному URL.

Описание restModule

Скриптовый модуль restModule — это универсальный параметризованный groovy скрипт. В рамках скрипта определяются методы, которые могут использоваться при формировании ссылок-команд для выполнения действия с объектом и переадресацией пользователя по заданному URL, например при настройке оповещений.

Для обращения к модулю и конкретному методу, определенному в нем, используется конструкция:

modules.{код модуля}.{имя метода}({параметры метода}...).

Настройки методов restModule выполняется по запросу в службу поддержки компании NAUMEN. Для загрузки модуля обратитесь в службу поддержки компании NAUMEN.

Методы, определенные в restModule

Тип сообщения

  • getMessage(String type)

    В данный метод передается значение параметра "Тип сообщения" (строка). В зависимости от переданного значения в диалоговом окне будет выводится то или иное сообщение.

    Параметры:

    • modes — массив, описывающий типы сообщения.

      def modes = ['rate', 'vote', 'call_solving1']

      Допустимые значения: [A-Za-z0-9,'\"_]* = символы латинского алфавита, цифры, обратный слеш и подчеркивание

    • case — содержание сообщения определенного типа.

    Описание метода в модуле restModule:

    def getMessage(String type)
    {
    def modes = ['rate', 'vote', 'call_solving1'];
    String message = '';
    type = null == type ? null : type.toLowerCase();
    if((type) && modes.contains(type))
    {
    switch(type)
    {
    case 'rate':
    message = 'Отдел сопровождения создан!';
    break;
    case 'vote':
    message = 'Ваша оценка выставлена!';
    break;
    case 'call_solving1':
    message = 'Запрос успешно переведен в статус решен.';
    break;
    }
    }
    return message;
    }

Код и стиль html-страницы

  • getCustomHtml()

    Определяет код и стиль html-страницы, на которую выполняется переадресация в режиме CUSTOM, см. Режимы переадресации.

    Подобных методов может быть несколько.

    Обращение к методу модуля:

    modules.restModule.getHtml

    Описание метода в модуле restModule:

    def getCustomHtml()
    {
    String html = '<!DOCTYPE html>';
    html <<= '<html>';
    html <<= '<head>';
    html <<= '<title>Sample title</title>';
    html <<= '<style>';
    html <<= 'body {font-family: Arial, Verdana, sans-serif;}';
    html <<= 'h1 {color: #ee3e80;}';
    html <<= 'p {color: #665544;}';
    html <<= '</style>';
    html <<= '</head>';
    html <<= '<body>';
    html <<= '<h1>Heading</h1>';
    html <<= '<p>first paragraph.</p>';
    html <<= '</body>';
    html <<= '</html>';
    return html;
    }

URL-внешней страницы

  • getURL()

    Определяет url внешней страницы, на которую выполняется переадресация в режиме OUTER, см. Режимы переадресации.

    Подобных методов может быть несколько.

    Обращение к методу модуля:

    modules.restModule.getURL

    Описание метода в модуле restModule:

    def getURL()
    {
    String url = 'http://naumen.ru';
    return url;
    }
    def getNaumenReglamentURL()
    {
    String url = 'http://www.naumen.ru/support/reglament/';
    return url;
    }

Методы формирования ссылок-команд

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

При переходе по ссылке-команде выполняется:

  1. Действие с объектом.
  2. Переадресация пользователя по заданному URL и открытие на странице диалогового окна с заданным сообщением.

Место переадресации определяется режимом переадресации.

Отображение диалогового окна определяется методом формирования ссылок. Сообщение диалогового окна определяется в restModule.

Методы формирования ссылок могут обращаться к методам, определенным в restModule.

Режимы переадресации

Режим переадресации (type) Место переадресации
INNER

На страницу системы.

Конкретное место зависит от режима mode:

  • на карточку объекта (mode: CARD);
  • на карточку созданного объекта (mode: SELF);
  • на форму добавления (mode: ADD);
  • на форму редактирования (mode: EDIT).
OUTER На страницу внешнего приложения, например, google.com, naumen.ru. URL-страницы задается в модуле restModule
CUSTOM На пользовательскую страницу. Код html страницы и ее стили формируются в модуле restModule
пусто

На пустую страницу системы. На страницу выводится сообщение для пользователя "операция выполнена успешно" или текст ошибки, аналогично api.rest

Ссылка для редактирования объекта (EDIT)

При редактировании объекта переадресация выполняется в любом случае, даже если операция завершена с ошибкой.

При изменении статуса объекта, если текущий статус объекта и целевой статус совпадают, то сообщение об ошибке не отображается, выполняется переадресация и изменяются остальные атрибуты объекта, определены в скрипте.

  • api.rest.editWithRedirect(obj, attributes)

    api.rest.editWithRedirect(obj, attributes, login_or_accesskey)

    Ссылка для редактирования объекта с последующей переадресацией на его карточку. Генерирует ссылку на редактирование объекта с последующей переадресацией на карточку этого объекта.

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

    Параметры метода:

    • obj — объект, атрибуты которого будут изменены при переходе по ссылке.
    • attributes — ассоциативный массив, содержащий редактируемые атрибуты объекта. Ключом элемента массива является код атрибута, значением – значение атрибута.
    • login_or_accesskey — логин или ключ авторизации пользователя для входа в систему, см. Методы API. Параметр не обязательный.

    Возвращает строку, содержащую URL-ссылку для редактирования указанного объекта.

    Пример 1:

    def obj = utils.get('serviceCall$1636001');
    def restResult = api.rest.editWithRedirect(obj, ['shortDescr' : 'Дублируются письма из портала']);
    return api.web.asLink(restResult);

    Пример 2:

    def obj = utils.get('serviceCall$1636001');
    def accessKey = api.auth.getAccessKey('username');
    def restResult = api.rest.editWithRedirect(obj, ['shortDescr' : 'Дублируются письма из портала'], accessKey);
    return api.web.asLink(restResult);
  • api.rest.editWithRedirect(obj, attributes,messageCode)

    api.rest.editWithRedirect(obj, attributes,messageCode, login_or_accesskey)

    Ссылка для редактирования объекта с последующей переадресацией на карточку этого объекта и отображением диалогового окна. Генерирует URL-ссылку для редактирования объекта с последующей переадресацией на карточку этого объекта и отображением диалогового окна.

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

    Если указан ключ авторизации (accessKey), то дополнительной авторизации не требуется

    Параметры метода:

    • obj — объект, атрибуты которого будут изменены при переходе по ссылке. UUID
    • attributes — ассоциативный массив, содержащий редактируемые атрибуты объекта. Ключом элемента массива является код атрибута, значением – значение атрибута.
    • messageCode — код типа сообщения в диалоговом окне.
    • login_or_accesskey — логин или ключ авторизации пользователя для входа в систему, см. Методы API. Параметр не обязательный

    Возвращает строку, содержащую URL-ссылку для редактирования указанного объекта.

    Пример 1:

    def obj = utils.get('serviceCall$1636001');
    def messageCode = 'call_solving1';
    def restResult = api.rest.editWithRedirect(obj, ['shortDescr' : 'Дублируются письма из портала'], messageCode);
    return api.web.asLink(restResult);

    Пример 2. С ключом авторизации

    def obj = utils.get('serviceCall$1636001');
    def accessKey = api.auth.getAccessKey('username');
    def messageCode = 'call_solving1';
    def restResult = api.rest.editWithRedirect(obj, ['shortDescr' : 'Дублируются письма из портала'], messageCode, accessKey);
    return api.web.asLink(restResult);

    Пример 3. Ссылка для редактирования объекта и переадресация на его карточку:

    http://samplehost:8888/sd/services/rest/edit/ou$1903/40xeyJ0aXRsZSI6Im91OCJ9?messageCode=rate&accessKey=f807b58d-71a1-4fd8-96fb-7fe9bd9672da&redir=inner&objparams=ou$801&mode=card

  • api.rest.editWithRedirect(type, obj, attributes, mode, objparams, func)

    api.rest.editWithRedirect(type, obj, attributes, mode, objparam, messageCode, func)

    api.rest.editWithRedirect(type, obj, attributes, mode, objparams, messageCode, func, params)

    api.rest.editWithRedirect(type, obj, attributes, mode, objparams, messageCode, func, params, login_or_accesskey)

    Генерирует URL-ссылку для редактирования объекта указанного класса/типа с определенными атрибутами, с последующей переадресацией и отображением диалогового окна. Место переадресации зависит от указанного режима переадресации.

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

    Параметры метода:

    • type — режим переадресации: INNER, OUTER, CUSTOM;
    • obj — объект, атрибуты которого будут изменены при переходе по ссылке, UUID;
    • attributes — ассоциативный массив, содержащий редактируемые атрибуты объекта. Ключом элемента массива является код атрибута, значением – значение атрибута;
    • mode — режим открытия страницы приложения, на которую осуществляется переадресация: CARD (по умолчанию), ADD, EDIT. Параметр обязательный для режимов переадресации: OUTER, CUSTOM;
    • objparams — параметры объекта, который будет открыт при переадресации (uuid при редактировании и fqn класса/fqn типа при создании);
    • messageCode — код типа сообщения диалогового окна, которое отображается при переходе на карточку объекта (необязательный параметр). Значение параметра задается в restModule и предоставляется по запросу в службу поддержки компании NAUMEN;
    • func — название модуля и функции. Параметр обязательный для режимов переадресации: OUTER, CUSTOM. Значение параметра задается в restModule и предоставляется по запросу в службу поддержки компании NAUMEN;
    • params — параметры метода. Параметр не обязательный. Значение параметра задается в restModule и предоставляется по запросу в службу поддержки компании NAUMEN.

      Значение параметра необходимо заключать в дополнительные кавычки (одинарные в двойных или экранировать двойные внутри двойных);

    • login_or_accesskey — логин или ключ авторизации пользователя для входа в систему, см. Методы API. Параметр не обязательный

    Пример 1. Возвращает строку, содержащую URL-ссылку для редактирования указанного объекта.

    Для лицензированных пользователей и для всех объектов, кроме объектов класса "Запрос" (serviceCall)): В случае выставления плохой оценки, осуществляется переход на форму создания жалобы

    def type = 'inner';
    def obj = utils.get('serviceCall$1636001');
    def messageCode = 'vote';
    def mode = 'add';
    def fqn = 'task$complain';
    def func = null;
    def params = null;
    def restResult = api.rest.editWithRedirect(type, obj, ['mark' : '2'], mode, fqn, messageCode, func, params);
    return api.web.asLink(restResult);

    Пример 2. После перевода запроса в другой статус, осуществляется переход на форму редактирования для внесения изменений

    def type = 'inner';
    def obj = utils.get('serviceCall$1636001');
    def messageCode = 'call_solving1';
    def mode = 'edit';
    def fqn = 'serviceCall$1636001';
    def func = null;
    def params = null;
    def accessKey = api.auth.getAccessKey('username');
    def restResult = api.rest.editWithRedirect(type, obj, ['mark' : '5'], mode, fqn, messageCode, func, params, accessKey);
    return api.web.asLink(restResult);

    Пример 3. После перевода запроса в статус "Выполнена", осуществляется переход на карточку компании на вкладку с новыми запросами:

    def type = 'inner';
    def obj = utils.get('serviceCall$1636001');
    def messageCode = 'call_solving1';
    def mode = 'card';
    def uuid = 'root$201';
    def func = null;
    def params = null;
    def accessKey = api.auth.getAccessKey('username');
    def restResult = api.rest.editWithRedirect(type, obj, ['state' : 'resolved'], mode, uuid, messageCode, func, params, accessKey);
    return api.web.asLink(restResult);

    Пример 4. После перевода запроса в статус "В работе", осуществляется переход на страницу с описанием SLA на сайте компании:

    def type = 'outer';
    def obj = utils.get('serviceCall$1634701');
    def messageCode = null;
    def mode = null;
    def uuid = null;
    def func = 'modules.restModule.getNaumenReglamentURL';
    def params = null;
    def accessKey = api.auth.getAccessKey('username');
    def restResult = api.rest.editWithRedirect(type, obj, ['state' : 'inprogress'], mode, uuid, messageCode, func, params, accessKey);
    return api.web.asLink(restResult);

    Пример 5. После редактирования запроса открывается пользовательская страница:

    def type = 'custom';
    def obj = utils.get('serviceCall$1646001');
    def messageCode = null;
    def mode = null;
    def uuid = null;
    def func = 'modules.restModule.getMyCustomHtml';
    def params = null;
    def accessKey = api.auth.getAccessKey('username');
    def restResult = api.rest.editWithRedirect(type, obj, ['shortDescr' : 'Начали дублироваться письма из портала'], mode, uuid, messageCode, func, params, accessKey);
    return api.web.asLink(restResult);

    Пример 6. После редактирования запроса открывается пользовательская страница с сообщением:

    def type = 'CUSTOM';
    def obj = utils.get('serviceCall$7333905');
    def messageCode = 'call_solving1';
    def mode = null;
    def uuid = null;
    def func = 'modules.restModule.getMessage';
    def params = "'call_solving1'";
    def restResult = api.rest.editWithRedirect(type, obj, ['shortDescr' : 'Новая тема'], mode, uuid, messageCode, func, params);
    return api.web.asLink(restResult);

Ссылка добавления объекта (CREATE)

  • api.rest.createWithRedirect(fqn, attributes)

    api.rest.createWithRedirect(fqn, attributes, login_or_accesskey)

    Ссылка для добавления объекта с последующей переадресацией на его карточку. Генерирует URL-ссылку для добавления объекта указанного класса и типа с определенными атрибутами, с последующей переадресацией на карточку объекта

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

    Параметры метода:

    • fqn — класс и тип добавляемого объекта. Параметр задан в виде строки, содержащей fqn класса/типа
    • attributes — ассоциативный массив, содержащий атрибуты создаваемого объекта. Ключом элемента массива является код атрибута, значением – значение атрибута.
    • login_or_accesskey — логин или ключ авторизации пользователя для входа в систему, см. Методы API. Параметр не обязательный.

    Возвращает строку, содержащую URL-ссылку для добавления объекта указанного класса/типа.

  • api.rest.createWithRedirect(type, fqn, attributes, mode, objparams, func)

    api.rest.createWithRedirect(type, fqn, attributes, mode, objparams, func, params)

    api.rest.createWithRedirect(type, fqn, attributes, mode, objparams, func, params, login_or_accesskey)

    api.rest.createWithRedirect(type, fqn, attributes, mode, objparams, messageCode, func, params, login_or_accesskey)

    Ссылка для добавления объекта с последующей переадресацией и отображением диалогового окна. Генерирует URL-ссылку для добавления объекта указанного класса и типа с определенными атрибутами, с последующей переадресацией и отображением диалогового окна. Место переадресации зависит от указанного режима переадресации.

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

    Параметры метода:

    • type — режим переадресации: INNER, OUTER, CUSTOM, см. Режимы переадресации.
    • fqn — класс и тип добавляемого объекта. Параметр задан в виде строки, содержащей fqn класса/типа
    • attributes — ассоциативный массив, содержащий атрибуты создаваемого объекта. Ключом элемента массива является код атрибута, значением – значение атрибута.
    • mode — режим открытия страницы приложения, на которую осуществляется переадресация: CARD (по умолчанию), ADD, EDIT, SELF. Параметр обязательный для режимов переадресации: OUTER, CUSTOM.
    • objparams — параметры объекта, который будет открыт при переадресации: uuid при редактировании и fqn класса/типа при создании
    • messageCode — код сообщения диалогового окна, которое отображается при переходе на карточку объекта (необязательный параметр). Значение параметра задается в restModule и предоставляется по запросу в службу поддержки компании NAUMEN
    • func — название модуля и функции. Параметр обязательный для режимов переадресации: OUTER, CUSTOM. Значение параметра задается в restModule и предоставляется по запросу в службу поддержки компании NAUMEN
    • params — параметры метода. Параметр не обязательный. Значение параметра задается в restModule и предоставляется по запросу в службу поддержки компании NAUMEN.

      Значение параметра необходимо заключать в дополнительные кавычки (одинарные в двойных или экранировать двойные внутри двойных);

    • login_or_accesskey — логин или ключ авторизации пользователя для входа в систему, см. Методы API. Параметр не обязательный.

    Возвращает строку, содержащую URL-ссылку для добавления объекта указанного класса/типа.

    Пример 1. Метод, формирующий ссылку для добавления отдела с названием 'Отдел сопровождения', с последующей переадресацией на карточку отдела

    def restResult = api.rest.createWithRedirect('ou$ouCase', ['title' : 'Отдел сопровождения']);
    return api.web.asLink(restResult);

    Пример 2. Метод, формирующий ссылку для добавления отдела с названием 'Отдел сопровождения', с последующей переадресацией на карточку отдела (с ключом авторизации)

    def accessKey = api.auth.getAccessKey('username');
    def restResult = api.rest.createWithRedirect('ou$ouCase', ['title' : 'Отдел сопровождения'], accessKey);
    return api.web.asLink(restResult);

    Пример 3. Метод, формирующий ссылку для добавления отдела с названием 'Отдел сопровождения', с последующей переадресацией на его карточку и отображением диалогового окна с сообщением о добавлении отдела:

    def type = 'inner';
    def mode = 'card';
    def uuid = 'ou$1919';
    def messageCode = 'rate';
    def func = null;
    def params = null;
    def restResult = api.rest.createWithRedirect(type, 'ou$ouCase', ['title' : 'Отдел сопровождения'], mode, uuid, messageCode, func, params);
    return api.web.asLink(restResult);

    Пример 4. Метод, формирующий ссылку для добавления отдела с названием 'Отдел сопровождения', с последующей переадресацией на его карточку и отображением диалогового окна с сообщением о добавлении отдела (с ключом авторизации):

    def type = 'inner';
    def mode = 'card';
    def uuid = 'ou$1919';
    def messageCode = 'rate';
    def func = null;
    def params = null;
    def accessKey = api.auth.getAccessKey('username');
    def restResult = api.rest.createWithRedirect(type, 'ou$ouCase', ['title' : 'Отдел сопровождения'], mode, uuid, messageCode, func, params, accessKey);
    return api.web.asLink(restResult);

    Пример 5. Ссылка для создания нового объекта и переадресация на его карточку:

    http://samplehost:8888/sd/services/rest/create/ou$StdOu/40xeyJ0aXRsZSI6InNhbXBsZU91In0=?messageCode=null&redir=inner&mode=self

    Пример 6. Ссылка для создания нового объекта и переадресация на карточку другого объекта:

    http://samplehost:8888/sd/services/rest/create/ou$ouCase/40xeyJ0aXRsZSI6InNhbXBsZU91In0=?messageCode=rate&accessKey=fb0969a7-3776-4895-bed0-da1f0f6389e8&redir=inner&objparams=ou$1919&mode=card

Ссылка для удаления объекта (DELETE)

  • api.rest.deleteWithRedirect(type, obj, mode, objparams, func)

    api.rest.deleteWithRedirect(type, obj, mode, objparams, messageCode, func)

    api.rest.deleteWithRedirect(type, obj, mode, objparams, messageCode, func, params)

    api.rest.deleteWithRedirect(type, obj, mode, objparams, messageCode, func, params, login_or_accesskey)

    Генерирует URL-ссылку для удаления объекта с последующей переадресацией.

    Параметры метода:

    • type — режим переадресации: INNER, OUTER, CUSTOM;
    • obj — объект, который будет удален при переходе по ссылке;
    • mode — режим открытия страницы приложения, на которую осуществляется переадресация: CARD (по умолчанию), ADD, EDIT;
    • objparams — параметры объекта, который будет открыт при переадресации: uuid при редактировании и fqn класса/типа при создании;
    • messageCode — код сообщения диалогового окна, которое отображается при переходе на карточку объекта (необязательный параметр). Значение параметра задается в restModule и предоставляется по запросу в службу поддержки компании NAUMEN;
    • func — название модуля и функции. Параметр обязательный для режимов переадресации: OUTER, CUSTOM. Значение параметра задается в restModule и предоставляется по запросу в службу поддержки компании NAUMEN;
    • params — параметры метода. Параметр не обязательный. Значение параметра задается в restModule и предоставляется по запросу в службу поддержки компании NAUMEN.

      Значение параметра необходимо заключать в дополнительные кавычки (одинарные в двойных или экранировать двойные внутри двойных);

    • login_or_accesskey — логин или ключ авторизации пользователя для входа в систему, см. Методы API. Параметр не обязательный.

    Возвращает строку, содержащую URL-ссылку для удаления указанного объекта.

    Пример 1. Метод формирования ссылки для удаления объекта:

    def type = 'inner';
    def mode = 'card';
    def uuid = 'ou$801';
    def messageCode = 'vote';
    def func = null;
    def params = null;
    def obj = utils.get('ou$803');
    def restResult = api.rest.deleteWithRedirect(type, obj, mode, uuid, messageCode, func, params);
    return api.web.asLink(restResult);

    Пример 2. Метод формирования ссылки для удаления объекта с ключом авторизации:

    def type = 'inner';
    def mode = 'card';
    def uuid = 'ou$801';
    def messageCode = 'vote';
    def func = null;
    def params = null;
    def obj = utils.get('ou$803');
    def accessKey = api.auth.getAccessKey('username');
    def restResult = api.rest.deleteWithRedirect(type, obj, mode, uuid, messageCode, func, params, accessKey);
    return api.web.asLink(restResult);