Поделиться через


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, обойдите эти проверки, задав значение IgnoreWebPartstrue. Эта практика повышает производительность задач миграции при не переносе веб-частей.

Указание источника содержимого

ДЛЯ 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, определенного параметром CreateMigrationJobazureContainerManifestUri .

Не требуется, если пакет импорта не содержит определение полей или представлений в списке или библиотеке документов. Пропуск этого файла создает предупреждающее сообщение в журнале. Включите файл с бездетным root узлом, чтобы избежать этого предупреждающего сообщения.

Manifest.xml

Обязательно.

XML-файл манифеста, содержащий полный список содержимого и структуры пакета содержимого. API миграции использует этот файл манифеста для восстановления исходного кода и его компонентов.

Поместите все экземпляры файлаManifest.xml для пакета в корне контейнера хранилища BLOB-объектов Azure.

Этот файл манифеста также является основным дескриптором для метаданных в пакете и предоставляет иерархию List, Folder и Item, а также метаданные для элементов, включая ссылки на пользователей и группы, определенные в UserGroupMap.xml файле.

При необходимости используйте несколько Manifest.xml . Манифесты идентифицируются с разными именами файлов. API миграции находит все манифесты через ссылки в записях файла ManifestFileSystemData.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 файле показаны общие объекты из импорта общей папки. Используйте разные IDs для каждого пакета, и 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.

Примеры

В следующих примерах показаны правильные и неправильные способы использования идентификаторов пользователей.

В этом случае у пользователя есть следующие идентификаторы:

Правильный пример

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

<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 узлом, чтобы избежать предупреждающего сообщения.