Утилита миграции Vitro.Server.SPToMPMigrate (Vitro.Server.SPToMPMigrate.exe) переносит папки, файлы, записи справочников, связи между файлами, участников (права), ЭЦП и замечания созданные в системе Vitro SP, в систему Vitro MP с сохранением даты создания, авторства, версионности и прочих настраиваемых атрибутов.
Ссылка на актуальную версию утилиты
Предварительные действия
- Разместить библиотеки модуля Migration на сервере Vitro MP (после завершения миграции папку
Migrationс библиотеками можно удалить):
Windows —C:\Program Files\Vitro Software\Vitro\Server\Solutions\MigrationLinux —/etc/Vitro/Server/Solutions/Migration - На базе данных Vitro MP выполнить скрипт
audit_ins_date_migration_disable.sqlиз папкиScripts\MPрабочего каталога утилиты. После ПОЛНОГО завершения всей процедуры миграции надо выполнить второй скрипт audit_ins_date_migration_enable.sql. Это нужно для того, чтобы MP не подставлял текущую дату в атрибут "Изменен", а брал эту дату из переданных утилитой миграции данных. - Разместить утилиту миграции в каталоге
Toolsрабочего каталога Vitro SP на сервере SharePoint. Утилита обращается к двум базам данных на сервере SP: базаVitroи контентная база SharePointWSS_Content. Строка подключения к SQL SP считывается из файлаServer\Conf\vitro.сonfigрабочего каталога Vitro. - На сервере Vitro SP создать два атрибута "email" (Vitro вычисляемое поле типа текст) и "disabled" (Vitro вычисляемое поле типа да/нет), пустой формулой '', отключить все флаги в этих полях, флаг "Вызвать расчет только один раз" - включить. Добавить эти атрибуты к контентному типу "Сотрудник" на уровне сайта.
Запустить PS скриптSetEmailAndDisabledField.ps1из папкиScripts\SPрабочего каталога утилиты (в скрипте надо предварительно поправить адрес площадки). В конфиг утилитыconfig.jsonдобавить две пары значений в параметрFieldMap- [ "email", "email" ], [ "disabled", "disabled" ]. Необходимо для корректного сопоставления записей с типом "Сотрудник".
Дополнительная информация и примечания
- В рабочем каталоге утилиты должен размещаться файл
config.jsonи каталогScripts\с SQL-процедурами подготовки данных. Логи записываются в папкуlogs\(файлы с маскойSPToMPMigrate-YYYYMMDD-HHmm.log) рабочего каталога утилиты. - При настройке файла
config.jsonрекомендуем задавать только следующие параметры: WebUrl, Url, Login/Password, ListMap, LibraryMap, ContentTypeMap, FieldMap, а остальные параметры оставить в их рекомендуемых значениях по умолчанию. - Сначала выполняется сопоставление элементов SP-MP для записей справочников (параметр
ListMap). При сопоставлении элемента в строке таблицы Migration в столбецmpIdпроставляется guid элемента из MP, также значение в этом столбце заполняется после миграции записи в MP. Поэтому рекомендуется сначала заполнить параметрListMap(справочники), а параметрLibraryMapоставить пустым и выполнить запуск в этой конфигурации. Если есть сложные справочники, которые ссылаются на другие справочники через лукапы, то строки по ним лучше располагать внизу списка, чтобы они обрабатывались последними. - Утилиту миграции можно запускать повторно. При повторном запуске обрабатываются записи, которые имели ошибки при предыдущем запуске, а также новые и измененные, с момента последнего запуска, элементы.
- Если при запуске есть ошибки с типом ItemNotFoundException и LookupException, то надо выполнить два запуска подряд, чтобы все значения атрибутов проставились корректно.
- Надо учитывать, что при миграции данных на стороне MP также отрабатывает автоматизация: вычисления, валидаторы и тригеры автоматизации. При миграции рекомендуем перенос «один к одному». Для этого надо временно удалить в корзину все содержимое следующих справочников: "Вычисления", "Валидаторы", "Автоматизация" и после завершения миграции восстановить эти данные из корзины.
- GUID элементов в Vitro SP и Vitro MP совпадают. Перенесённые элементы доступны по
/item/{uniqueId}. - Описание ошибки фиксируется в столбце
errorтаблицы Migration, обработка такой записи приостанавливается и утилита переходит к следующей записи. - Утилита умеет переносить файлы больше 2 GB. Для работы с файлами больших размеров должна быть настроена конифгурация на стороне SP. Например, в файле Cfg.xml должен присутствовать ключ
Site.FileStorage.Path, а на площадке добавлен атрибутFileStorageUniqueId.
Режимы работы утилиты
Режимы работы утилиты указываются в виде массива ModeList в config.json и выполняются в указанном порядке (параметр опциональный и рекомендуем его не указывать, чтобы отрабатывали последовательно все режимы).
Утилита выполняет следующие шаги:
- Разворачивает на базе Vitro SQL-процедуру
procMigration_Tableи выполняет ее. В результате создается или обновляется таблица Migration. - Выполняет сопоставление тех данных, которые есть и в SP и в MP, проходя по справочникам, указанным в
ListMap, оргштатная структура сопоставляется в любом случае. Сопоставление записей из справочников выполняется по названию (для типа "Сотрудник" по почте из физ. лица).
После завершения этого режима, в таблице миграции появятся записи с заполненным mpId, для тех записей из справочников, которые удалось сопоставить. - В цикле для каждого режима разворачивает и применяет SQL-процедуру подготовки данных
procMigration_{Mode}(изScripts\илиScripts\{Customer}\). В результате таблица Migration заполняется данными по соответствующему режиму. - Получает и последовательно обрабатывает записи, полученные из таблицы Migration по текущему режиму (подготовленные в п.3) и создает/обновляет соответствующие записи на стороне MP через API Vitro MP.
Описание режимов работы:
- Folder — миграция папочной структуры. Для каждой пары справочников/библиотек SP-MP из
ListMap+LibraryMap. - File — миграция файлов и их версий. Для каждой пары справочников/библиотек SP-MP из
ListMap+LibraryMap. - Reference — миграция связей между файлами и папками. Переносятся связи с типом:
- 1 — внешняя ссылка (вставка) на / является внешней ссылкой (вставка) для. Тип "Связь САПР (вставленная)" в MP.
- 2 — внешняя ссылка (наложение) на / является внешней ссылкой (наложение) для. Тип "Связь САПР (наложенная)" в MP.
- 3 — связано с. Тип "Связь с элементом" в MP.
- Member — миграция прав Vitro «Участники». В MP в правах исходного элемента (папка/документ) добавляются уникальные права с участниками из полей SP
VitroProjectEditRoleиVitroProjectFullControlRoleс правом доступа Изменить. - Sign — миграция электронных подписей (ЭЦП) для pdf файлов из таблицы REP_ENTITY_SIGN. Если утилита выдает ошибку об отсутствии этой таблицы, можно ее создать в базе
WSS_Contentскриптом CreateTableRepEntitySing.sql - Issue — миграция замечаний к файлам и папкам. Также переносится информация по маркапу замечания, если есть.
Параметры утилиты
Параметры задаются в файле config.json в каталоге с исполняемым файлом.
| Параметр | Пример значения | Описание |
|---|---|---|
| Customer | "Default" | Имя заказчика для кастомных SQL-скриптов в Scripts\{Customer}\. Если скрипт не найден, используется Scripts\procMigration_{Mode}.sql. |
| WebUrl | http://sp.vitrocad.ru | Адрес Vitro SP |
| Url | https://mp.vitrocad.ru | Адрес Vitro MP |
| Login | admin_user | Логин технической учётной записи Vitro MP |
| Password | admin_password | Пароль технической учётной записи Vitro MP |
| ModeList | [ "Folder", "File", "Reference", "Member", "Sign", "Issue" ] | Список и порядок режимов работы утилиты (опциональный, рекомендуем не указывать его) |
| DefaultUserId | 00000000-0000-0000-0000-000000000001 | GUID пользователя MP, подставляемый в исторических полях (Создал, Изменил) карточки элемента, когда пользователь в MP не был найден. Если этот параметр отсутствует, то утилита генерирует уникальный guid по маске "e3a94bde-0ca9-456f-b338-4465d40389ee" |
| SwitchOffIriParsing | false | Отключение обработки ссылок от скрытых символов. Полезно, если в SP есть файлы или папки с «невидимыми» символами в имени и из-за этого не удаётся получить файл |
| ThreadNumber | 2 | Количество параллельно выполняющихся потоков приложения, при обработке режима. Применяется для всех режимов, кроме Folder (всегда 1 поток) |
| MigrateAllFileVersion | true | При true переносятся все версии файла, при false — только последняя |
| ListMap | { "http://sp2013/Lists/seStatusList": "9618f977-0447-4010-88f7-76d8edca255c" } | Маппинг для справочников: URL списка SP → GUID списка MP |
| LibraryMap | { "http://sp2013/TemplateProject/DocProjectLib": "966e62c5-a803-49a0-a1be-e680d130c481" } | Переносимые корни: URL конкретной папки библиотеки или корневой папки в случае переноса всей библиотеки → GUID папки или списка в MP |
| ContentTypeMap | [ [ "Проект", "540ff572-..." ], [ "Стадия", "64a15f4c-..." ] ] | Маппинг типов контента SP (название) → тип элемента MP (GUID). Не указанные: Папка → «Папка», файл → «Файл проекта», Элемент → «Элемент» |
| FieldMap | [ [ "VitroBaseStatus", "document_status" ] ] | Маппинг столбцов SP → атрибутов MP (internal name). |
Алгоритм работы режима утилиты
- Разворачивается/обновляется и выполняется хранимая процедура для текущего режима. Полученные в результате данные записываются в таблицу Migration.
- Утилита отбирает данные из таблицы Migration по текущему режиму (столбец
type) и запускает по ним цикл обработки. За каждый режим в утилите отвечает соответствующий обработчик. - Обработчик утилиты выполняет миграцию записи из SP в MP, ошибки полученные в ходе обработки записываются в столбец
error, миграция текущей записи приостанавливается.
Если запись обработана успешно, то утилита заполняет столбцыfinishDateиmpId. - Обработчик режима переходит к следующей записи.
Исключения утилиты
- ContentTypeNotFoundException - произошла ошибка при определении типа элемента, отсутствует сопоставление в ContentTypeMap.
- ItemExistException - при переносе MP сообщает, что файл или папка с таким именем и по данному пути уже существуют.
- ItemNotFoundException - не найден родительский или мигрированный/сопоставленный элемент.
Если в логах утилиты большое число таких ошибок, то, скорее всего, это говорит о том, что при миграции родительского элемента (папки верхнего уровня) произошла ошибка и при миграции всех дочерних элементов утилита будет выдавать эту ошибку. - LookupException - произошла ошибка, при сопоставлении значения лукапа. Например, элемент справочника (значение лукапа) не был мигрирован в MP при начальном сопоставлении и в таблице Migration отсутствует запись по этому элементу.
- ValidatorCheckException - На стороне MP при создании/обновлении элемента сработал штатный валидатор.
- Server Response 500 - другие типы серверных ошибок на стороне MP.