Скриптовый модуль 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);