Release 3.0.0

Дата выхода: 03.07.2025

Данный релиз содержит множество новых возможностей и улучшений, но также включает в себя ряд важных инфраструктурных изменений, требующих настройку конфигурации платформы.

Важные инфраструктурные изменения

Кеширование

Имеющиеся механизмы кеширования переориентированы на использование redis или совместимых с ним по api решений (Dragonfly, Valkey, KeyDB).

Начиная с версии 3.0.0 наличие redis-совместимого решения обязательно для работы платформы. Оно может быть включено в стек или быть установлено отдельно.

На данный момент конфигурирования требует только служба backend с помощью следующих переменных окружения:

Переменная Описание Пример значения
CACHE_HOST имя хоста redis или аналога cache
CACHE_PORT порт redis или аналога (по умолчанию 6379) 6379
CACHE_PASSWORD пароль redis или аналога 123456
CACHE_DB_NUMBER номер базы данных (по умолчанию 6) 6

Если ранее использовался redis для кеширования, то обратите внимание на изменение имен переменных окружения:

Старая переменная Новая переменная
REDIS_HOST CACHE_HOST
REDIS_PORT CACHE_PORT
REDIS_PASSWORD CACHE_PASSWORD
REDIS_DB_NUMBER CACHE_DB_NUMBER

Для включения в состав стека подходящей службы можно использовать Dragonfly:

  cache:
    image: docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.1
    container_name: cache
    restart: unless-stopped
    ulimits:
      memlock: -1
    deploy:
      resources:
        limits:
          memory: 1g
          cpus: "2"
    environment:
      DFLY_port: ${CACHE_PORT:-6379}
      DFLY_dbnum: 16
      DFLY_requirepass: ${CACHE_PASSWORD}
      DFLY_snapshot_cron: ${CACHE_PERSISTENT_CRON}
      DFLY_dbfilename: "persistent_dump"
    volumes:
      - osa-cache:/data
    networks:
      - private

Переменные окружения:

Переменная Описание Пример значения
CACHE_PORT порт redis или аналога (по умолчанию 6379) 6379
CACHE_PASSWORD пароль redis или аналога 123456
CACHE_PERSISTENT_CRON cron-выражение для настройки регулярности сохранения базы данных на диск */5 * * * *

Такая конфигурация добавит Dragonfly (api-совместимый с redis) с ограничениями по памяти (1 Гб), количеству ядер (2 ядра) и с сохранением в файл с маской persistent_dump в том osa-cache (обычно он уже есть в стеке) каждые 5 минут.

Новая служба worker

Служба worker предназначена для выполнения длительных задач (импорт из csv, импорт из файлов офисного формата в структурированные документы, индексация содержимого аттачментов).

Начиная с версии 3.0.0 наличие этой службы worker обязательно для работы платформы.

Пример конфигурации службы worker

  worker:
    image: ${REGISTRY_URL}/${OSA_REGISTRY_FOLDER}/worker:OSAWL_TARGET_VERSION
    container_name: worker
    restart: unless-stopped
    environment:
      - TZ
      - LOG_LEVEL
      - RABBIT_URL
      - OSA_BACKEND_URL
      - ADMIN_TOKEN
      - STARTUP_CHECK_RETRY_SECONDS
      - STARTUP_CHECK_IGNORE_ERRORS
      - OPENSEARCH_HOST
      - OPENSEARCH_API_PORT
      - OPENSEARCH_WORKER_CREDENTIALS
      - OPENSEARCH_PROTOCOL
      - OPENSEARCH_REJECT_UNAUTHORIZED
      - ATTACH_CONTENT_INDEX_NAME

Переменные окружения:

Переменная Описание Пример значения
TZ Временная зона Europe/Moscow
LOG_LEVEL уровень логирования по умолчанию debug
RABBIT_URL URL rabbitmq amqp://guest:guest@rabbitmq
OSA_BACKEND_URL URL backend OSA http://backend:3004
ADMIN_TOKEN Токена администратора для выполнения запросов в backend OSA 123456
STARTUP_CHECK_RETRY_SECONDS Таймаут повторения проверок при наличии ошибок при старте приложения 10
STARTUP_CHECK_IGNORE_ERRORS Игнорирование ошибок при старте приложения false
OPENSEARCH_HOST Имя хоста opensearch (по умолчанию opensearch) opensearch
OPENSEARCH_API_PORT Порт opensearch (по умолчанию 9200) 9200
OPENSEARCH_WORKER_CREDENTIALS Учетные данные opensearch для службы worker (по умолчанию admin:admin) admin:admin
OPENSEARCH_PROTOCOL Протокол подключения к opensearch (по умолчанию https) https
OPENSEARCH_REJECT_UNAUTHORIZED Отклонение соединения с opensearch при невалидном сертификате (по умолчанию false) false
ATTACH_CONTENT_INDEX_NAME Имя индекса opensearch для хранения содержимого аттачментов (по умолчанию attach_search) osa-attach_search

Упразднена служба remote-calc

Функции службы remote-calc перенесены в службу worker. Службу remote-runner следует удалить из стека, так как в будущем будет прекращена сборка образов remote-calc в составе платформы и новых версионных тегов для службы не будет.

Встроенный мониторинг состояния служб

Платформа способна контролировать доступность служб, необходимых для ее работы и предотвращать работу пользователей в случае недоступности критически важных служб во избежание потери и неконсистентности данных. Также на данные мониторинга влияют на доступность пользователю части функциональности платформы. Начиная с версии 3.0.0 мониторинг по умолчанию включен. По умолчанию выполняется мониторинг служб rabbit,cache,remote-runner и worker. Критически важными по умолчанию являются rabbit,cache и remote-runner. Переопределить эти перечни можно с помощью переменных окружения MONITORING_TASKS и CORE_SERVICES.

Унификация способа аутентификации служб indexer и worker в службе backend

Ранее для обращения к закрытым api службы backend в службах indexer и worker использовались переменные AUTH_TYPEAPP_REDIRECT_URLAPP_NAMESSO_API_LOGIN_URLKEYCLOAK_URLKEYCLOAK_REALM*_ACCOUNT_USERNAME и *_ACCOUNT_PASSWORD. Теперь они все упразднены и заменены аутентификацией по токену администратора, определяемому переменной ADMIN_TOKEN.

Начиная с версии 3.0.0 использование переменной ADMIN_TOKEN является обязательным для служб backend, indexer и worker. Это переменную необходимо задать значением по вашему выбору и передать в контейнеры backend, indexer и worker. Старые переменные можно удалить.

Возможность отказаться от службы ts2o1-sso

Появилась возможность отказаться от использования службы ts2o1-sso за счет встроенной в платформу аутентификации. Для этого достаточно передать в контейнер frontend переменную USE_LEGACY_SSO со значением false. После этого можно удалить службу ts2o1-sso из стека.

В случае, если служба ts2o1-sso используется для аутентификации какими-либо прикладными решениями, следует продолжить использование службы ts2o1-sso. Поддержка образа ts2o1-sso продолжится, переключение на встроенную аутентификацию является опциональным.

Более широкое применение opensearch

В платформе все более широко используется opensearch. В версии 3.0.0 opensearch используется для следующих функций:

  • поиск по бизнес-объектам (backend, indexer)
  • поиск по содержимому вложений (backend, worker)
  • поиск компонентов структурированного документа по содержимому в диалоге вставки внешнего содержимого (backend, indexer)
  • сохранение логов (log-adapter)

Несмотря на это наличие opensearch не является обязательным для работы платформы версии 3.0.0, но его установка требуется для работоспособности перечисленных функций. Также необходимо добавить службу opensearch в список мониторинга (переменная окружения MONITORING_TASKS службы backend), так как доступность этих функций определяется успешным мониторингом службы opensearch.

Рекомендуется использование opensearch версии 3 для поддержки грядущих функций платформы.

Поддержка PostgreSQL 17

