Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Утилита миграции SPToMPMigrateApp позволяет переносить миграции Vitro.Server.SPToMPMigrate (Vitro.Server.SPToMPMigrate.exe) переносит папки и файлы, созданные в системе Vitro SP, в систему Vitro MP с сохранением даты создания, авторства, версионности и прочих кастомных настраиваемых атрибутов системы.

...

Предварительные действия

Для работы утилиты нужны решения Migration, которые надо разместить в Solutions на сервере VitroMPVitro MP:

Windows - C:\Program Files\Vitro Software\Vitro\Server\Solutions\Migration
Linux - /etc/Vitro/Server/Solutions/Migration

Режимы работы утилиты

Все режимы состоят из 2 этапов - подготовка данных (Init) и обработка подготовленных данных.

Утилита запускается на машине с Vitro SP с доступом к SQL Server (база Vitro и контентная база SharePoint WSS_Content). Строка подключения к SQL читается из Conf\vitro.config.

Рядом с исполняемым файлом должны находиться config.json и каталог Scripts\ с SQL-процедурами. Логи пишутся в каталог logs\ (файлы SPToMPMigrate-YYYYMMDD-HHmm.log).

...

Режимы работы утилиты

Режимы задаются массивом ModeList в config.json и выполняются в указанном порядке.

Перед обработкой каждого режима утилита автоматически:

  1. Разворачивает SQL-процедуры procMigration_Table и procMigration_{Mode} (из Scripts\ или Scripts\{Customer}\).
  2. Выполняет procMigration_Table — создаёт или обновляет служебную таблицу Migration.
  3. Выполняет procMigration_{Mode} — заполняет таблицу Migration данными из Vitro SP.
  4. Обрабатывает подготовленные записи через API Vitro MP.

Обязательные режимы (базовая миграция структуры и связей):

  • Folder — перенос папочной структуры. Подготовка: procMigration_Folder для каждой пары из LibraryMap. Обработка: создание папок в MP.
  • File — перенос файлов. Подготовка: procMigration_File (дополнительно актуализирует папки) по LibraryMap. Обработка: загрузка файлов и версий.
  • Reference
  • Init – режим подготовки данных файлов и папок. Вызывает скрипт Scripts\init.sql. Создает таблицу Migration используемую в режимах Folder, File, Reference.
  • Folder – режим обработки таблицы Migration - перенос папочной структуры.
  • File - режим обработки таблицы Migration - перенос файлов.
  • Reference - режим обработки таблицы Migrationперенос связей между файлами и папками. Подготовка: procMigration_Reference. Переносятся связи с типом:
    • 1 - Внешняя — внешняя ссылка (вставка) на , Является / является внешней ссылкой (вставка)  для,для;
    • 2 - Внешняя — внешняя ссылка (наложение) на , Является / является внешней ссылкой (наложение) для,;
    • 3 - Связано — связано с.

Дополнительные режимы (подключаются в ModeList при необходимости):

  • Member — перенос прав Vitro «Участники». Подготовка: procMigration_Member. В MP создаётся элемент в списке «Разрывы прав» с участником из полей SP
  • IssueInit – режим подготовки данных замечаний. Вызывается скрипт issue_init.sql. Создает таблицу IssueMigration используемую в режиме Issue.
  • Issue – режим обработки таблицы IssueMigration – перенос замечаний к файлам и папкам. Маркапы переносятся.
  • MemberInit - режим подготовки переноса прав Vitro Участники. Вызывается скрипт member_init.sql. Создает таблицу MemberMigration используемую в режиме Member.
  • Member - режим обработки таблицы MemberMigration – перенос прав к файлам и папкам. Создается в VitroMP элемент в списке Разрывы прав, с участником указанном в SP у полей VitroProjectEditRole и VitroProjectFullControlRole с правом доступа Изменить.
  • Sign — перенос электронных подписей файлов. Подготовка: procMigration_Sign. Переносятся подпись, сертификат, версия, автор и дата для уже смигрированных файлов.
  • Issue — перенос замечаний к файлам и папкам. Подготовка: procMigration_Issue. Маркапы переносятся.
  • List – режим работы — работа со справочниками. Позволяет переносить данные : перенос данных справочников в VitroMP или заполнять служебную информацию sp_id на текущих справочниках в VitroMP.

Параметры утилиты

  • Vitro MP или заполнение служебного поля sp_id на существующих записях. Обычно выполняется до миграции файловой структуры (добавить "List" в начало ModeList).

Пример обязательной цепочки:

