ускорение процесса согласования документов
руководителя подписывают документы электронной подписью (ранее только 5)
мигрированных документов
мигрированных контрагентов
мигрированных персон
Территориальный фонд обязательного медицинского страхования Свердловской области (ТФОМС СО) в прошлом году провел импортозамещение в сжатые сроки (о чем представил зявку на Awards).
На текущем этапе потребовалось пенести данные заказчика из MS Sharepoint в Directum RX.
Результат - автоматизированный импорт документов и справочников из MS Sharepoint в Directum RX (v.4.3 на момент миграции):
1. Реализован универсальный механизм получения данных списков MS Sharepoint без обращения к REST API, напрямую из БД.
2. Автоматическая генерация SQL запросов для экспорта данных справочников и документов, результаты сохраняются в JSON.
3. Многопоточный экспорт файлов документов и электронных подписей из MS Sharepoint через WEB.
4. Заливка справочников в систему с помощью сервиса интеграции Directum RX.
5. Отдельное решение для Directum RX, которое сводит данные воедино:
6. Итоговый стек: Python скрипты, JSON для промежуточного хранения, сервис интеграции, фоновые процессы на стороне RX.
Фоновые процессы оптимизированы c учетом домиграции, это облегчило импорт документов по частям (годам).
Итоговая архитектура решения
В итоге сложности преодолели и реализовали масштабную миграцию:
Сроки разработки: с апреля по июнь 2022, параллельно с разработкой основного функционала.
Краткая история боли и преодоления сложностей в проекте.
Во время предварительной оценки реализуемости проекта была дана положительная оценка: "Я тут посмотрел в интернете, у шарепоинта есть API, всё реализуемо, надо заложить немного больше часов с поправкой на незнакомую систему".
Ситуация осложнялась тем, что поддержка старой системы была уже прекращена, а в нашей команде на момент начала проекта не было компетенций по работе с MS Sharepoint.
Соответственно, идти по традиционному простому пути - "мы выдвигаем спецификации - в каком виде нам нужны данные, а команда поддержки исторической системы их нам выкладывает в нужном виде" - немного не получилось.
Еще усложнение - разные подходы систем к хранению приложений - в MS Sharepoint одна карточка документа и несколько файлов, привязанных к карточке. А в Directum RX одна карточка на один файл и несколько документов - приложений.
Пример карточки - документ
В ходе анализа выяснили, что есть несколько вариантов доступа к данным:
В рамках проекта пришлось попробовать всё!
Для целей миграции в локальной сети Заказчика был поднят стенд c доступом к копии данных. Усложнялось всё тем, что сам стенд миграции не обладал доступом в интернет, так что закинуть файл можно было только через буфер обмена по RDP.
Поэтому простые вещи: nuget add, pip install – стали нетривиальными. Это в итоге дало перевес в сторону скриптового решения по части экспорта – скрипты меньше весят и легче править/передавать.
Что может быть лучше для .NET разработчика, чем уже готовый пакет, лежащий на Nuget? К сожалению, состыковались проблемы:
Пробуем привычное решение - Rest API, благо там под капотом вполне себе привычная уже OData (наивный). Форматы вывода - JSON и XML, привычный набор.
Для экспериментов начали со сравнительно маленького списка - контрагенты.
Пример карточки – запись справочника «Контрагенты»
Грабли, старательно разложенные разработчиками MS в реализации OData:
SOAP вполне успешно справляется с сериализацией сложных типов и успешно выдаёт всё необходимое, но метод доступа не профильный, документации крайне мало и собрать корректный запрос поиска c постраничной навигацией для всех необходимых типов документов было довольно сложно, вариант был помечен как запасной.
Единственный инструмент, с которым всё заработало легко - добавили оснастку, и обращаемся к нужным спискам нужных подсайтов.
Что хорошо - в результирующем файле было достаточно информации, чтобы спокойно импортировать те же справочники.
Пример экспортированной записи
Что плохо:
Фрагмент кода импорта из Powershell
В итоге всё намекало, что через БД будет лучше.
Если кратко - НЕ РЕКОМЕНДУЕТСЯ всеми, кто что-либо рассказывал об этом (How do I query the Sharepoint database? - Stack Overflow).
На самом деле организация данных в БД довольно логична - есть Site (основная единица), есть Web (подсайт), есть Lists (списки документов в пределах подсайта) и есть Docs (это и документы, и записи справочников в терминологии Sharepoint).
Всё немного усложняется тем, что подсайт создаётся каждый год, внутри него копии списков (документы, задачи).
Структура организации данных
БД Sharepoint в MS SQL
Больше всего боли при анализе и импорте данных доставила излишне гибкая таблица в БД, которая хранит в себе ЗАПАСНЫЕ ПОЛЯ НА ВСЕ СЛУЧАИ и ВСЕ ЗНАЧЕНИЯ ПОЛЕЙ ДЛЯ ВСЕХ ДОКУМЕНТОВ И СПРАВОЧНИКОВ, которые используются во всех справочниках и документах (как если бы sungero_content_edoc + все databooks из Directum RX собрали в одной таблице).
Ключевая таблица, содержащая все данные
То есть - 750 инт полей, 1000 битовых полей и т.д., добавлено разработчиками заранее и никогда не планировало меняться (640 кб памяти хватит всем! (с)).
В результатах запроса это поле выглядит чуть получше.
Содержимое столбца tp_ColumnSet для отдельной записи
Но ключевая проблема заключается в том, что для разных копий одного и того же списка в подсайтах для разных лет - одни и те же данные могут храниться в разных столбцах таблицы. То есть для каждого справочника в каждом году требовалось довольно сложным образом анализировать необходимые столбцы для привязки к свойствам документов, чтобы получить запросом все необходимые данные.
Еще проблема – метаданные для списков с маппингом свойств документов на поля БД были закодированы.
Еще одним усложняющим фактором оказалось решение EOS, которое для своего специфичного функционала реализовало параллельную структуру хранения данных во второй БД.
Еще одной проблемой оказалась странная структура хранения тел документов в БД (особенность Sharepoint), проще оказалось на основе имеющихся данных вычислить для каждого документа HTTP(S) ссылку на актуальную версию, а потом в несколько потоков скачать все файлы документов и положить их в набор каталогов, с именами, которые позволяют удобно привязать каждый файл к нужному документу.
ТФОМС Свердловской области уже почти год пользуется Directum RX.
Статья: Directum RX в ТФОМС Свердловской области: импортозамещение в сжатые сроки
Наталья Титкова, первый заместитель директора — заместитель директора по ОМС: |
Возможна модификация под импорт данных из любой другой системы, потребуется дописать часть коннектора к сторонней системе.
Проще всего будет адаптировать под другой экземпляр Sharepoint.
Руководитель проекта – Вера Вафина |
|
Заместитель руководителя проекта, аналитик – Александр Ершов |
Разработчик-рецензент Алексей Присяжный |
Разработчик Анастасия Матушкина |
Разработчик Константин Бастылев |
Опубликовано:
14 марта 2023 в 11:34
Обсудите реализацию с экспертом Directum