Маппинг полей SharePoint → Portal
Эта страница — справочник для администратора миграции: какой тип колонки SharePoint станет каким полем Portal при работе программы portal-sp-migrate.
Пошаговый запуск мастера: Миграция из SharePoint.
Термины «список», «библиотека», «подстановка» — в словаре.
1. Списки и библиотеки
Заголовок раздела «1. Списки и библиотеки»| В SharePoint | В Portal | Комментарий |
|---|---|---|
| Обычный список (Custom List) | Список | Таблица с элементами |
| Библиотека документов | Библиотека | Файлы, папки и те же настраиваемые колонки, что в SharePoint |
Кастомные колонки библиотеки (Choice, Lookup, Person и др.) переносятся в схему Portal (POST /libraries/{id}/fields). Значения пишутся на файлы и папки. Системные колонки SharePoint (FileLeafRef, Name, Created, …) не создаются — имя файла в Portal это системное поле name. Поле Title библиотеки — отдельная метаданная колонка, как в SharePoint.
| Другие шаблоны | Обычно не переносятся | Можно сузить/расширить область в настройках миграции (scope) |
2. Типы полей (колонок)
Заголовок раздела «2. Типы полей (колонок)»| 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 | Ссылка | Адрес + описание |
| Calculated | text, number, datetime или boolean — по типу результата формулы | Живое выражение, если формула переводится и подходит типу поля. Иначе — снимок уже посчитанного значения. Подробнее ниже |
| Taxonomy / Managed Metadata | — | Пропускается |
Для полей «сотрудник» нужна синхронизация пользователей (AD). Программа сама ищет учётку по логину и почте. principalMap — только если логин в Portal другой.
3. Системные поля
Заголовок раздела «3. Системные поля»| SharePoint | Portal | Действие миграции |
|---|---|---|
| ID | Номер элемента | Portal назначает свой номер |
| Title | Название / title | Создаётся явно, если его ещё нет |
| Created, Modified | — | В текущей версии не переносятся |
| Author, Editor | «Кем создано» | Системное поле Portal |
| Content Type | — | Пропускается |
Идентификаторы в Portal новые. Связь «старый ID → новый» хранится в файле состояния миграции — для повторных запусков и этапа подстановок.
4. Как заполняются сложные значения
Заголовок раздела «4. Как заполняются сложные значения»Сотрудник (User / UserMulti)
Заголовок раздела «Сотрудник (User / UserMulti)»- Если логин или почта указаны в principalMap, берётся этот идентификатор Portal.
- Иначе программа ищет точное совпадение логина или почты в каталоге Portal.
- Если учётки нет — поле может остаться только с отображаемым именем, без привязки.
Поэтому перед миграцией прав и person-полей полезно прогнать ad-sync.
Подстановка (Lookup / LookupMulti)
Заголовок раздела «Подстановка (Lookup / LookupMulti)»Мастер заранее разбирает, какой список на какой ссылается, в том числе если списки лежат на разных дочерних сайтах. Целевой список переносится раньше того, в котором колонка подстановки. На шаге «План» это написано по-русски, и списки стоят в том же порядке.
- Сначала создаются все списки и библиотеки в этом порядке, затем их поля (колонка подстановки указывает на уже созданный список или библиотеку).
- Затем элементы, файлы и вложения — снова цель раньше источника.
- Если списки ссылаются друг на друга по кругу или список ссылается сам на себя, строки переносятся без этих ссылок. Этап lookups проставляет их после того, как строки, файлы и папки уже на месте.
- Если целевого списка нет в области переноса, колонка не создаётся. План называет такой список. Включите его в область и повторите этап схем.
LookupMulti переносится как lookup с allowMultiple: true (массив { itemId, display }).
Выбор (Choice / MultiChoice)
Заголовок раздела «Выбор (Choice / MultiChoice)»Значение должно совпасть с вариантами в настройках поля Portal. MultiChoice переносится как choice с allowMultiple: true (массив строк). Если в SharePoint было «В работе», а в Portal вариантов нет — значение может не сохраниться корректно.
Вычисляемая колонка (Calculated)
Заголовок раздела «Вычисляемая колонка (Calculated)»Тип результата 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 Department | hr-department |
В интерфейсе сотрудники по-прежнему видят человеческое название.
6. Что не мигрируется (напоминание)
Заголовок раздела «6. Что не мигрируется (напоминание)»- Workflows, Content Types, Managed Metadata
- Современные страницы сайта и веб-части SharePoint
История версий файла переносится: содержимое и дата, комментарий к версии — с SharePoint On-Premises. Автор версии в Portal — учётка, под которой шла миграция. Повторный этап files дописывает историю, если в Portal у файла ещё нет своих версий.
Права списка, библиотеки, папки, файла и элемента списка переносятся, если включён перенос прав. Свой набор в SharePoint остаётся своим в Portal. Если наследование не отключали, объект в Portal тоже наследует родителя. Вложение наследует элемент: отдельный набор прав файла вложения не копируется.
Вычисляемые колонки переносятся (раздел 4). Живым выражением становится узкий набор формул SharePoint. Если формула шире этого набора, колонка всё равно создаётся, в элементы пишется уже посчитанное значение, а исходный текст формулы сохраняется и сам не считается.