Compartilhar via


Arquivos de manifesto XML

A API de migração depende de arquivos de manifesto XML para processar a importação de conteúdo corretamente. Create arquivos de manifesto em um formato bem definido. A API amr também exporta metadados nesse formato.

Validação XML

A estrutura do pacote para arquivos Manifest baseia-se em uma versão restrita de Esquemas de Migração de Conteúdo do SharePoint.

Codificar caracteres XML inválidos

A API AMR codifica caracteres XML inválidos em campos. Decodificar os atributos listados em EncodedAttributes.

A API de migração não dá suporte à codificação de caracteres XML inválida.

Exemplo

Neste exemplo, esses atributos são codificados: URL, ParentWebURL, Name e 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">

Local

Colocou todos os arquivos de manifesto no nível raiz do contêiner de Armazenamento de Blobs do Azure para arquivos de manifesto.

ArchivedFiles.xml

Opcional.

Usado para processar arquivos pequenos arquivados em lote.

exemplo 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

Obrigatório.

Um arquivo XML contém as configurações de exportação especificadas com as SPExportSettings classes e outras. Ele também especifica as configurações de exportação, usadas no processo de importação subsequente no site de destino de migração. Ele também mantém um catálogo de todos os objetos exportados para o pacote de migração.

Ignorar Web Parts

A API de Migração verifica e processa Web Parts do SharePoint em determinados tipos de arquivos. Para fontes diferentes do SharePoint Server e do SharePoint Online, ignore essas verificações definindo IgnoreWebParts como true. Essa prática melhora o desempenho das tarefas de migração ao não migrar Web Parts.

Especificar fonte de conteúdo

A API de migração requer um SourceType valor, que contém a origem do conteúdo. Ele deve conter um valor da seguinte lista:

Valores aceitos SourceType

  • AmazonS3
  • AzureStorage
  • Box
  • Dropbox
  • Egnyte
  • FileShare
  • GoogleCloudStorage
  • GoogleDrive
  • MicrosoftStream
  • OneDrive
  • SharePointOnline
  • SharePointOnPremServer
  • Other

Ao declarar para Other, inclua um valor extra DetailedSource para fornecer mais detalhes sobre as informações de origem do conteúdo.

exemplo 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.

Um arquivo de manifesto XML que mantém uma lista de pesquisa simples, que registra todas as referências do Item de Lista do SharePoint. Coloque-o na raiz do Contêiner do Blob Store do Azure definido pelo CreateMigrationJobparâmetro 's azureContainerManifestUri .

Não é necessário se o pacote de importação não contiver Campos ou Exibições definidos em uma lista ou biblioteca de documentos. A omissão desse arquivo gera uma mensagem de aviso no log. Inclua um arquivo com um nó sem root filhos para evitar essa mensagem de aviso.

Manifest.xml

Obrigatório.

Um arquivo de manifesto XML que contém a lista completa do conteúdo e da estrutura do pacote de conteúdo. A API de migração usa esse arquivo de manifesto para reconstituir a origem e seus componentes.

Coloque todas as instâncias do arquivoManifest.xml para um pacote na raiz do Contêiner do Repositório de Blobs do Azure.

Esse arquivo de manifesto também é o descritor primário para metadados dentro do pacote e fornece a hierarquia Lista, Pasta e Item, juntamente com metadados para os itens, incluindo referências de volta para usuários e grupos definidos em UserGroupMap.xml arquivo.

Use mais de um Manifest.xml , se necessário. Os manifestos são identificados com nomes de arquivo diferentes. A API de migração localiza todos os manifestos por meio de referências nas entradas do arquivo SystemData.xmlManifestFile .

Consistência da ID da Biblioteca de Documentos/Lista

Use a ID da Web consistente e a ID da Biblioteca de Documentos/ID da Lista na origem e no local de destino. IDs Web inconsistentes geram erros, pois a API de Migração não consegue localizar a Web pai para a operação de importação.