"ModeList": [ "Folder", "File", "Reference" ]

Пример с дополнительными режимами:

"ModeList": [ "Folder", "File", "Reference", "Member", "Sign", "Issue" ]

При повторном запуске режима повторно обрабатываются записи с ошибками, а также элементы, у которых в SP изменилась дата (FinishDate пустая или меньше ModifiedDate).

...

Параметры утилиты

Параметры задаются в файле config.json в каталоге с исполняемым файлом.

Описание
ПараметрПример значенияОписание
Customer"Default"Имя заказчика для кастомных SQL-скриптов в Scripts\{Customer}\. Если скрипт не найден, используется Scripts\procMigration_{Mode}.sql.
ПараметрПример значения
WebUrlhttp://sp.vitrocad.ruАдрес Vitro SP
Urlhttps://mp.vitrocad.ruАдрес Vitro MP
Loginadmin_userлогин Логин технической учетной учётной записи Vitro MP
Passwordadmin_passwordпароль Пароль технической учетной учётной записи Vitro MP
ModeList[ "Folder", "File", "Reference" ]Список и порядок режимов работы утилитыConnectionStringIntegrated Security=false;Data Source=SP2013\\SQLEXPRESS;Database=Vitro; User Id=vdbuser; Password=vdbpasswordстрока подключения к БД Sharepoint
SkipFieldMapErrortrueфлаг Флаг пропуска ошибок маппинга лукапов. Если в Vitro SP есть значения лукапов справочников, которые не получилось сопоставить сопоставились в VitroMPMP, то они выводятся в лог утилиты. Если флаг стоит При false, то утилита закончит работу в случае наличия завершит работу при наличии таких записей.
SkipUserMapErrortrueфлаг Флаг пропуска ошибок маппинга пользователей. Если в Vitro SP есть пользователи, которых нет в Vitro MP, то они выводятся в лог. Если флаг = При false, то утилита завершает работу. Критерий сопоставления пользователей - Сопоставление — по email
DefaultUserId00000000-0000-0000-0000-000000000001Guid GUID пользователя , который подставляется в случае не нахождения пользователя в Vitro MP. Критерий сопоставления пользователей - MP, подставляемый при отсутствии сопоставления по email
SwitchOffIriParsingfalseфлаг отключения Отключение обработки ссылок от скрытых символов. Может быть полезенПолезно, если в Vitro SP есть файлы или папки , названия которых содержат скрытые символы, и не могут быть перенесены из-за ошибки получения файла.с «невидимыми» символами в имени и из-за этого не удаётся получить файл
ThreadNumber2количество потоков для переноса файлов в режиме File. Все остальные режимы работают в 1 поток всегда.Количество потоков. Параллельно работают все режимы, кроме Folder (всегда 1 поток)
MigrateAllFileVersiontrueфлаг переноса всех версий файлов. Если true, то При true переносятся все версии файла, если при false, то только последняя
QrCodeReplacefalseПри true и установленном поле QR в SP тело файла формируется заново (PDF с QR-кодом), иначе файл читается из SP или внешнего хранилища
LibraryMap{ "http://sp2013/TempLibrary/Project1": "966e62c5-a803-49a0-a1be-e680d130c481",   "http: //sp2013/TempLibrary/Project2": "966e62c5-a803-49a0-a1be-e680d130c481" }- параметр для указания переносимых папок из SP в MP. В формате { “spUrl1”: “MP guid родительской папки или списка ”, “spUrl2”: “MP guid родительской папки или списка” }ModeInitрежим работы утилиты. Если не указан, то утилита работает последовательно в следующих режимах Init – Folder – File – Reference.Остальные режимы запускаются вручную при необходимости. Или если нужно пропустить некоторые режимы, то нужно запускать их вручную с указанием параметра.Переносимые корни: URL библиотеки или папки SP → GUID родительской папки или списка в MP
ContentTypeMap[ [ "Проект", "540ff572-4a29-4d8e-8dfb-8eda093c583a" ],
[ "Стадия", "64a15f4c-083e-420b-b54e-fc75d44f31b7" ],
[ "Комплект", "28a48961-35e0-43ae-ad6b-8f159cfd7202" ],
[ "Файл проекта", "6065b2ae-63e3-44aa-a92d-2d414c30f808..." ],
[ "Папка", "09ad2c16-6047-4dfb-8274-6c4a5f1edbe5..." ] ]
параметр маппинга Типов Контента SP в Тип Элемента MP. От SP нужно указывать Название ТК; от MP нужно указывать Guid ТЭ. Типы элементов, которые не указаны в данном маппинге, будут передаваться как Папка – для папок, Файл проекта – для файлов, Элемент – для элементов справочников.Маппинг типов контента SP (название) → тип элемента MP (GUID). Не указанные: папка → «Папка», файл → «Файл проекта», элемент справочника → «Элемент»
FieldMap[ [ "VitroBaseDocumentRevisionNum", "approval_count" ],
[ "VitroBaseStatus", "document_status", “sp"sp_id_list” list" ] ]
параметр маппинга Столбцов SP в Атрибуты MP. С обеих сторон используется internal name столбца или атрибута. 3-ий параметр нужен только для столбцов типа Лукап. Дефолтное значение sp_id.Маппинг столбцов SP → атрибутов MP (internal name). Третий параметр — только для лукапов (поле sp_id в справочнике MP, по умолчанию sp_id)
ListMap{ "url-sharepoint": "parentId - MP",
"http://sp2013/Lists/seStatusList": "9618f977-0447-4010-88f7-76d8edca255c" }
параметр для заполнения справочников.Справочники для режима List: URL списка SP → GUID списка MP
ListMapCriterion[ "SP InternalNameTitle", "MP InternalNamename", "SP ID InternalName(default sp_id)" ]критерий проверки для заполнения справочников. Если элемент с SP InternalName найден в справочнике, то ему проставится поле SP ID InternalName. Если не найден, то в зависимости от параметра CreateListMapItem будет ошибка или создастся новая запись в справочнике.Критерий сопоставления в режиме List. При совпадении проставляется поле SP ID; иначе — ошибка или создание записи (см. CreateListMapItem)
CreateListMapItemfalseпараметр работы режима List. Если false, то в данном режиме не будут создаваться новые записи а только пытаться проставить В режиме List: при false только проставление sp_id на текущих существующих записях. Если true, то при отсутствии сопоставления будут создаваться новые записи (подходит для полного переноса справочников с 0). Записи создаются по маппингам ContentTypeMap и FieldMap, если нужно переносить заполненные атрибутами ТК, их необходимо указать там.; при true — создание новых по ContentTypeMap и FieldMap