Платформа протестирована для работы с версиями PostgreSQL с 12 до 17 включительно. В дополнение к образу db, основанному на PostgreSQL 12, добавлен образ db17, основанный на PostgreSQL 17. В будущем будет прекращена сборка образа db (PostgreSQL 12) в составе платформы и для новых установок предлагается использовать db17.

Если вы используете контейнер db, то рекомендуется:

  • перевести его на тег latest, если вы предпочитаете далее использовать версию PostgreSQL 12
  • предусмотреть переход на db17 с тегом latest (версионные теги отсутствуют)

Обращаем внимание, что для перехода с db на db17 нельзя только лишь заменить образ db на db17, так как будет конфликт версии файлов хранилища PostgreSQL.

Для перехода на db17 нужно:

  • бекап БД в контейнере db
  • заменить образ db на db17
  • смонтировать в контейнер пустой том
  • восстановить бекап

Ускорение загрузки веб-интерфейса

Веб-интерфейс платформы переведен на поддержку ES modules, проведено обновление и оптимизация использования библиотек. В результате этого:

  • объем загружаемых данных при открытии уменьшен в 10 раз
  • количество сетевых запросов уменьшено в 25 раз
  • скорость первого отображения интерфейса при загрузке увеличена на 40%

Поддержка браузеров

Наряду с браузерами на основе Chromium (Google Chrome, Яндекс Браузер, Brave Browser и иных) добавлена поддержка работы в иных браузерах. Ошибок не выявлено при работе в Safari и Mozilla Firefox (начиная с версии 140). Работа с более ранними версиями Mozilla Firefox также возможна, но наблюдаются отдельные недостатки (например, не работает подсветка неактивных комментариев в структурированных документах).

Учитывая возможные проблемы при работе с не Chromium-браузерами при открытии веб-интерфейса в других браузерах отображается предупреждение, которое можно скрыть.

Нововведения в структурированных документах

Возможность отключать отдельные компоненты документа

Добавлен пункт контекстного меню для включения/отключения компонента. При выключении компонента он и его дочерние компоненты не будут отображаться в просмотре, не будут экспортироваться. В редакторе выключенные компоненты визуально отличаются от включенных.

Улучшения диалога вставки внешнего содержимого

В дополнение к существующему сценарию поиска содержимого для вставки (выбор документа, затем выбор вставляемых компонентов) реализован сценарий поиска нужного содержимого без указания конкретного документа. Для переключения режимов добавлено поле "Режим добавления" с вариантами "Документ" (старый сценарий) и "Тип компонента" (новый сценарий). В режиме "Тип компонента" нужно указать тип искомого компонента, после чего будет отображен список всех компонентов указанного типа во всех документах. Также можно воспользоваться поиском по содержимому (необходим opensearch и настроенные провайдеры поиска), тогда список найденных компонентов будет сокращен. В этом режиме по-прежнему можно выбрать нужные компоненты для добавления в визуальном режиме.

Переработан редактор внешнего содержимого

В редакторе структурированных документов компонент "Внешнее содержимое" теперь выглядит по-новому:

  • тип компонента соответствует типу внешнего содержимого, а признаком того, что это внешнее содержимое является значок в заголовке
  • нажатие по тексту внешнего содержимого приводит к открытию окна с предварительным просмотром вида внешнего содержимого
  • все детали внешнего содержимого (тип, автор, документ и прочие) перенесены во вкладку "Содержимое" в панели свойств элемента

Возможность частично скрывать компоненты в режиме просмотра

В панель свойств компонента добавлена вкладка Настройки отображения. При выборе опции "Показать свернутым" в режиме просмотра компонент будет скрыт, но будет отображена надпись (значение поля "Замещающий текст"), при клике по которой компонент станет видимым.

Компонент "Компоновщик"

Добавлен новый тип компонента "Компоновщик", позволяющий отображать размещенный внутри него контент в виде вкладок или аккордеона. Заголовки вкладок определяются значением поля "Замещающий текст" вкладки "Параметры отображения" панели свойств вложенного элемента. "Компоновщик" предназначен для веб-версии документа, при экспорте все содержимое выводится в документ последовательно.

