Архивирование запросов. Настройка автоматического архивирования запросов

Описание

Настройка автоматического архивирования запросов позволяет скрыть неактуальные, устаревшие запросы из списка.

Особенности

Особенности архивирования запросов:

  • Запросы помещаются в архив только с помощью скрипта. В интерфейсе оператора объекты класса "Запрос" (serviceCall) в архив не переводятся. Используется стандартный метод для редактирования объектов (utils.edit).
  • Процедура перевода запроса в архив выполняется для запросов в любом статусе.
  • Статусы счетчиков запроса не изменяются.
  • Связи запрос с другими объектами не разрываются.
  • Объекты, вложенные в архивируемый запрос, переводятся в архив вместе с запросом, см. Связь типа "Вложение".

Особенности архивирования массового и подчиненного запроса:

  • При архивировании массового запроса, его подчиненные запросы также переводятся в архив.
  • Подчиненный запрос не может быть помещен в архив отдельно от массового запроса.
  • При необходимости архивирования только подчиненного запроса, необходимо предварительно разорвать связь с массовым запросом.

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

Настройка задачи планировщика для автоматического архивирования запросов

Для автоматического архивирования запросов:

  1. Создайте задачу планировщика "Архивирование запросов", типа скрипт, см. Добавление задачи планировщика типа "Скрипт".

    Пример. Скрипт помещает в архив все запросы, которые находятся в статусе "Закрыт" (closed) и дата входа в статус "Закрыт" (closed) у которых старше заданного в параметре "MAX_CALL_AGE_IN_MONTH" количества месяцев.

    //ПАРАМЕТРЫ------------------------------------------------------------
    def MAX_CALL_AGE_IN_MONTH = 24 //Период времени устаревания запроса, в мес
    def CALL_STATE_FOR_ARCH = 'closed' //Статус, в котором можно архивировать запросы
    //ОСНОВНОЙ БЛОК--------------------------------------------------------
    Calendar calendar = new GregorianCalendar()
    // Получение текущей даты
    def currentDay = new Date()
    calendar.setTime(currentDay);
    // Расчет даты, начиная с которой запрос считается актуальным
    calendar.add(Calendar.MONTH, -(MAX_CALL_AGE_IN_MONTH))
    def borderDay = calendar.getTime();
    // Поиск и архивирование неактуальных запросов
    def query = api.db.query("SELECT 'serviceCall\$'||id FROM serviceCall WHERE state='${CALL_STATE_FOR_ARCH}' and stateStartTime < :date and masterMassProblem is null and removed=false")
    query.set('date', borderDay);
    def oldCalls = query.list()
    def params = ['removed':'true'];
    for (def oldCall : oldCalls) 
    {
    logger.info("Архивирование запроса: ${oldCall}")
    try{
    utils.edit(oldCall, params, true)
    }
    catch(e)
    {
    logger.error("Архивирование не удалось ${oldCall}: ${e.toString()}")
    }
    }
    return oldCalls.size()

    Если при архивировании запроса необходимо произвести дополнительные действия (очистку связанных с объектом файлов, комментариев или истории изменения объекта), то это также выполняется с помощью скрипта.

  2. Настройте ежедневное выполнение задачи планировщика, см. Настройка периодического выполнения задачи планировщика.

Отображение архивных запросов. Карточка архивного запроса

Список архивных запросов доступен для просмотра в интерфейсе оператора при нажатии на кнопку "Просмотреть архив" в панели управления списком запросов.

Особенности карточки архивного запроса: отсутствуют кнопка "Восстановить из архива" и кнопка работы с массовостью.