Archivos de manifiesto XML
Migration API se basa en archivos de manifiesto XML para procesar la importación de contenido correctamente. Create archivos de manifiesto en un formato bien definido. LA API de AMR también exporta metadatos en este formato.
Validación XML
La estructura de paquetes de los archivos de manifiesto se basa en una versión restringida de los esquemas de migración de contenido de SharePoint.
Codificación de caracteres XML no válidos
LA API de AMR codifica caracteres XML no válidos en los campos. Descodificar los atributos enumerados en EncodedAttributes
.
Migration API no admite la codificación de caracteres XML no válida.
Ejemplo
En este ejemplo, estos atributos se codifican: URL, ParentWebURL, Name y 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">
Ubicación
Coloca todos los archivos de manifiesto en el nivel raíz del contenedor de Azure Blob Storage para los archivos de manifiesto.
ArchivedFiles.xml
Opcional.
Se usa para procesar archivos pequeños archivados por lotes.
Ejemplo de 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
Obligatorio.
Un archivo XML contiene la configuración de exportación especificada con las SPExportSettings
clases y otras. También especifica la configuración de exportación, que se usa en el proceso de importación posterior en el sitio de destino de migración. También mantiene un catálogo de todos los objetos exportados al paquete de migración.
Omitir elementos web
La API de migración comprueba y procesa elementos web de SharePoint en determinados tipos de archivos. Para orígenes distintos de SharePoint Server y SharePoint Online, omita estas comprobaciones estableciendo IgnoreWebParts
en true
. Esta práctica mejora el rendimiento de las tareas de migración al no migrar elementos web.
Especificar el origen de contenido
Migration API requiere un SourceType
valor que contenga el origen del contenido. Debe contener un valor de la lista siguiente:
Valores aceptados SourceType
AmazonS3
AzureStorage
Box
Dropbox
Egnyte
FileShare
GoogleCloudStorage
GoogleDrive
MicrosoftStream
OneDrive
SharePointOnline
SharePointOnPremServer
Other
Al declarar en Other
, incluya un valor adicional DetailedSource
para proporcionar más detalles sobre la información del origen de contenido.
Ejemplo de 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
Opcional.
Un archivo de manifiesto XML que mantiene una lista de búsqueda simple, que registra todas las referencias de elementos de lista de SharePoint. Colócelo en la raíz del contenedor de Azure Blob Store definido por el CreateMigrationJob
parámetro de azureContainerManifestUri
.
No es necesario si el paquete de importación no contiene campos o vistas de definición en una lista o biblioteca de documentos. La omisión de este archivo genera un mensaje de advertencia en el registro. Incluya un archivo con un nodo sin elementos secundarios root
para evitar este mensaje de advertencia.
Manifest.xml
Obligatorio.
Un archivo de manifiesto XML que contiene la lista completa del contenido y la estructura del paquete de contenido. Migration API usa este archivo de manifiesto para reconstituir el origen y sus componentes.
Coloque todas las instancias del archivo Manifest.xml de un paquete en la raíz del contenedor de Azure Blob Store.
Este archivo de manifiesto también es el descriptor principal de los metadatos dentro del paquete y proporciona la jerarquía List, Folder y Item, junto con metadatos para los elementos que incluyen referencias a usuarios y grupos definidos en UserGroupMap.xml archivo.
Use más de un Manifest.xml si es necesario. Los manifiestos se identifican con nombres de archivo diferentes. Migration API busca todos los manifiestos a través de referencias en las entradas de ManifestFile
SystemData.xml archivo.
Coherencia de la biblioteca de documentos/id. de lista
Use un identificador web coherente y un identificador de biblioteca de documentos o un identificador de lista en el origen y la ubicación de destino. Los identificadores web incoherentes generan errores, ya que Migration API no puede encontrar la web primaria para la operación de importación.
Del mismo modo, Migration API no puede importar elementos con identificadores de biblioteca de documentos e identificadores de lista incorrectos en la biblioteca de documentos o lista de destino. No reutilice los identificadores dentro de la misma colección de sitios para evitar que Migration API importe paquetes a la misma colección de sitios de destino, independientemente de la web de destino.
Coherencia de GUID
Para evitar conflictos guid y errores de importación, use el mismo paquete para el mismo destino. La importación de un nuevo paquete con el mismo contenido provocará problemas. El paquete de un recurso compartido de archivos asigna GUID a archivos, carpetas y elementos de lista. Mantenga el paquete del recurso compartido de archivos como un registro de los GUID originales. Use los mismos GUID para paquetes posteriores para evitar conflictos y realizar un seguimiento de los cambios.
Conservar los identificadores de contenido
Los identificadores de los paquetes de importación se usan explícitamente durante la importación para identificar el contenido. Esta práctica conserva los identificadores existentes para el contenido de la biblioteca de documentos.
Haga referencia explícitamente a los identificadores Web y List de destino.
Migration API conserva los identificadores de tipo de contenido, los GUID de elemento de archivo o carpeta y los identificadores enteros de elemento de lista durante la importación. Se produce un error en la importación cuando Migration API encuentra identificadores incorrectos en el paquete.
Esta conservación permite iteraciones de importación sucesivas con paquetes diferentes, lo que permite que los elementos muevan ubicaciones.
Roles de permiso
Manifest.xml contiene los siguientes objetos relacionados con roles:
Roles (objeto)
Contiene la lista de todos los roles definidos en la Web.
Role (objeto)
Define un rol con identificador, marcas de máscara de derechos de permisos internos e información para mostrar.
Valor de RoleId
Define los identificadores del objeto Role.
Valor de PermMask
Contiene las marcas de máscara de derechos.
RoleAssignments (objeto)
Contiene la lista de todos los permisos únicos (objetos RoleAssignment).
RoleAssignment (objeto)
Incluye la lista de objetos Assignment distintos (si existe).
Assignment (objeto)
Contiene la pertenencia real de un usuario o grupo distinto y su rol real, donde
- Los valores RoleId se asignan a los valores RoleId de los objetos Role.
- Los valores de PrincipalId se asignan a los valores de identificador de los objetos User o Group respectivamente en UserGroups.xml.
Ejemplo de permisos
<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
Opcional.
SharePoint Server suele generar este archivo de manifiesto XML. Contiene una lista de requisitos de implementación en forma de requisitos de instalación en el destino de migración, como
- definiciones de características
- versiones de plantilla
- Ensamblados de elementos web
- paquetes de idioma
- y así sucesivamente.
No incluya ningún nodo secundario en la raíz para los recursos compartidos de archivos. La omisión de este archivo genera un mensaje de advertencia en el registro.
RootObjectMap.xml
Opcional.
Mantiene una lista de asignaciones de objetos secundarios (dependientes). Migration API usa este archivo de manifiesto para colocar correctamente objetos dependientes.
El objeto más común RootObject
incluido es un único objeto de tipo List. El ID
de este elemento debe ser la lista ID
de la lista de destino y ParentWebID
debe coincidir con el de la ID
web de destino primaria que contiene esta lista para que la migración se realice correctamente. Los ID
valores , WebUrl
y Url
de este objeto también deben coincidir con la estructura relacionada establecida en el archivo Manifest.xml .
SystemData.xml
Obligatorio.
Contiene varios datos del sistema de bajo nivel. También registra el número y las rutas de acceso de Manifest.xml archivos en el paquete de manifiesto, cuando hay varios manifiestos.
Versiones
SchemaVersion
hace referencia a la granja de servidores actual Build
y DatabaseVersion
de destino, actualmente "15.0.0.0".
SiteVersion
debe coincidir con la colección UIVersion
de sitios de destino , actualmente 15
.
Varios manifiestos
Enumere todos los archivos Manifest.xml del paquete en SystemData.xml, como ManifestFile
entradas.
SystemObjects inmutables
Enumere todos los SystemObjects
objetos dependientes que permanecen inmutables mediante Migration API.
SystemData.xml ejemplo
En este ejemplo SystemData.xml archivo se muestran los objetos comunes de una importación de recurso compartido de archivos. Use diferentes ID
s para cada paquete y los URL
s pueden ser diferentes.
<?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
Obligatorio.
Registra usuarios y grupos de seguridad de usuarios para administrar permisos. Migration API usa el manifiesto para determinar la pertenencia de usuarios y grupos, junto con sus roles y asignaciones específicas. Estas asignaciones incluyen permisos únicos establecidos en el nivel del objeto y su descendencia, a menos que un objeto secundario más profundo las invalide.
Las entradas de usuario o grupo no son obligatorias, pero la omisión impide que el autor o la información de seguridad del rellenado durante la importación. La API de migración genera advertencias en estos casos.
Identificadores de usuario
Identifique un usuario solo una vez en un único paquete.
Manifiesto de todos los usuarios y grupos dentro de las webs exportadas.
User (objeto)
Incluye la información sobre usuarios específicos, incluida la identificación de un principio de seguridad específico como un grupo de dominio o no, el inicio de sesión y el SystemId (SID) codificado en base64 del principio de seguridad.
Group (objeto)
Incluye la información sobre grupos específicos y la lista de pertenencia directa de ese grupo.
Los valores de propietario en objetos Group y UserId en objetos miembro dentro de objetos de grupo se asignan a otros valores de identificador de otros objetos User o Group, respectivamente.
En el ejemplo siguiente se muestra cómo manifiesto usuarios y grupos.
<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>
Asegúrese de que los valores de Inicio de sesión y SystemId de los usuarios coinciden con los valores de SharePoint.
Usuarios eliminados
Incluya un IsDeleted
valor como true
para las cuentas eliminadas. Esta práctica evita errores de búsqueda en el proceso de importación, lo que afecta negativamente al rendimiento.
Identificadores de usuario sin resolver
Si Migration API no puede resolver un usuario con la información de inicio de sesión y no se proporciona SystemId, Migration API reemplaza a este usuario por System Account
en los metadatos asociados (como Author o Editor) en el paquete y genera una advertencia en los registros de importación:
Failed to ensure user 'user@contoso.com'
Si Migration API no puede resolver un usuario con el inicio de sesión mientras se proporciona SystemId, Migration API crea un nuevo usuario eliminado con el inicio de sesión y SystemId proporcionados. Migration API usa este usuario con metadatos asociados dentro del paquete. Migration API genera una advertencia en los registros de importación:
Failed to retrieve user 'user@contoso.com' attributes from the SiteUsers; falling back to passed in values
Evitar direcciones de correo electrónico que no sean UPN en identificadores de usuario
El Login
atributo del identificador de usuario requiere un UPN. No use direcciones de correo electrónico que no sean UPN. El uso de direcciones de correo electrónico que no son UPN provoca un comportamiento inesperado en SharePoint Online.
Ejemplos
En los ejemplos siguientes se muestran las formas correctas e incorrectas de usar los identificadores de usuario.
En este caso, el usuario tiene los siguientes identificadores:
- UPN: robert@contoso.com
- Email: robert.downey@contoso.com.
Ejemplo correcto
En este ejemplo se manifiesta el usuario solo una vez, con una dirección de correo electrónico UPN.
<User Id="1" Login="i:0#.f|membership|robert@contoso.com" …/>
Ejemplo incorrecto
En este ejemplo se usa incorrectamente una dirección de correo electrónico que no es upn e incluye incorrectamente más de un identificador para un único usuario.
<User Id="1" Login="i:0#.f|membership|robert@contoso.com" …/>
<User Id="2" Login="i:0#.f|membership|robert.downey@contoso.com" …/>
En este ejemplo se usa incorrectamente una dirección de correo electrónico que no es UPN.
<User Id="2" Login="i:0#.f|membership|robert.downey@contoso.com" …/>
ViewFormsList.XML
Opcional.
Este archivo de manifiesto XML mantiene una lista de elementos web y realiza un seguimiento de si cada uno de ellos es una vista o un formulario.
Este archivo es opcional si el paquete de importación no contiene elementos web. La omisión de este archivo genera un mensaje de advertencia en el registro. Como alternativa, incluya un archivo de manifiesto con un nodo sin elementos secundarios root
para evitar el mensaje de advertencia.