Прочие изменения

  • добавлена возможность сохранять документ в редакторе сочетанием клавиш ctrl-s/cmd+s
  • улучшена прокрутка полотна документа в панели предварительного просмотра при прокрутке редактора, повышена плавность, устранены скачки
  • изменено положение значка добавления нового комментария при выделении текста
  • при добавлении внешнего содержимого из другого документа, которое само является внешним содержимым, в данный документ добавляется первоисточник
  • исправлена ошибка при смене выбранного документа в диалоге вставки внешнего содержимого
  • исправлена ошибка экспорта таблицы markdown
  • исправлена ошибка при открытии документа после открытия обычного документа
  • исправлена ошибка при перемещении панели в просмотре
  • исправлено отображение таблицы в редакторе при свернутом или скрытом компоненте
  • исправлен алгоритм отображения подразделов в режиме презентации: теперь отображаются только те заголовки, уровень которых больше заданного в настройках

Нововведения в обычных документах

Создание публикаций для различных контекстов

В обычных документах добавлена возможность создавать блоки, отображаемые только в определенных контекстах. Блоки создаются с помощью верстки:

<div class="data-context" data-context="prod,pub">
	### prod
	Этот только для контекстов "prod" и "pub"
</div>

<div class="data-context" data-context="test">
	### test
	Этот только для контекста "test"
</div>

При просмотре документа контекст можно выбрать с помощью кнопки "Контекст" в тулбаре, а в публикации контекст задается с помощью аргумента context в url, например:

.../public/doc/1ce2a4e2-7498-4362-9335-7642a315f83c?context=test

Прочие изменения

  • добавлены иконки на панель инструментов для быстрого перехода между режимами редактирования/просмотра

Нововведения в рабочих пространствах

Виджет "Сетевой график"

Добавлен новый виджет "Сетевой график". Его возможности:

  • его данные можно фильтровать другими виджетами
  • он умеет создавать, редактировать экземпляры выбранного класса
  • он может управлять другими виджетами, фильтровать другие виджеты
  • возможность указать представление для формы

Возможность древовидного представления поля при редактировании карточки

При редактировании карточки экземпляра в рабочих пространствах появилась возможность наряду с расширенным поиском использовать древовидное представление. Для этого нужно:

  • создать представление класса
  • выбрать его для рабочего пространства
  • задать параметры в описателе поля {"treeModal":true, "parent":"00000000-0000-0000-0000-000000010003", "treeLimit":"100"}

Тогда для данного поля будет возможность выбрать древовидное представление для выбора значения. Дополнительные параметры:

  • "selectionType":"leaf" - при клике по элементу верхнего уровня загружаются все элементы
  • {"propSortId":"ид свойства сортировки"} указывает поле для сортировки

Древовидное представление таблицы

Добавлена возможность отображать данные в таблице рабочего пространства в древовидном представлении на основании родительского свойства. Для отображения дерева в таблице фактов нужен класс с отношением (сам на себя):

  • включить Древовидное представление таблицы - вкладка Данные
  • указать свойство родительского элемента Свойство для построения дерева (родитель)

Прочие изменения

  • при сохранении рабочего пространства в класс "Виджет (РП)" сохраняется информация "Виджет" (имя термина - имя заголовка виджета), "Тип виджета" и "Источник" (класс, сем-поиск, экземпляр). Эти данные можно использовать при анализе в факт-эксплорере или при поиске через древовидный поиск.
  • в настройки виджета "Таблица фактов" добавлен параметр "Запретить создание экземпляров"
  • в настройки виджета "Таблица фактов" добавлен параметр "Кнопка сохранения в карточке", отключающая автоматическое сохранение и позволяющее сохранять изменения вручную нажатием кнопки "Сохранить"
  • в виджете "Таблица фактов" с настроенным представлением можно использовать различные описатели полей для таблицы и для формы
  • добавлен учет признака "readonly" для полей типа "grid" на формах с представлениями
  • настройка виджета таблицы фактов "скрыть поле в карточке" скрывает любые свойства в карточке экземпляра, включая системные (например, "наследует классам")
  • исправлена ошибка при выборе строки в режиме группового редактирования для поля типа "grid" на форме
  • исправлена ошибка отображения добавленного элемента через иконку "+" (Добавить элемент в меню) в меню пользователя
  • исправлена ошибка, из-за которой в событии указывалось стандартное имя для класса с правилом имяобразования