Da mesma forma, a API de Migração não pode importar itens com IDs incorretas da Biblioteca de Documentos e IDs de Lista para a Biblioteca ou Lista de Documentos de destino. Não reutilize IDs na mesma coleção de sites para evitar a importação de pacotes de API de Migração para a mesma coleção de sites de destino, independentemente da Web de destino.

Consistência GUID

Para evitar conflitos guid e importar erros, use o mesmo pacote para o mesmo destino. Importar um novo pacote com o mesmo conteúdo causará problemas. O pacote de um compartilhamento de arquivos atribui GUIDs a arquivos, pastas e itens de lista. Mantenha o pacote do compartilhamento de arquivos como um registro dos GUIDs originais. Use os mesmos GUIDs para pacotes posteriores para evitar conflitos e acompanhar alterações.

Preservar identificadores de conteúdo

Os identificadores nos Pacotes de Importação são usados explicitamente durante a importação para identificar o conteúdo. Essa prática preserva os identificadores existentes para o conteúdo da Biblioteca de Documentos.

Referencie explicitamente os identificadores Web e List de destino.

A API de migração preserva identificadores de tipo de conteúdo, GUIDs de item de arquivo/pasta e identificadores inteiros do Item de Lista durante a importação. A importação falha quando a API de Migração encontra identificadores incorretos no pacote.

Essa preservação permite iterações de importação sucessivas com pacotes diferentes, permitindo que os itens movam locais.

Funções de permissão

Manifest.xml contém os seguintes objetos relacionados a funções:

Objeto Roles

Contém a lista de todas as funções definidas na Web.

Objeto Role

Define uma Função com ID, os direitos de permissões internas mascaram sinalizadores e exibem informações.

Valor RoleId

Define os identificadores do objeto Role.

Valor PermMask

Contém os sinalizadores de máscara de direitos.

Objeto RoleAssignments

Contém a lista de todas as permissões exclusivas (objetos RoleAssignment).

Objeto RoleAssignment

Inclui a lista de objetos de atribuição distintos (se houver).

Objeto Assignment

Contém a associação real de um usuário ou grupo distinto e sua função real, em que

  • Os valores de RoleId são mapeados para os valores RoleId dos objetos Role.
  • Os valores PrincipalId são mapeados para valores de ID de objetos usuário ou grupo, respectivamente, em UserGroups.xml.

Exemplo de permissões

<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.

O SharePoint Server geralmente gera esse arquivo de manifesto XML. Ele contém uma lista de requisitos de implantação na forma de requisitos de instalação no destino de migração, como

  • definições de recurso
  • versões de modelo
  • Assemblies da Web Part
  • pacotes de idiomas
  • e assim por diante.

Não inclua nenhum nó filho na raiz para compartilhamentos de arquivos. A omissão desse arquivo gera uma mensagem de aviso no log.

RootObjectMap.xml

Opcional.

Mantém uma lista de mapeamentos de objetos secundários (dependentes). A API de migração usa esse arquivo de manifesto para colocar corretamente objetos dependentes.

O mais comum RootObject incluído é um único objeto do tipo List. O ID deste item deve ser a Lista ID da lista de destinos e o ParentWebID deve corresponder à ID web de destino pai que contém essa lista para que a migração seja bem-sucedida. Os IDvalores , WebUrle Url desse objeto também devem corresponder à estrutura relacionada estabelecida no arquivo Manifest.xml .

SystemData.sml

Obrigatório.

Contém vários dados de sistema de baixo nível. Ele também registra o número e os caminhos dos arquivos Manifest.xml no pacote de manifesto, quando há vários manifestos.

Versões

SchemaVersion referências ao farm atual Build e DatabaseVersion do farm de destino, atualmente "15.0.0.0".

SiteVersion deve corresponder à coleção UIVersionde sites de destino , atualmente 15.

Vários Manifestos

Liste todos os arquivos Manifest.xml no pacote em SystemData.xml, como ManifestFile entradas.

SystemObjects imutáveis

Liste todos os SystemObjects objetos dependentes definidos que permanecem imutáveis pela API de Migração.

