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

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

Таблица соответствия типов полей при миграции через portal-sp-migrate.

SharePoint BaseTemplatePortal
100 (Custom List)List (POST /lists)
101 (Document Library)Library (POST /libraries)
Прочие шаблоныИсключаются по умолчанию (настраивается через scope)
SharePoint FieldTypePortal fieldTypeПримечание
Texttext
Note (plain)multiline_text
Note (rich text)html_text
Choicechoicesettings.choices из SP
MultiChoicetextЗначения через ;
Number, Currencynumber
DateTime (date only)date
DateTimedatetime
Booleanboolean
UserpersonallowMultiple: false, allowUsers/allowGroups: true, principalMap + AD-sync + фаза lookups
UserMultipersonallowMultiple: true, фаза lookups
LookuplookupФаза lookups после импорта целевого списка
LookupMultilookupMVP: первое значение
URLlink{ url, description }
CalculatedПропускается
TaxonomyFieldTypeПропускается (или text в будущем)
SharePointPortalДействие
IDitem_numberАвто-назначение Portal
TitletitleСоздаётся явно, если отсутствует
Created, ModifiedНе мигрируются (MVP)
Author, Editorcreated_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:

  1. scope.principalMap (логин / email → UUID)
  2. GET /api/v1/users?q= / GET /api/v1/groups?q=
  3. Fallback: только display без id (если пользователь не найден)

Двухпроходная миграция:

  1. Фаза items — все списки и элементы (lookup/person пропускаются)
  2. Фаза attachments — файлы вложений элементов (POST .../attachments)
  3. Фаза lookupsquick-edit update с { itemId, display } по id_map

Значение должно совпадать с одним из settings.choices в Portal.

Заголовки узлов, списков и internal names транслитерируются в kebab-case / snake_case:

  • Задачиzadachi
  • HR Departmenthr-department
  • Версии файлов
  • Workflows, Content Types, Managed Metadata
  • Modern Site Pages и WebParts
  • List-level ACL в SharePoint Online (Graph) — только site/web ACL
  • POST /files/{id}/versions для истории версий
  • HTML-отчёт verify