Compartir a través de


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 CreateMigrationJobpará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 ManifestFileSystemData.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 IDvalores , WebUrly 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 UIVersionde 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 IDs para cada paquete y los URLs 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:

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.