XML-файлы манифеста
API миграции использует XML-файлы манифеста для правильной обработки импорта содержимого. Create файлы манифеста в четко определенном формате. API AMR также экспортирует метаданные в этом формате.
Проверка XML
Структура пакета для файлов манифеста основана на ограниченной версии схем миграции содержимого SharePoint.
Кодирование недопустимых символов XML
API AMR кодирует недопустимые XML-символы в полях. Декодирование атрибутов, перечисленных в EncodedAttributes
.
API миграции не поддерживает недопустимое кодирование символов XML.
Пример
В этом примере кодируются следующие атрибуты: URL-адрес, ParentWebURL, Name и Version.
<File Url="testlib_x002F_File_0905-1653-31240"
Id="e72e2015-91a4-4d07-ae9a-7b6c76918d2a"
ParentWebId="7206fc09-e4af-48b3-8730-ed7321396d7a"
ParentWebUrl="_x002F_"
Name="File_0905-1653-31240"
ListItemIntId="3"
ListId="48ea9454-9538-47ae-926d-917df80bc93e"
ParentId="33ff2f12-c818-4c8d-8578-c6d057172fd8"
ScopeId="385cd4d5-86da-4183-bdac-2e83da1b05fc"
TimeCreated="2021-11-08T03:57:05"
TimeLastModified="2021-01-17T16:01:48"
Version="_x0031_.0"
FileSize="1"
Level="1"
EncodedAttributes="Url,ParentWebUrl,Name,Version">
Расположение
Все файлы манифеста размещены на корневом уровне контейнера Хранилище BLOB-объектов Azure для файлов манифеста.
ArchivedFiles.xml
Необязательный параметр.
Используется для пакетной обработки архивных небольших файлов.
Пример ArchivedFiles.xml
<?xml version="1.0" encoding="utf-8"?>
<ArchivedFiles>
<ArchivedFile Name="pack0.zip" Checksum="xxxxxx=">
<File FileValue="01.dat" />
<File FileValue="02.dat" />
<File FileValue="03.dat" />
<File FileValue="04.dat" />
<File FileValue="05.dat" />
<File FileValue="06.dat" />
</ArchivedFile>
<ArchivedFile Name="pack1.zip" Checksum="xxxxxx=">
<File FileValue="07.dat" />
<File FileValue="08.dat" />
<File FileValue="09.dat" />
<File FileValue="10.dat" />
<File FileValue="11.dat" />
<File FileValue="12.dat" />
</ArchivedFile>
</ArchivedFiles>
ExportSettings.xml
Обязательно.
XML-файл содержит параметры экспорта, указанные SPExportSettings
с помощью и других классов. Он также задает параметры экспорта, используемые в последующем процессе импорта на целевом сайте миграции. Он также поддерживает каталог всех объектов, экспортированных в пакет миграции.
Игнорировать веб-части
API миграции проверяет и обрабатывает веб-части SharePoint в определенных типах файлов. Для источников, отличных от SharePoint Server и SharePoint Online, обойдите эти проверки, задав значение IgnoreWebParts
true
. Эта практика повышает производительность задач миграции при не переносе веб-частей.
Указание источника содержимого
ДЛЯ API миграции требуется SourceType
значение, содержащее источник содержимого. Он должен содержать значение из следующего списка:
Допустимые SourceType
значения
AmazonS3
AzureStorage
Box
Dropbox
Egnyte
FileShare
GoogleCloudStorage
GoogleDrive
MicrosoftStream
OneDrive
SharePointOnline
SharePointOnPremServer
Other
При объявлении в Other
включите дополнительное DetailedSource
значение для предоставления дополнительных сведений об источнике контента.
Пример ExportSettings.xml
<ExportSettings xmlns="urn:deployment-exportsettings-schema" SiteUrl="https://url" FileLocation="some paths" IncludeSecurity="All" SourceType="Other" DetailedSource="My special source type not in the list">
<ExportObjects>
<DeploymentObject Id="GUID for list" Type="List" ParentId="GUID for web" />
</ExportObjects>
</ExportSettings>
LookupListMap.xml
Необязательный параметр.
XML-файл манифеста, в котором хранится простой список подстановок, в котором записываются все ссылки на элементы списка SharePoint. Поместите его в корень контейнера хранилища BLOB-объектов Azure, определенного параметром CreateMigrationJob
azureContainerManifestUri
.
Не требуется, если пакет импорта не содержит определение полей или представлений в списке или библиотеке документов. Пропуск этого файла создает предупреждающее сообщение в журнале. Включите файл с бездетным root
узлом, чтобы избежать этого предупреждающего сообщения.
Manifest.xml
Обязательно.
XML-файл манифеста, содержащий полный список содержимого и структуры пакета содержимого. API миграции использует этот файл манифеста для восстановления исходного кода и его компонентов.
Поместите все экземпляры файлаManifest.xml для пакета в корне контейнера хранилища BLOB-объектов Azure.
Этот файл манифеста также является основным дескриптором для метаданных в пакете и предоставляет иерархию List, Folder и Item, а также метаданные для элементов, включая ссылки на пользователей и группы, определенные в UserGroupMap.xml файле.
При необходимости используйте несколько Manifest.xml . Манифесты идентифицируются с разными именами файлов. API миграции находит все манифесты через ссылки в записях файла ManifestFile
SystemData.xml.
Согласованность идентификаторов библиотеки документов и списка
Используйте согласованный веб-идентификатор и идентификатор библиотеки документов или идентификатор списка в исходном и целевом расположении. Несогласованные веб-идентификаторы приводят к ошибкам, так как API миграции не может найти родительский веб-сайт для операции импорта.
Аналогичным образом API миграции не может импортировать элементы с неправильными идентификаторами библиотеки документов и списком в целевую библиотеку документов или список. Не используйте повторно идентификаторы в одном семействе веб-сайтов, чтобы избежать импорта пакетов API миграции в одно и то же целевое семейство веб-сайтов независимо от целевого веб-сайта.
Согласованность GUID
Чтобы избежать конфликтов GUID и ошибок импорта, используйте один и тот же пакет для того же целевого объекта. Импорт нового пакета с тем же содержимым вызовет проблемы. Пакет из общей папки назначает идентификаторы GUID файлам, папкам и элементам списка. Сохраните пакет из общей папки как запись исходных идентификаторов GUID. Используйте те же идентификаторы GUID для более поздних пакетов, чтобы избежать конфликтов и отслеживать изменения.
Сохранение идентификаторов содержимого
Идентификаторы в пакетах импорта явно используются во время импорта для идентификации содержимого. Эта практика сохраняет существующие идентификаторы для содержимого библиотеки документов.
Явное указание целевого веб-идентификатора и идентификатора списка.
API миграции сохраняет идентификаторы типов контента, идентификаторы GUID элементов файлов и папок и целые идентификаторы элементов списка во время импорта. Импорт завершается ошибкой, когда API миграции обнаруживает неправильные идентификаторы в пакете.
Это сохранение позволяет выполнять последовательные итерации импорта с разными пакетами, позволяя элементам перемещать расположения.
Роли разрешений
Manifest.xml содержит следующие объекты, связанные с ролями:
Объект Roles
Содержит список всех определенных ролей в Интернете.
Объект Role
Определяет роль с идентификатором, флагами маски внутренних разрешений и отображаемой информацией.
Значение RoleId
Определяет идентификаторы объекта Role.
Значение PermMask
Содержит флаги маски прав.
Объект RoleAssignments
Содержит список всех уникальных разрешений (объекты RoleAssignment).
Объект RoleAssignment
Включает список отдельных объектов Assignment (если таковые имеются).
Объект Assignment
Содержит фактическое членство в одном отдельном пользователе или группе и их фактическую роль, где
- Схема значений RoleId для значений RoleId объектов ролей.
- Значения PrincipalId сопоставляют со значениями идентификаторов объектов User или Group соответственно в UserGroups.xml.
Пример разрешений
<SPObjects xmlns="urn:deployment-manifest-schema">
…
<SPObject Id="0b3c1b13-b260-453c-ac8d-8053a537d610" ObjectType="DeploymentRoles" ParentId="203e30e2-1139-4adf-b545-e74235f105c2" ParentWebId="203e30a2-1139-4acf-b535-e74235f105c2" ParentWebUrl="/teams/temp">
<Roles>
<Role RoleId="1073751825" Title="Test Role" Description="This is a test role" PermMask="206292717568" Hidden="true" RoleOrder="160" Type="1" />
<Role RoleId="1073751826" Title="Test Role 2" Description="This is another test role" PermMask="756052856929" Hidden="false" RoleOrder="128" Type="2" />
…
</Roles>
</SPObject>
<SPObject Id="373ea0ba-107a-4a78-9563-bc642f9ab14d" ObjectType="DeploymentRoleAssignments" ParentId="203e30e2-1139-4adf-b545-e74235f105c2" ParentWebId="203e30a2-1139-4acf-b535-e74235f105c2" ParentWebUrl="/teams/temp">
<RoleAssignments>
<RoleAssignment ScopeId="ffcab9b9-94ef-4701-e6d9-19a370760e1e" RoleDefWebId="203e11c2-1139-4abe-b534-e74235f106c2" RoleDefWebUrl="teams/temp" ObjectId="9f743aaf-65f9-473e-0c37-37f147960560" ObjectType="1" ObjectUrl="teams/temp/IWConvertedForms" AnonymousPermMask="0" />
<RoleAssignment ScopeId="c3f564f3-62cd-4b25-8da4-2da7722402ab" RoleDefWebId="203e30a2-1139-4acf-b535-e74255e105c2" RoleDefWebUrl="teams/temp" ObjectId="2b9b0a32-51fb-4af8-a218-c90f63fd1de4" ObjectType="1" ObjectUrl="teams/temp/Relationships List" AnonymousPermMask="0">
<Assignment RoleId="1073751825" PrincipalId="5" />
<Assignment RoleId="1073751825" PrincipalId="6" />
<Assignment RoleId="1073751826" PrincipalId="4" />
<Assignment RoleId="1073751828" PrincipalId="1" />
</RoleAssignment>
…
</RoleAssignments>
</SPObject>
…
</SPObjects>
Requirements.xml
Необязательный параметр.
SharePoint Server обычно создает этот XML-файл манифеста. Он содержит список требований к развертыванию в виде требований к установке в целевом объекте миграции, например
- определения компонентов
- версии шаблонов
- Сборки веб-частей
- языковые пакеты
- и т. д.
Не добавьте дочерний узел в корневой папке для общих папок. Пропуск этого файла создает предупреждающее сообщение в журнале.
RootObjectMap.xml
Необязательный параметр.
Поддерживает список сопоставлений вторичных (зависимых) объектов. API миграции использует этот файл манифеста для правильного размещения зависимых объектов.
Наиболее распространенным RootObject
является один объект типа List. Для ID
успешной миграции этот элемент должен иметь значение Список ID
целевого списка, а ParentWebID
объект должен соответствовать ID
значению родительского целевого веб-сайта, содержащего этот список. Значения ID
, WebUrl
и Url
этого объекта также должны соответствовать связанной структуре, изложенной в файлеManifest.xml .
SystemData.xml
Обязательно.
Содержит различные низкоуровневые системные данные. Он также записывает количество и пути файловManifest.xml в пакете манифеста при наличии нескольких манифестов.
Версии
SchemaVersion
ссылки на текущую Build
и DatabaseVersion
целевую ферму, в настоящее время — "15.0.0.0".
SiteVersion
должен соответствовать целевому семейству веб-сайтов UIVersion
, в настоящее время .15
Несколько манифестов
Список всех Manifest.xml файлов в пакете вSystemData.xmlв виде ManifestFile
записей.
Неизменяемые systemObjects
Список всех SystemObjects
определяющих зависимых объектов, которые остаются неизменяемыми с помощью API миграции.
пример SystemData.xml
В этом примере SystemData.xml файле показаны общие объекты из импорта общей папки. Используйте разные ID
s для каждого пакета, и URL
они могут быть разными.
<?xml version="1.0" encoding="utf-8"?>
<SystemData xmlns="urn:deployment-systemdata-schema">
<SchemaVersion Version="15.0.0.0" Build="16.0.3111.1200" DatabaseVersion="11552" SiteVersion="15" />
<ManifestFiles>
<ManifestFile Name="Manifest.xml" />
</ManifestFiles>
<SystemObjects>
<SystemObject Id="34321c39-3254-4bd1-b749-c99e16d1f4ab" Type="Folder" Url="/personal/username" />
<SystemObject Id="9efb9686-baab-432d-a192-858ac34c073f" Type="Web" Url="/personal/username" />
<SystemObject Id="e8ec714f-91a0-4c6f-9926-08328c8b3e05" Type="List" Url="/personal/username/Documents/deleteme2" />
<SystemObject Id="a05e1f95-5712-4cc2-958c-31cf0a2cfb62" Type="List" Url="/personal/username/_catalog/users" />
</SystemObjects>
<RootWebOnlyLists />
</SystemData>
UserGroupMap.XML
Обязательно.
Записывает пользователей и группы безопасности пользователей для управления разрешениями. API миграции использует манифест для определения членства пользователей и групп, а также их ролей и конкретных назначений. Эти назначения включают уникальные разрешения, заданные на уровне объекта и его потомков, если только более глубокий дочерний объект не переопределяет их.
Записи пользователя или группы не являются обязательными, но упущение предотвращает доступ к информации об авторе или безопасности во время импорта. В таких случаях API миграции создает предупреждения.
Идентификаторы пользователей
Определите пользователя только один раз в одном пакете.
Манифест всех пользователей и групп в экспортированных веб-сайтах.
Объект User
Включает сведения о конкретных пользователях, включая идентификацию определенного принципа безопасности в качестве группы домена или нет, вход и systemId (SID) в кодировке Base64 для принципа безопасности.
Объект Group
Включает сведения о конкретных группах и список непосредственного членства в этой группе.
Значения владельца в объектах Group и Значения UserId в объектах-членах в объектах группы сопоставляют с другими значениями идентификаторов других объектов User или Group соответственно.
В следующем примере показано, как манифестировать пользователей и группы.
<UserGroupMap xmlns="urn:deployment-usergroupmap-schema">
<Users>
<User Id="1" Name="John Doe" Login="DOMAIN\JDoe" Email="DJoe@contoso.com"
IsDomainGroup="false" IsSiteAdmin="true" SystemId="AQUAAAAAAAUVAAAAXSj1f9U62DVDVOAqToYSAA==" IsDeleted="false" Flags="0" />
<User Id="2" Name="Jane Smith" Login="DOMAIN\JSmith" Email="jsmith@contoso.com"
IsDomainGroup="false" IsSiteAdmin="true" SystemId="AQUAAAAAAAUVAAAAXSj1f9U62DVDVOAqdUwNAA==" IsDeleted="false" Flags="0" />
…
</Users>
<Groups>
<Group Id="3" Name="Temp Group" Description="A Temp Group" Owner="2" OwnerIsUser="true" OnlyAllowMembersViewMembership="true">
<Member UserId="2" />
</Group>
<Group Id="4" Name="Temp Group 2" Description="Another Temp Group" Owner="2" OwnerIsUser="false" RequestToJoinLeaveEmailSetting="JSmith@contoso.com" OnlyAllowMembersViewMembership="true">
<Member UserId="1" />
<Member UserId="2" />
</Group>
…
</Groups>
</UserGroupMap>
Убедитесь, что значения входа и SystemId пользователей соответствуют значениям в SharePoint.
Удаленные пользователи
IsDeleted
Включите значение для true
удаленных учетных записей. Эта практика предотвращает сбои поиска в процессе импорта, что негативно влияет на производительность.
Неразрешенные идентификаторы пользователей
Если API миграции не может разрешить пользователя со сведениями для входа, а SystemId не предоставлен, API миграции заменяет этого пользователя System Account
на в связанных метаданных (например, автор или Редактор) в пакете и создает предупреждение в журналах импорта:
Failed to ensure user 'user@contoso.com'
Если API миграции не удается разрешить пользователю вход с помощью SystemId, API миграции создает нового удаленного пользователя с указанными идентификаторами входа и SystemId. API миграции использует этот пользователь со связанными метаданными в пакете. API миграции создает предупреждение в журналах импорта:
Failed to retrieve user 'user@contoso.com' attributes from the SiteUsers; falling back to passed in values
Избегайте адресов электронной почты, отличных от имени участника-пользователя, в идентификаторах пользователей
Атрибут Login
идентификатора пользователя требует имени участника-пользователя. Не используйте адреса электронной почты, отличные от имени участника-пользователя. Использование адресов электронной почты, отличных от имени участника-пользователя, приводит к непредвиденному поведению в SharePoint Online.
Примеры
В следующих примерах показаны правильные и неправильные способы использования идентификаторов пользователей.
В этом случае у пользователя есть следующие идентификаторы:
- UPN: robert@contoso.com
- Email: robert.downey@contoso.com.
Правильный пример
В этом примере пользователь манифестирует только один раз с адресом электронной почты имени участника-пользователя.
<User Id="1" Login="i:0#.f|membership|robert@contoso.com" …/>
Неправильный пример
В этом примере неправильно используется адрес электронной почты, отличный от имени участника-пользователя, и неправильно включает несколько идентификаторов для одного пользователя.
<User Id="1" Login="i:0#.f|membership|robert@contoso.com" …/>
<User Id="2" Login="i:0#.f|membership|robert.downey@contoso.com" …/>
В этом примере неправильно используется адрес электронной почты, отличный от имени участника-пользователя.
<User Id="2" Login="i:0#.f|membership|robert.downey@contoso.com" …/>
ViewFormsList.XML
Необязательный параметр.
Этот XML-файл манифеста содержит список веб-частей и отслеживает, является ли каждая из них представлением или формой.
Этот файл необязателен, если пакет импорта не содержит веб-частей. Пропуск этого файла создает предупреждающее сообщение в журнале. Кроме того, добавьте файл манифеста с бездетным root
узлом, чтобы избежать предупреждающего сообщения.