...

Принцип работы

  1. Определяется список ТК типов контента и Полей полей (столбцов), которые необходимо перенести из SP в MP.
  2. Создаются соответствующие Типы типы элементов и атрибуты в системе Vitro MP.
  3. Задается Задаётся конфигурация утилиты по определенным маппингам ТК и полей: маппинги ТК, полей и LibraryMap.
  4. Создаются необходимы справочники для лукапов справочники в Vitro MP. Каждый справочник на который ссылается файловая структура должен содержать служебное поле «sp_id». SP ID = ID (число) в системе Vitro SP, которое можно вывести в табличных или посмотреть на каждом элементе справочника. SP ID проставляется у каждой записи справочника Vitro MP для сопоставления ее с записью Vitro SP. Справочники заполняются с помощью утилиты или руками. Все отсутствующие сопоставления будут выведены в логе утилиты.
  5. С помощью утилиты создается таблица миграции, позволяющая отслеживать прогресс работы утилиты, переносимый объем, ошибки переноса
  6. Запускается утилита в режиме обработки папок Folder. Периодически отслеживается таблица миграции и лог утилиты на отсутствие ошибок. Особо критичны могут ошибки на папках, так как не перенесённая верхнеуровневая папка Проект повлечет за собой ошибки во всех дочерних элементах. При наличии они все должны быть устранены или вручную затерты в таблице миграции на усмотрение администратора системы. Утилита повторно обрабатывает все элементы с ошибками при повторном запуске
  7. Запускается утилита в режиме обработки файлов File. В данном режиме утилита может работать в несколько потоков. Но стоит учитывать, что утилита запускается на рабочей площадке Vitro SP и может замедлить работу системы. Оптимальное количество потоков настраивается индивидуально.
  8. Запускается утилита в режиме переноса связей Reference.
  9. Запускаются дополнительные режимы переноса Прав участников и Замечаний при необходимости.

