Перейти к содержимому

Маппинг полей SharePoint → Portal

Эта страница — справочник для администратора миграции: какой тип колонки SharePoint станет каким полем Portal при работе программы portal-sp-migrate.

Пошаговый запуск мастера: Миграция из SharePoint.

Термины «список», «библиотека», «подстановка» — в словаре.


В SharePointВ PortalКомментарий
Обычный список (Custom List)СписокТаблица с элементами
Библиотека документовБиблиотекаФайлы, папки и те же настраиваемые колонки, что в SharePoint

Кастомные колонки библиотеки (Choice, Lookup, Person и др.) переносятся в схему Portal (POST /libraries/{id}/fields). Значения пишутся на файлы и папки. Системные колонки SharePoint (FileLeafRef, Name, Created, …) не создаются — имя файла в Portal это системное поле name. Поле Title библиотеки — отдельная метаданная колонка, как в SharePoint. | Другие шаблоны | Обычно не переносятся | Можно сузить/расширить область в настройках миграции (scope) |


SharePointПоле в Portal (как в UI)Что важно знать
TextОднострочный текст
Note (простой текст)Многострочный текст
Note (форматированный)HTML-текст
ChoiceВыборВарианты берутся из SharePoint
MultiChoiceВыборallowMultiple: true; значения — массив строк
Number, CurrencyЧисло
DateTime (только дата)Дата
DateTimeДата и время
BooleanДа/Нет
UserПользователь/группаОдин человек; заполняется на этапе lookups
UserMultiПользователь/группаНесколько людей/групп; этап lookups
LookupПодстановкаЭтап lookups после импорта целевого списка или библиотеки; settings.lookupListId либо settings.lookupLibraryId
LookupMultiПодстановкаallowMultiple: true; значения — массив { itemId, display }
Filtered Lookup Field (FilteredLookupField)ПодстановкаТо же, что Lookup. Решение Filtered Lookup Field — наследник lookup SharePoint: цель берётся из схемы (List), несколько значений — из Mult. Фильтр представления и CAML-запрос не переносятся: в Portal видны все элементы целевого списка или библиотеки
URLСсылкаАдрес + описание
Calculatedtext, number, datetime или boolean — по типу результата формулыЖивое выражение, если формула переводится и подходит типу поля. Иначе — снимок уже посчитанного значения. Подробнее ниже
Taxonomy / Managed Metadata—Пропускается

Для полей «сотрудник» нужна синхронизация пользователей (AD). Программа сама ищет учётку по логину и почте. principalMap — только если логин в Portal другой.


SharePointPortalДействие миграции
IDНомер элементаPortal назначает свой номер
TitleНазвание / titleСоздаётся явно, если его ещё нет
Created, Modified—В текущей версии не переносятся
Author, Editor«Кем создано»Системное поле Portal
Content Type—Пропускается

Идентификаторы в Portal новые. Связь «старый ID → новый» хранится в файле состояния миграции — для повторных запусков и этапа подстановок.


  1. Если логин или почта указаны в principalMap, берётся этот идентификатор Portal.
  2. Иначе программа ищет точное совпадение логина или почты в каталоге Portal.
  3. Если учётки нет — поле может остаться только с отображаемым именем, без привязки.

Поэтому перед миграцией прав и person-полей полезно прогнать ad-sync.

Мастер заранее разбирает, какой список на какой ссылается, в том числе если списки лежат на разных дочерних сайтах. Целевой список переносится раньше того, в котором колонка подстановки. На шаге «План» это написано по-русски, и списки стоят в том же порядке.

  1. Сначала создаются все списки и библиотеки в этом порядке, затем их поля (колонка подстановки указывает на уже созданный список или библиотеку).
  2. Затем элементы, файлы и вложения — снова цель раньше источника.
  3. Если списки ссылаются друг на друга по кругу или список ссылается сам на себя, строки переносятся без этих ссылок. Этап lookups проставляет их после того, как строки, файлы и папки уже на месте.
  4. Если целевого списка нет в области переноса, колонка не создаётся. План называет такой список. Включите его в область и повторите этап схем.

LookupMulti переносится как lookup с allowMultiple: true (массив { itemId, display }).

Значение должно совпасть с вариантами в настройках поля Portal. MultiChoice переносится как choice с allowMultiple: true (массив строк). Если в SharePoint было «В работе», а в Portal вариантов нет — значение может не сохраниться корректно.

Тип результата SharePoint становится полем Portal: текст → text, число и валюта → number, дата и время → datetime, да/нет → boolean. Неизвестный тип результата колонка пропускает.

Исходный текст формулы всегда пишется в settings.sharePointFormula и в Portal не считается. Живое settings.expression появляется только если формула укладывается в набор Portal:

  • IF / ЕСЛИ, ISBLANK / ЕПУСТО, сравнения, CONCATENATE / СЦЕПИТЬ и &;
  • TEXT / ТЕКСТ только для даты (шаблон Excel приводится к формату .NET: mm месяца становится MM);
  • арифметика + - * /.

Пустая дата-заглушка SharePoint (1899.12, 1899-12-30, 30.12.1899) переписывается в isBlank. Разделитель аргументов — точка с запятой, если в формуле есть ; вне кавычек.

Если перевод не удался или Portal отклонил выражение (другой тип результата, неизвестное поле, цикл), колонка создаётся без expression: в элементы пишется уже посчитанное значение из SharePoint. Дальше оно само не обновляется, пока в настройках поля не зададут формулу Portal. Справка по формулам — кнопка ? у поля Выражение; контракт — вычисляемое выражение.


5. Как образуются адреса (slug) и внутренние имена

Заголовок раздела «5. Как образуются адреса (slug) и внутренние имена»

Названия на русском/с пробелами превращаются в короткие латинские идентификаторы для URL и внутренних имён:

БылоСтанет примерно
Задачиzadachi
HR Departmenthr-department

В интерфейсе сотрудники по-прежнему видят человеческое название.


  • Workflows, Content Types, Managed Metadata
  • Современные страницы сайта и веб-части SharePoint

История версий файла переносится: содержимое и дата, комментарий к версии — с SharePoint On-Premises. Автор версии в Portal — учётка, под которой шла миграция. Повторный этап files дописывает историю, если в Portal у файла ещё нет своих версий.

Права списка, библиотеки, папки, файла и элемента списка переносятся, если включён перенос прав. Свой набор в SharePoint остаётся своим в Portal. Если наследование не отключали, объект в Portal тоже наследует родителя. Вложение наследует элемент: отдельный набор прав файла вложения не копируется.

Вычисляемые колонки переносятся (раздел 4). Живым выражением становится узкий набор формул SharePoint. Если формула шире этого набора, колонка всё равно создаётся, в элементы пишется уже посчитанное значение, а исходный текст формулы сохраняется и сам не считается.