Маппинг полей SharePoint → Portal
Таблица соответствия типов полей при миграции через portal-sp-migrate.
Списки и библиотеки
Заголовок раздела «Списки и библиотеки»| SharePoint BaseTemplate | Portal |
|---|---|
| 100 (Custom List) | List (POST /lists) |
| 101 (Document Library) | Library (POST /libraries) |
| Прочие шаблоны | Исключаются по умолчанию (настраивается через scope) |
Типы полей
Заголовок раздела «Типы полей»| SharePoint FieldType | Portal fieldType | Примечание |
|---|---|---|
| Text | text | |
| Note (plain) | multiline_text | |
| Note (rich text) | html_text | |
| Choice | choice | settings.choices из SP |
| MultiChoice | text | Значения через ; |
| Number, Currency | number | |
| DateTime (date only) | date | |
| DateTime | datetime | |
| Boolean | boolean | |
| User | person | allowMultiple: false, allowUsers/allowGroups: true, principalMap + AD-sync + фаза lookups |
| UserMulti | person | allowMultiple: true, фаза lookups |
| Lookup | lookup | Фаза lookups после импорта целевого списка |
| LookupMulti | lookup | MVP: первое значение |
| URL | link | { url, description } |
| Calculated | — | Пропускается |
| TaxonomyFieldType | — | Пропускается (или text в будущем) |
Системные поля
Заголовок раздела «Системные поля»| SharePoint | Portal | Действие |
|---|---|---|
| ID | item_number | Авто-назначение Portal |
| Title | title | Создаётся явно, если отсутствует |
| Created, Modified | — | Не мигрируются (MVP) |
| Author, Editor | created_by | Системное поле Portal |
| ContentType | — | Пропускается |
Значения полей
Заголовок раздела «Значения полей»SharePoint возвращает { Email, LookupValue, Title }. Portal ожидает:
- User / одиночное person (
allowMultiple: false) — один объект:
{ "principalType": "user", "id": "uuid", "display": "Иванов И.И." }- UserMulti / multi person — массив объектов:
[ { "principalType": "user", "id": "uuid", "display": "Иванов И.И." }, { "principalType": "group", "id": "uuid", "display": "HR" }]Резолвинг в фазе lookups:
scope.principalMap(логин / email → UUID)GET /api/v1/users?q=/GET /api/v1/groups?q=- Fallback: только
displayбезid(если пользователь не найден)
Двухпроходная миграция:
- Фаза
items— все списки и элементы (lookup/person пропускаются) - Фаза
attachments— файлы вложений элементов (POST .../attachments) - Фаза
lookups—quick-editupdate с{ itemId, display }поid_map
Значение должно совпадать с одним из settings.choices в Portal.
Slug-нормализация
Заголовок раздела «Slug-нормализация»Заголовки узлов, списков и internal names транслитерируются в kebab-case / snake_case:
Задачи→zadachiHR Department→hr-department
Что не мигрируется
Заголовок раздела «Что не мигрируется»- Версии файлов
- Workflows, Content Types, Managed Metadata
- Modern Site Pages и WebParts
- List-level ACL в SharePoint Online (Graph) — только site/web ACL
Roadmap
Заголовок раздела «Roadmap»POST /files/{id}/versionsдля истории версий- HTML-отчёт verify