XML 清单文件
迁移 API 依赖于 XML 清单文件来正确处理内容导入。 Create明确定义的格式的清单文件。 AMR API 还导出此格式的元数据。
XML 验证
清单文件的包结构基于 SharePoint 内容迁移架构的约束版本。
编码无效的 XML 字符
AMR API 在字段中对无效的 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">
位置
将所有清单文件放置在清单文件的 Azure Blob 存储 容器的根级别。
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
和其他类指定的导出设置。 它还指定在迁移目标站点的后续导入过程中使用的导出设置。 它还维护导出到迁移包的所有对象的目录。
忽略 Web 部件
迁移 API 检查和处理某些类型的文件中的 SharePoint Web 部件。 对于 SharePoint Server 和 SharePoint Online 以外的源,通过将 设置为 IgnoreWebParts
true
来绕过这些检查。 在未迁移 Web 部件时,这种做法可提高迁移任务的性能。
指定内容源
迁移 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 列表项引用。 将其放置在 由 的 参数定义的 Azure Blob 存储容器的CreateMigrationJob
azureContainerManifestUri
根目录中。
如果导入包不包含列表或文档库中的“定义字段”或“视图”,则不需要。 省略此文件会在日志中生成警告消息。 包含具有无 root
子节点的文件以避免此警告消息。
Manifest.xml
必填。
包含内容包的内容和结构的完整列表的 XML 清单文件。 迁移 API 使用此清单文件来重建源及其组件。
将包的 Manifest.xml 文件的所有实例放在 Azure Blob 存储容器的根目录中。
此清单文件也是包中元数据的主要描述符,提供列表、文件夹和项层次结构,以及项的元数据,包括引用 UserGroupMap.xml 文件中定义的用户和组。
如果需要,请使用多个 Manifest.xml 。 清单使用不同的文件名进行标识。 迁移 API 通过 SystemData.xml 文件的 ManifestFile
条目中的引用查找所有清单。
文档库/列表 ID 一致性
在源和目标位置使用一致的 Web ID 和文档库 ID/列表 ID。 不一致的 Web ID 生成错误,因为迁移 API 找不到导入操作的父 Web。
同样,迁移 API 无法将具有不正确的文档库 ID 和列表 ID 的项目导入目标文档库或列表。 不要重复使用同一网站集中的 ID,以避免迁移 API 将包导入到同一目标网站集,而不考虑目标 Web。
GUID 一致性
若要避免 GUID 冲突和导入错误,请对同一目标使用相同的包。 导入具有相同内容的新包会导致出现问题。 文件共享中的包将 GUID 分配给文件、文件夹和列表项。 将文件共享中的包保留为原始 GUID 的记录。 对以后的包使用相同的 GUID,以避免冲突并跟踪更改。
保留内容标识符
导入包中的标识符在导入期间 显式 用于标识内容。 这种做法保留文档库内容的现有标识符。
显式引用目标 Web 和列表标识符。
迁移 API 在导入期间保留内容类型标识符、文件/文件夹项 GUID 和列表项整数标识符。 当迁移 API 在包中遇到不正确的标识符时,导入失败。
这种保留支持使用不同包的连续导入迭代,从而允许项移动位置。
权限角色
Manifest.xml 包含以下与角色相关的对象:
Roles 对象
包含 Web 上所有已定义角色的列表。
Role 对象
定义具有 ID、内部权限权限掩码标志和显示信息的角色。
RoleId 值
定义 Role 对象的标识符。
PermMask 值
包含权限掩码标志。
RoleAssignments 对象
包含 roleAssignment 对象) (所有唯一权限的列表。
RoleAssignment 对象
包括 (不同 Assignment 对象的列表(如果有任何) )。
Assignment 对象
包含一个不同的用户或组的实际成员身份及其实际角色,其中
- RoleId 值映射 Role 对象的 RoleId 值。
- PrincipalId 值分别映射到 UserGroups.xml中的 User 或 Group 对象的 ID 值。
权限示例
<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 清单文件。 它以迁移目标上的安装要求的形式包含部署要求列表,例如
- 功能定义
- 模板版本
- Web 部件程序集
- 语言包
- 等等。
在文件共享的根目录下不包含子节点。 省略此文件会在日志中生成警告消息。
RootObjectMap.xml
可选。
维护辅助 (依赖) 对象的映射列表。 迁移 API 使用此清单文件来正确放置依赖对象。
最常见的 RootObject
包含是类型为 List 的单个对象。 ID
此项的 应是ID
目标列表的列表,并且 ParentWebID
应与包含此列表的父目标 Web 的 匹配ID
,以便迁移成功。 此 ID
对象的 、 WebUrl
和 Url
值也必须与 Manifest.xml 文件中布局的相关结构匹配。
SystemData.xml
必填。
包含各种低级别系统数据。 如果有多个清单,它还记录清单包中 Manifest.xml 文件的数量和路径。
版本
SchemaVersion
对当前 Build
和 DatabaseVersion
目标服务器场的引用,当前为“15.0.0.0”。
SiteVersion
应与目标网站集 UIVersion
(当前 15
)匹配。
多个清单
在 SystemData.xml 中列出包中的所有 Manifest.xml文件作为 ManifestFile
条目。
不可变 SystemObjects
列出由迁移 API 保持不可变的所有 SystemObjects
定义依赖对象。
SystemData.xml 示例
此示例 SystemData.xml 文件显示文件共享导入中的公共对象。 ID
对每个包使用不同的 ,并且 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 会生成警告。
用户标识符
在单个包中仅标识一次用户。
在导出的 Web () 中显示所有用户和组。
User 对象
包括有关特定用户的信息,包括将特定安全原则标识为域组与否、登录以及安全原则 (SID) 的 base64 编码 SystemId。
Group 对象
包括有关特定组和该组的直接成员身份列表的信息。
Group 对象上的所有者值和组对象中成员对象的 UserId 值分别映射到其他 User 或 Group 对象的其他 ID 值。
以下示例演示如何对用户和组进行清单。
<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'
如果在 提供 SystemId 时迁移 API 无法解析具有登录的用户,则迁移 API 会使用提供的登录和 SystemId 创建一个新的已删除用户。 迁移 API 将此用户与包中的关联元数据一起使用。 迁移 API 在导入日志中生成警告:
Failed to retrieve user 'user@contoso.com' attributes from the SiteUsers; falling back to passed in values
避免使用用户标识符中的非 UPN 电子邮件地址
Login
用户标识符的 属性需要 UPN。 请勿使用 非 UPN 电子邮件地址。 使用非 UPN 电子邮件地址会导致 SharePoint Online 中的意外行为。
示例
以下示例演示了正确和不正确的用户标识符使用方式。
在这种情况下,用户具有以下标识符:
- Upn: robert@contoso.com
- Email:robert.downey@contoso.com。
正确示例
此示例仅使用 UPN 电子邮件地址向用户显示一次。
<User Id="1" Login="i:0#.f|membership|robert@contoso.com" …/>
错误的示例
此示例 错误地 使用非 UPN 电子邮件地址,并 错误地 包含单个用户的多个标识符。
<User Id="1" Login="i:0#.f|membership|robert@contoso.com" …/>
<User Id="2" Login="i:0#.f|membership|robert.downey@contoso.com" …/>
此示例 错误地 使用非 UPN 电子邮件地址。
<User Id="2" Login="i:0#.f|membership|robert.downey@contoso.com" …/>
ViewFormsList.xml
可选。
此 XML 清单文件维护 Web 部件列表,并跟踪每个部件是视图还是窗体。
如果导入包不包含 Web 部件,则此文件是可选的。 省略此文件会在日志中生成警告消息。 或者,包含具有无 root
子节点的清单文件以避免出现警告消息。