Нововведения в факт-эксплорере

Переключение между типами исследуемых свойств

Добавлена возможность переключаться между типами исследуемых свойств в факт-эксплорере. По умолчанию отображаются все свойства, но есть возможность отображать только расчетные свойства или без расчетных свойств.

Прочие изменения

  • при наличии ошибки загрузки данных ошибка теперь отображается
  • исправлена ошибка запроса данных для отдельных ситуаций

Нововведения в онтокартах

Изменения в атрибутах отношений

Для атрибутов в карточке создания произвольного отношения и в карточке произвольного отношения (закладка "Атрибуты"), внесены следующие изменения:

  • "Поле не редактируется": переименовано в "Только для чтения"
  • "Общее свойство или метод": не отображается в карточке
  • "Пополняемый словарь": не отображается в карточке
  • "Является статическим": не отображается в карточке
  • "Является функциональным": не отображается в карточке
  • "Не показывать": переименовано в "Скрыть"

Прочие изменения

  • ускорено открытие онтологии под юзером без админских прав
  • при декомпозиции класса на онтокарте теперь подтягиваются также классы, связанные через комбинирование (объединение, пересечение, эквивалентность и т.п.)
  • при возникновении ошибки при слиянии экземпляров в таблице фактов не показывается бесконечная анимация загрузки
  • исправлена ошибка при установке значения "Является коллекцией" для свойства на онтокарте
  • исправлена ошибка изменения названия онтологии при выборе документа в виджете Структурированный документ
  • исправлена ошибка отображения кнопки открытия онтологии в режиме workspace, если для пользователя запрещен маршрут [Онтологии] Онтокарта в режиме workspace (workspace_map_id) (d00d1175-b8d3-454a-bf46-ceaa4c3b4bb1)

Канбан-доска для жизненного цикла

Создание экземпляров

Добавлена возможность создавать экземпляры объектов напрямую в канбан-доске из первого этапа. При создании экземпляра нужно есть возможность выбрать класс с учетом иерархии.

Прочие изменения

  • исправлена ошибка расчета высоты верхней панели
  • исправлена ошибка при получении данных канбан-доски с пустыми классами
  • исправлены ошибки замены терминов в комплексных сценариях, приводящих к неконсистентным идентификаторам

Нововведения в реестрах

  • в реестре рабочих пространств добавлен предпросмотр
  • ускорена загрузка счетчика обсуждений в реестре структурированных документов

Нововведения в пользовательском меню

  • добавлена возможность использования произвольных иконок и эмодзи в качестве иконок для элементов меню
  • добавлено контекстное меню при нажатии правой клавиши мыши по элементу меню
  • добавлена возможность создания объектов из пользовательского меню, при этом ссылка на созданный объект добавляется в меню
  • исправлено перетаскивание рабочего пространства в пользовательское меню
  • исправлено выравнивание названия пунктов в меню пользователя при переносе строк
  • исправлены проблемы при работе с пунктами в меню пользователя

Общесистемные нововведения

disjoint-отношения между классами

Теперь если между классами "A" и "B" существует отношение "disjoint", это означает что ни один экземпляр не может одновременно наследовать классам и "А" и "B". Т.е. в карточке экземпляра класса "А" в поле "Наследует классам" нельзя будет указать класс "В" и наоборот.

Важно! При импорте и экспорте онтологий из/в OWL пока используется отношение "Не пересекаются", а не отношение "disjoint" для "owl:disjointWith". Это будет реализовано в следующих версиях платформы.