SystemData.xml exemplo

Este exemplo SystemData.xml arquivo mostra os objetos comuns de uma importação de compartilhamento de arquivo. Use s diferentes IDpara cada pacote e os URLs podem 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

Obrigatório.

Registra usuários e grupos de segurança do usuário para gerenciar permissões. A API de migração usa o manifesto para verificar a associação de Usuários e Grupos, juntamente com suas funções e atribuições específicas. Essas atribuições incluem permissões exclusivas definidas no nível do objeto e sua prole, a menos que um objeto filho mais profundo as substitua.

Entradas de usuário ou grupo não são obrigatórias, mas a omissão impede que informações de autor ou segurança da população durante a importação. A API de migração gera avisos nesses casos.

Identificadores de usuário

Identifique um usuário apenas uma vez em um único pacote.

Manifeste todos os Usuários e Grupos na Web(s) exportada.

Objeto User

Inclui as informações sobre usuários específicos, incluindo a identificação de um princípio de segurança específico como um grupo de domínio ou não, a entrada e o SID (SystemId) codificado base64 do princípio de segurança.

Objeto Group

Inclui as informações sobre grupos específicos e a lista de associação direta desse Grupo.

Os valores de proprietário em objetos Group e valores UserId em objetos membros dentro de objetos de grupo são mapeados para outros valores de ID de outros objetos Usuário ou Grupo, respectivamente.

O exemplo a seguir mostra como manifestar Usuários e 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>

Verifique se os valores de Entrada e SystemId dos usuários correspondem aos valores no SharePoint.

Usuários excluídos

Inclua um IsDeleted valor como true para contas excluídas. Essa prática evita falhas de pesquisa no processo de importação, o que afeta negativamente o desempenho.

Identificadores de usuário não resolvidos

Se a API de Migração não puder resolve um Usuário com as informações de entrada e o SystemId não for fornecido, a API de Migração substituirá esse Usuário System Account pelos metadados associados (como Autor ou Editor) no pacote e gerará um aviso nos logs de importação:

Failed to ensure user 'user@contoso.com'

Se a API de Migração não conseguir resolve um usuário com o Logon enquanto o SystemId for fornecido, a API de Migração criará um novo Usuário excluído com a Entrada e o SystemId fornecidos. A API de migração usa esse Usuário com metadados associados no pacote. A API de migração gera um aviso nos logs de importação:

Failed to retrieve user 'user@contoso.com' attributes from the SiteUsers; falling back to passed in values

Evitar endereços de email não UPN em identificadores de usuário

O Login atributo do identificador de usuário requer um UPN. Não use endereços de email não UPN. O uso de endereços de email não UPN causa um comportamento inesperado no SharePoint Online.

Exemplos

Os exemplos a seguir mostram as maneiras corretas e incorretas de usar os identificadores de usuário.

Nesse caso, o usuário tem os seguintes identificadores:

Exemplo correto

Este exemplo manifesta o Usuário apenas uma vez, com um endereço de email UPN.

<User Id="1" Login="i:0#.f|membership|robert@contoso.com" …/>

Exemplo incorreto

Este exemplo usa incorretamente um endereço de email não UPN e inclui incorretamente mais de um identificador para um único usuário.

<User Id="1" Login="i:0#.f|membership|robert@contoso.com" …/>
<User Id="2" Login="i:0#.f|membership|robert.downey@contoso.com" …/>

Este exemplo usa incorretamente um endereço de email não UPN.

<User Id="2" Login="i:0#.f|membership|robert.downey@contoso.com" …/>

ViewFormsList.xml

Opcional.

Este arquivo de manifesto XML mantém uma lista de Web Parts e rastreia se cada um é uma exibição ou um formulário.

Esse arquivo será opcional se o Pacote de Importação não contiver Web Parts. A omissão desse arquivo gera uma mensagem de aviso no log. Como alternativa, inclua um arquivo de manifesto com um nó sem root filhos para evitar a mensagem de aviso.