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 CreateMigrationJob
parâ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 ID
valores , WebUrl
e 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 UIVersion
de 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 ID
para cada pacote e os URL
s 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:
- UPN: robert@contoso.com
- Email: robert.downey@contoso.com.
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.