Подключаемые модули в обработчиках событий

Добавлен класс "Общие функции"(2a1b52ea-d5e4-4d1b-91a1-944689f7f763).

Для использования общей функции (например, в скрипте обработчика события API) нужно указать конструкцию //use functionName//, где functionName -это название экземпляра общей функции.

Пример:

Общая функция(название экземпляра now)

function now(){const t = new Date(); return t.toISOString();}

Обработчик

//use now// --указываем, что нужно использовать общую функцию now

console.log("Date: ", now()); --само использование общей функции
console.log("btn2 clicked");
await new Promise(resolve => setTimeout(resolve, 100*1000));
return 1000;

Функция в коде и сам экземпляр можно назвать по-разному, но в таком случае надо учитывать это при работе с такой общей функцией. "Импортируется" функция по названию экземпляра, а вызывается для исполнения по тому названию, которое прописано в теле общей функции

Пример:

Общая функция (название экземпляра now)

function nowIsoDate(){const t = new Date(); return t.toISOString();}

Обработчик

//use now// --указываем что нужно использовать общую функцию now

console.log("Date: ", nowIsoDate()); --само использование общей функции
console.log("btn2 clicked");
await new Promise(resolve => setTimeout(resolve, 100*1000));
return 1000;

Настройка первого входа в систему

Добавлены две возможности настройки поведения веб-интерфейса при первом входе в систему:

  1. указать экземпляр меню пользователя через параметры url, например, https://alpha.devtas.ru/?user-menu=e8ce8e20-159a-4eb7-831b-b1604939745d
  2. в глобальных настройках (d563b211-9433-4c5b-ad66-3eaa903b8e1e) можно указать путь к приветственной странице:
{
  "welcomePage": {
    "redirectUrl": "/welcome?user-menu=e8ce8e20-159a-4eb7-831b-b1604939745d",
    "enabled": false
  }
}

Автоматический переход к приветственной странице работает с главной страницы платформы. При автоматическом переходе к приветственной странице показывается всплывающее сообщение, позволяющее отключить автоматический переход в будущем.

Результаты синхронных обработчиков

Сейчас в API OSA есть возможность выполнить SQL-функцию в ответ на возникновение события. Такие sql-функции указываются в свойстве "sql-функция для синхронной обработки события" (0a7eba31-bca0-4ce1-9a86-740976b980ae) и возвращают JSON. Эти JSON добавлены к итоговому результату, который возвращает set_data:

{
  "sql_handler_res": [ // массив результатов sql-обработчиков
    {
       "evn_row_id": "UUID", // ид события
       "res": {} // JSON-результат sql-функции
    },
    ...
  ]
}

Комментарии к объектам системы

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

  • к любым записям в любых реестрах
  • к любым объектам в онтокартах
  • к экземплярам в таблице фактов в онтокартах и в рабочих пространствах

Включение этого режима выполняется в "Меню Пользователя" > "Комментарии". После включения добавляется иконка "Комментарии" в карточке объекта (в реестрах), в панели инструментов объекта (в онтокарте) и в карточке объекта (в таблице фактов).

Все непрочитанные комментарии по всем объектам можно увидеть в новом разделе "Лаборатория" > "Комментарии", в котором показываются все непрочитанные комментарии в хронологическом порядке. Нажатие на комментарий делает его прочитанным и при обновлении страницы он более не будет отображаться.

Polling в OSA API

Реализована возможность выполнять запросы к /public/osa-api с использованием polling.

Для включения этого режима нужно в body запроса передать deferred:true. В этом режиме сервер сразу вернет ответ следующего вида с HTTP-статусом 202:

{
    "requestId": "b9e75965-abc1-4c2e-9861-b66918c28b30",
    "status": "processing",
    "createdAt": "2025-06-18T11:37:48.262Z"
}

и при этом продолжит выполнять запрос к БД. Пока запрос выполняется, можно проверять его статус по requestId. Как только запрос будет выполнен, его будет можно получить по requestId в течение 5 минут. Можно удалить результаты запроса ранее указанного времени вручную.