Текущие ограничения

  1. MP с полем sp_id (числовой ID элемента в SP). Заполняются утилитой (режим List), вручную или комбинированно. Несопоставленные значения выводятся в лог.
  2. Утилита создаёт и заполняет таблицу Migration — по ней отслеживаются прогресс, объём и ошибки.
  3. Запускается режим Folder. Контролируются таблица Migration и лог. Ошибки на верхнеуровневых папках критичны: неперенесённый проект повлечёт ошибки у всех дочерних элементов. Ошибки устраняют или вручную корректируют запись в Migration; при повторном запуске режим обработает их снова.
  4. Запускается режим File. Утилита может работать в несколько потоков (ThreadNumber). Учитывать нагрузку на Vitro SP — оптимальное число потоков подбирается на площадке.
  5. Запускается режим Reference (обязательный этап после файлов).
  6. При необходимости запускаются Member, Sign, Issue (добавить в ModeList после Reference).
  7. При ошибках — анализ лога и Migration, исправление и повторный запуск нужного режима.

...

Текущие ограничения

  • Нет штатной процедуры очистки смигрированных данных. Нельзя гарантированно перенести данные, удалить их в MP и повторить перенос «с нуля» — возможны ошибки дублированияПри тестировании нет процедуры очистки от смигрированных данных. Нельзя перенести данные, удалить их Vitro MP и повторно пробовать перенести. Перенос данных в данном случае не гарантирован и будут возникать ошибки.
  • Нельзя размножать значения из одного поля SP в параметре FieldMap. Значение в левой части маппинга должно быть уникально FieldMap: левая часть маппинга (поле SP) должна быть уникальной.
  • При переносе данных в MP работают все Вычисления/Валидаторы/Автоматизации. Если нужен перенос данных 1 в 1, то необходимо удалить все вычисления/автоматизации переносимых типов элементов из списка. Затем восстановить из корзины. Или нужно проводить анализ, что текущие вычисления/автоматизации не повредят переносу данныхвычисления, валидаторы и автоматизации целевых типов элементов. Для переноса «1 в 1» их нужно временно удалить из списка и восстановить из корзины, либо убедиться, что они не искажают импортируемые данные.
  • GUID целевых списков MP в SQL-процедурах (procMigration_Reference, Member, Sign, Issue) заданы в скриптах — при другой конфигурации стенда их нужно скорректировать в Scripts\.
  • Путь к конфигурации Vitro Server (C:\Program Files\Vitro Software\Vitro\Server) задан в коде утилиты; при нестандартной установке требуется изменение и пересборка.

...

Возможные ошибки

  • ItemExistException – при попытке переноса сервер вернул ответ — при переносе MP сообщает, что файл /или папка с таким именем уже существуют. Ошибка может возникать из-за не отключенных вычислений и пересчета имени на папках или неправильно настроенном маппинге.Возможные причины: активные вычисления имён, неверный маппинг, повторный перенос без очистки.
  • ItemNotFoundException — не найден родительский или связанный элементModeNotCompletedException - ошибка при переходе между режимами. Означает, что в предыдущем режиме есть не перенесенные элементы.
  • Server Response 500 – все ошибки еще не типизированы. Необходимо заходить Аудит — смотреть аудит запросов в системе Vitro MP, и проверять, по какой именно причине элемент не перенесен. Возможные ошибки: не создан родитель, неправильно настроенный неверный маппинг, отсутствие привязок ТЭ тип элемента не привязан к библиотеке.
  • Ошибки в поле Migration.error — повторный запуск режима; при необходимости ручная правка строки в таблице Migration.
  • Сообщения о несопоставленных лукапах или пользователях в логе — заполнить справочники и учётные записи MP или использовать SkipFieldMapError / SkipUserMapError.
  • ListMapException — дубликаты sp_id в справочнике MP или не найден родитель при создании записи в режиме List.

...

Дополнительная информация

  • Guid GUID элементов в системе Vitro SP и Vitro MP совпадают. Все перенесенные Перенесённые элементы можно найти доступны по /item/{uniqueId}
  • В Scripts есть дополнительный скрипт init.exclude_root_folder.sql. Если нужно переносить только внутреннюю структуру без верхнеуровневой папки, то нужно переименовать в init.sql и подменить.
  • .
  • Корень переноса задаётся в LibraryMap (URL в SP и GUID родителя в MP), отдельный скрипт исключения корневой папки не используется.
  • Повторный запуск режимов Folder и File подхватывает новые папки, файлы и новые версии (по дате изменения в SP).
  • Кастомные конфигурации заказчиков: Conf\{Customer}\config.json и при необходимости Scripts\{Customer}\procMigration_*.sql.
  • Для файлов во внешнем хранилище (поле FileStorageUniqueId) путь к файлам читается из Options\App\Cfg.xml (Site.FileStorage.Path)При повторном запуске Init на тех же данных проверяется наличие новых версий файлов или новых папок/файлов. Можно допереносить данные постепенно.