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

Ссылка на актуальную версию утилиты


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

  1. Разместить библиотеки модуля Migration на сервере Vitro MP (после завершения миграции папку Migration с библиотеками можно удалить):
    WindowsC:\Program Files\Vitro Software\Vitro\Server\Solutions\Migration
    Linux/etc/Vitro/Server/Solutions/Migration
  2. На базе данных Vitro MP выполнить скрипт audit_ins_date_migration_disable.sql из папки Scripts\MP рабочего каталога утилиты. После ПОЛНОГО завершения всей процедуры миграции надо выполнить второй скрипт audit_ins_date_migration_enable.sql. Это нужно для того, чтобы MP не подставлял текущую дату в атрибут "Изменен", а брал эту дату из переданных утилитой миграции данных.
  3. Разместить утилиту миграции в каталоге Tools рабочего каталога Vitro SP на сервере SharePoint. Утилита обращается к двум базам данных на сервере SP: база Vitro и контентная база SharePoint WSS_Content. Строка подключения к SQL SP считывается из файла Server\Conf\vitro.сonfig рабочего каталога Vitro.
  4. На сервере 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 и выполняются в указанном порядке (параметр опциональный и рекомендуем его не указывать, чтобы отрабатывали последовательно все режимы).

Утилита выполняет следующие шаги:

  1. Разворачивает на базе Vitro SQL-процедуру procMigration_Table и выполняет ее. В результате создается или обновляется таблица Migration.
  2. Выполняет сопоставление тех данных, которые есть и в SP и в MP, проходя по справочникам, указанным в ListMap, оргштатная структура сопоставляется в любом случае. Сопоставление записей из справочников выполняется по названию (для типа "Сотрудник" по почте из физ. лица). 
    После завершения этого режима, в таблице миграции появятся записи с заполненным mpId, для тех записей из справочников, которые удалось сопоставить.
  3. В цикле для каждого режима разворачивает и применяет SQL-процедуру подготовки данных procMigration_{Mode} (из Scripts\ или Scripts\{Customer}\). В результате таблица Migration заполняется данными по соответствующему режиму.
  4. Получает и последовательно обрабатывает записи, полученные из таблицы 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.
WebUrlhttp://sp.vitrocad.ruАдрес Vitro SP
Urlhttps://mp.vitrocad.ruАдрес Vitro MP
Loginadmin_userЛогин технической учётной записи Vitro MP
Passwordadmin_passwordПароль технической учётной записи Vitro MP
ModeList[ "Folder", "File", "Reference", "Member", "Sign", "Issue" ]Список и порядок режимов работы утилиты (опциональный, рекомендуем не указывать его)
DefaultUserId00000000-0000-0000-0000-000000000001GUID пользователя MP, подставляемый в исторических полях (Создал, Изменил) карточки элемента, когда пользователь в MP не был найден.
Если этот параметр отсутствует, то утилита генерирует уникальный guid по маске "e3a94bde-0ca9-456f-b338-4465d40389ee" 
SwitchOffIriParsingfalseОтключение обработки ссылок от скрытых символов. Полезно, если в SP есть файлы или папки с «невидимыми» символами в имени и из-за этого не удаётся получить файл
ThreadNumber2Количество параллельно выполняющихся потоков приложения, при обработке режима. Применяется для всех режимов, кроме Folder (всегда 1 поток)
MigrateAllFileVersiontrueПри 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). 

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

  1. Разворачивается/обновляется и выполняется хранимая процедура для текущего режима. Полученные в результате данные записываются в таблицу Migration.
  2. Утилита отбирает данные из таблицы Migration по текущему режиму (столбец type) и запускает по ним цикл обработки. За каждый режим в утилите отвечает соответствующий обработчик.
  3. Обработчик утилиты выполняет миграцию записи из SP в MP, ошибки полученные в ходе обработки записываются в столбец error, миграция текущей записи приостанавливается.
    Если запись обработана успешно, то утилита заполняет столбцы finishDate и mpId
  4. Обработчик режима переходит к следующей записи.

Исключения утилиты

  • ContentTypeNotFoundException - произошла ошибка при определении типа элемента, отсутствует сопоставление в ContentTypeMap.
  • ItemExistException - при переносе MP сообщает, что файл или папка с таким именем и по данному пути уже существуют.
  • ItemNotFoundException - не найден родительский или мигрированный/сопоставленный элемент.
    Если в логах утилиты большое число таких ошибок, то, скорее всего, это говорит о том, что при миграции родительского элемента (папки верхнего уровня) произошла ошибка и при миграции всех дочерних элементов утилита будет выдавать эту ошибку.
  • LookupException - произошла ошибка, при сопоставлении значения лукапа. Например, элемент справочника (значение лукапа) не был мигрирован в MP при начальном сопоставлении и в таблице Migration отсутствует запись по этому элементу.
  • ValidatorCheckException - На стороне MP при создании/обновлении элемента сработал штатный валидатор.
  • Server Response 500 - другие типы серверных ошибок на стороне MP.


  • No labels