Ошибки, происходящие до отправки запроса в БД, выбрасываются сразу же. Ошибки, полученные в процессе работы с БД, могут быть получены при получении результата запроса.

GET /public/osa-api/:requestId/status

Проверка статуса запроса.

Успешный ответ (HTTP-статус 200):

{
    "status": "processing",
    "createdAt": "2025-06-18T11:37:48.262Z"
    "completedAt": null,
    "error": null,
}

status может принимать значения:

  • pending - самое раннее состояние, когда запрос еще не направлен в БД
  • processing - ожидание ответа от БД
  • completed - ответ получен и сохранен для последующего получения, при этом поле completedAt будет заполнено
  • error - произошла ошибка при получении ответа от БД, при этом поля completedAt и error будут заполнены

Другие варианты ответов:

  • HTTP-статус 404, если такой requestId не найден

GET /public/osa-api/:requestId

Получение результата запроса

Успешный ответ (HTTP-статус 200) по структуре соответствует аналогичному запросу к /public/osa-api без deferred:true.

Если произошла ошибка (видно по status: "error" при проверке статуса), то при запросе результата она будет выброшена также, как при запросе к /public/osa-api без deferred:true.

Другие варианты ответов:

  • HTTP-статус 404, если такой requestId не найден
  • HTTP-статус 400, если запрос еще не выполнен (соответствует status: "pending" и status: "processing")

DELETE /public/osa-api/:requestId

Удаление полученного результата запроса

Успешный ответ (HTTP-статус 204) - без тела.

Другие варианты ответов:

  • HTTP-статус 404, если такой requestId не найден
  • HTTP-статус 400, если запрос еще не выполнен (соответствует status: "pending" и status: "processing")

Возможность удаления экземпляров при экспорте/импорте

Добавлена возможность удаления экземпляров в целевой БД в рамках процедуры экспорта/импорта через API. Особенности:

  • id экземпляров к удалению в целевой БД должны быть указаны в свойстве 586c249e-bdfa-41de-ae17-2f00686666d0 (id удаленного экземпляра) экземпляра класса 1da7c25e-cb0d-4cd3-8548-da3dce1536c6 (История удаленных экземпляров)
  • при импорте в целевой БД удаляются все указанные экземпляры без контроля целостности

Миграция экземпляров между БД

Для миграции большого количества экземпляров между базами данных добавлен механизм загрузки и выгрузки данных через таблицы texp и vexp с помощью команды "act": "migration". Особенности и отличия от имеющегося экспорта/импорта через API:

  • высокая производительность при миллионах экземпляров и десятках миллионов триплетов
  • классы и отношения не переносятся (то есть нужные классы и отношения должны быть представлены в базе-приемнике)
  • события не генерируются
  • экземпляры добавляются, но не удаляются при импорте
  • триплеты существующих экземпляров синхронизируются (замещаются) при импорте

Пример запроса на экспорт:

{
  "act": "migration",
  "session": "...",
  "source": ["1778da16-103b-4cbf-88de-f2db1adeac67"],
  "date_from": "2000-10-02",
  "date_to": "2030-10-03",
  "id_export": 10
}
  • source - это json-массив идентификаторов онтокарт и/или классов (можно смешивать)
  • чтобы в экземпляры классов попали в экспортные таблицы texp и vexp, у них должна быть проставлена галочка afa12759-4df5-473c-9914-d5f6bd6e8a22 (мигрировать экземпляры)
  • перед подготовкой таблиц texp, vexp данные с указанным id_export из них удаляются (если id_export в апи-запросе не указан, то из них удаляются все данные)
  • date_fromdate_to - интервал дат последнего редактирования (по свойству 16501920-0729-444b-913f-861d87f79654). Их можно не указывать или указывать одну из них

Если ключ source отсутствует или source = null, то предполагается режим импорта (т.е. переноса из texp и vexp в t, v). Пример запроса на импорт:

{
  "act": "migration",
  "session": "...",
  "id_export": 10
}
  • id_export можно не указывать, тогда будут обрабатываться все данные из texp, vexp (а не только с таким id_export)

Для переноса данных таблиц texp и vexp можно использовать как сторонние утилиты SQL, так и новые методы в API. Для этого добавлены маршруты /api/utils/migrationData для чтения, записи и очистки таблиц texp и vexp (только для админов). table_name может быть только texp и vexpid_export - произвольный целочисленный идентификатор операции.

GET /api/utils/migrationData/:table_name/:id_export

Читает данные из указанной таблицы с фильтром по id_export и возвращает поток Newline-delimited JSON.

POST /api/utils/migrationData/:table_name

Получает поток Newline-delimited JSON и записывает данные в указанную таблицу пакетами по 1000 строк.

Возвращает {"rowCount": X}.

DELETE /api/utils/migrationData/:table_name/:id_export

Удаляет данные из указанной таблицы с фильтром по id_export.

Возвращает {"rowCount": X}.

Возможность вызова хранимых процедур

В дополнение к возможности вызова хранимых функций в методе /api/execute реализована возможность вызова хранимых процедур. Для этого нужно установить флаг c018bcef-aaeb-450c-ba85-4501dbc48ff4 (вызывать как хранимую процедуру) у экземпляра класса 29bb07c1-7446-443d-92c1-b2f3ffd93fb1 (Хранимая процедура (команда OSA)).

Создание представлений по умолчанию в set_data

Теперь при выполнении команды set_data через API не создаются/обновляются представления по умолчанию для классов. Этим поведением управляет параметр skip_view_creation, имеющий значение по умолчанию true.

Возможность создания представления класса "по умолчанию" через API

Добавилена возможность в p_api создания представления класса "по умолчанию". Пример команды:

{
  "act": "create_view",
  "session": "UUID",
  "class_ids": ["UUID", ...]
}
  • class_ids - массив id классов, для которых нужно создать/обновить представления

Пример результата:

{
	"message": "Представления классов созданы / обновлены",
  "ids": [
		{"class_id": "UUID", "view_id": "UUID"},
    ...
  ]
}
  • ids - массив id созданных/обновленных представлений

Прочие изменения

  • добавлено кеширование результатов вызова хранимых процедур через api (в запрос нужно добавить "cache": { "useCache": true, "ttl": 60000 })
  • добавлена настройка, запрещающая режим "Удалить из системы" на онтокартах ("Скрыть элементы управления OSA" для роли в JSON-настройках)
  • оптимизирована загрузка списка онтологий
  • добавлена возможность сохранить и сбросить установленные параметры для выпадающего списка при редактировании экземпляра
  • добавлена возможность настраивать глобальные настройки поиска (94e370bb-c935-4cd5-823b-b061fde71813) в классе "Глобальные настройки OSA"(d563b211-9433-4c5b-ad66-3eaa903b8e1e)
  • добавлена возможность использования служебного слова #user# в правилах вычисляемых свойств
  • добавлен вывод в сообщение об ошибке id экземпляра, для которого невозможно определить принадлежность к классу
  • исправлена ошибка формирования ссылки для сброса пароля при встроенной аутентификации
  • исправлена ошибка группового назначения в таблице фактов
  • исправлена ошибка с запросами данных после смены пользователя
  • исправлена ошибка дублирования маршрутов в карточках ролей в "Настройки" > "Роли"
  • исправлено ошибочное генерирование события удаления экземпляра при его создании
  • исправлена ошибка открытия документа из образовательного курса
  • исправлена ошибка вычисления имени значения у симметричного свойства в set_data1 с inst_owl_calc
  • исправлена ошибка в get_data для случая без поля limit с фильтрацией по корневому классу
  • исправлена ошибка импорта онтологии из файла при наличии безымянных классов
  • исправлена ошибка get_data для случая общего одинакового фильтра по всем полям запроса при наличии отдельных фильтров на некоторые поля
  • исправлен сбой в backend при длительном ожидании ответа от indexer