O Formato de Arquivo XML Aberto do Office PNP
Se você tiver um modelo que contenha referências de arquivo (por meio do elemento <pnp:Files />
) será preciso distribuir o arquivo XML e os arquivos que são referidos. Embora isso funcione, é muito fácil perder arquivos ao copiá-los para outro local.
Observação
O PnP Provisioning Framework & Mecanismo de Provisionamento PnP são soluções de software livre com a comunidade ativa fornecendo suporte para ele. Não há nenhuma SLA para o suporte da ferramenta de software livre por parte da Microsoft.
Por esse motivo, introduzimos um formato específico Open XML do Office, chamado "arquivo pnp". É um arquivo zip com uma estrutura específica dentro dele. Se você renomear o arquivo .pnp para ter uma extensão .zip, basta abrir o arquivo e olhar nele.
Arquivos
Se você abrir a pasta Arquivos na pasta zipada, verá muitos nomes de arquivos estranhos, tudo com base em um GUID (Identificador Global Exclusivo)
O próprio modelo está localizado nesta lista, ele tem uma extensão .xml. Os outros arquivos que você vê são, na verdade, arquivos aos quais você faz referência no seu modelo XML.
Cada arquivo foi renomeado para ter um nome exclusivo. O motivo disso é que o formato de arquivo Open XML do Office não permite subpastas nesta estrutura, mas e se você tiver dois arquivos diferentes referidos no seu modelo, cada um com o mesmo nome de arquivo? Digamos que você tenha um arquivo chamado projeto.docx que vai para a sua biblioteca de documentos compartilhados e você tem outro arquivo projeto.docx que vai para uma biblioteca de Documentos de Projeto? Por esse motivo, renomeamos os arquivos para ter um nome exclusivo.
Quando aplicamos o modelo, usamos um índice de pesquisa para localizar o nome de arquivo real. Essa tabela de pesquisa estará localizada na pasta ProvisioningTemplate
e será chamada files-map.xml
.
Este é um exemplo do conteúdo desse arquivo:
<PnPFilesMap xmlns="clr-namespace:OfficeDevPnP.Core.Framework.Provisioning.Connectors.OpenXML.Model;assembly=OfficeDevPnP.Core" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<PnPFilesMap.Map>
<x:String x:Key="19cd09af-97a4-4015-ab9e-22451180702a.xml">theperspective.xml</x:String>
<x:String x:Key="cce8b9eb-73d2-4f72-8f42-2c6eb08e1566.png">assets/__sitelogo___sitelogo_theperspective.png</x:String>
<x:String x:Key="e4d4df2d-dab9-48e6-ab9e-8791d8bd8a86.pdf">assets/documents/Contoso Falcon.pdf</x:String>
<x:String x:Key="c364ce2a-05f0-4cfa-b916-9476004757ba.pdf">assets/documents/Contoso Flex.pdf</x:String>
<x:String x:Key="d06ca829-8e74-42e6-92b7-426899e82243.pdf">assets/documents/Contoso Mark8 Controller.pdf</x:String>
<x:String x:Key="670ef91a-18b1-4869-9ca2-fc573e6eca2f.pdf">assets/documents/Contoso Mark8.pdf</x:String>
<x:String x:Key="b90f3fd6-933f-4c55-a267-298be21c9d32.pdf">assets/documents/Contoso Quad.pdf</x:String>
<x:String x:Key="35667dfc-1a0c-4322-8980-43c58dd6ea70.png">assets/SitePages/2019-sales-leadership-award/sales-leadership-award.png</x:String>
<x:String x:Key="5c886067-3fd3-48bc-974e-75e7fc3aece0.jpeg">assets/SitePages/Contoso-called-on-drone-pilots-to/AdobeStock_145027729.jpeg</x:String>
<x:String x:Key="eeebf271-8661-4429-91f8-a3798b278900.jpg">assets/SitePages/Contoso-partners-with-non-profit-to-deliver-life-saving-supplies/7719-larm-rmah-216854-unsplash.jpg</x:String>
<x:String x:Key="48596918-fcbc-4d48-a0a9-ed966a4d1d65.jpg">assets/SitePages/Miriam-Graham--Contoso-s-new-Chief-Marketing-Officer/CLO17_azure_004.jpg</x:String>
<x:String x:Key="ceb43a63-37e5-4730-aad0-58fb5c3ea711.jpg">assets/SitePages/One-million-drones-sold-in-2018/kevin-chow-176761-unsplash.jpg</x:String>
<x:String x:Key="936af989-985e-4f2a-9f16-39da9c2e8dea.jpg">assets/SitePages/One-million-drones-sold-in-2018/white-drone-hovering-in-a-bright-blue-sky-PFV2XG7.jpg</x:String>
<x:String x:Key="e79b754e-c9f3-44a0-ae57-00119f326cf7.jpeg">assets/SitePages/Our-commitment-to-sustainability/AdobeStock_83900723.jpeg</x:String>
<x:String x:Key="1fca3e50-1d69-4bd1-87db-d3363803b6c8.jpg">assets/SitePages/Patti-announces-flagship-store-opening/contoso-storefront.jpg</x:String>
<x:String x:Key="63767808-1e11-40f8-956e-475d98e8a9f4.jpeg">assets/SitePages/Pushing-the-Boundaries-on-Aerial-Inspection/AdobeStock_137739028.jpeg</x:String>
<x:String x:Key="d38d36c8-3fff-49aa-8cf2-c6b0a3efcdab.jpg">assets/SitePages/Singapore-building-update--August-2019/12891-artist_rendering.jpg</x:String>
<x:String x:Key="229a203c-64cb-463c-b6ff-5c3e8c6fa631.jpeg">assets/SitePages/The-future-of-air-traffic--safely-sharing-the-skies-with-drones/AdobeStock_132294759.jpeg</x:String>
<x:String x:Key="979f54ef-cb91-4c49-97b0-4d93e62c1ab2.png">assets/SitePages/The-importance-of-branding-at-Contoso/SBLB-BRANDING.png</x:String>
<x:String x:Key="a6e4fc79-27c5-4f66-b540-fcb4ce1783c9.jpg">assets/SitePages/ThePerspective/23363-showcase.jpg</x:String>
<x:String x:Key="4bde9cf8-20c0-41a2-a28a-32d502d1e030.jpg">assets/SitePages/ThePerspective/27137-consumer-showcase-thumb-1.jpg</x:String>
<x:String x:Key="8561942b-8c11-4b30-afca-0bfd3a8a4c45.jpg">assets/SitePages/ThePerspective/33318-consumer-showcase-thumb-2.jpg</x:String>
<x:String x:Key="c60d109a-21ad-4d3e-b9b4-d92168a463e8.jpg">assets/SitePages/ThePerspective/1548836252flysafe-thumb.jpg</x:String>
<x:String x:Key="a553db37-a27f-48a1-8c25-72e3fd6479b3.jpeg">assets/SitePages/ThePerspective/AdobeStock_109868254.jpeg</x:String>
<x:String x:Key="cfd7e6e5-0c92-4f61-8713-ae6942e9d1c6.jpeg">assets/SitePages/ThePerspective/AdobeStock_132294759.jpeg</x:String>
<x:String x:Key="659ca9d3-081c-46c7-b0e5-23bb6e8bfaf9.jpg">assets/SitePages/ThePerspective/cta-banner.jpg</x:String>
<x:String x:Key="abcc211e-18fc-4864-9c06-724b47164102.jpg">assets/SitePages/ThePerspective/nasa-_SFJhRPzJHs-unsplash.jpg</x:String>
<x:String x:Key="ca166bc3-c2ec-44bf-8933-2a688d8702d2.png">assets/SitePages/Why-simplicity-matters/poster-patti-quote.png</x:String>
</PnPFilesMap.Map>
</PnPFilesMap>
Você verá que, para cada arquivo encontrado na pasta Files
temos uma entrada correspondente no arquivofiles-map.xml
.
Editar manualmente
Em princípio, é possível editar manualmente o arquivo .pnp extraindo o arquivo zip para uma pasta, atualizando os arquivos, adicionando arquivos, alterando o arquivo files-map.xml
, mas recomendamos que você use o PnP PowerShell para fazer o trabalho para você.
Criando um arquivo PnP
A maneira mais fácil de criar um arquivo PnP é extrair um modelo de um site e especificar a extensão .pnp. O cmdlet fará o trabalho para você:
Connect-PnPOnline -Url https://yourtenant.sharepoint.com/sites/yoursite
Get-PnPSiteTemplate -Out myfile.pnp
Observação
O PnP PowerShell é uma solução de software livre com uma comunidade ativa de suporte. Não há nenhuma SLA para o suporte da ferramenta de software livre por parte da Microsoft.
No entanto, isso não permite que você modifique o modelo facilmente. A melhor maneira é:
- Crie um arquivo deconfiguração e certifique-se de que, pelo menos, definir a
persistAssetFiles
propriedade paratrue
, opcionalmente especificando para extrair bibliotecas como SiteAssets, Documentos Compartilhados, WebSettings (para o logotipo etc.). - Crie uma nova pasta no seu sistema de arquivos e navegue até essa pasta com o PowerShell.
- Extraia um modelo como um arquivo XML e forneça o arquivo de configuração:
Connect-PnPOnline -Url https://yourtenant.sharepoint.com/sites/yoursite Get-PnPSiteTemplate -Out myfile.xml -Configuration ./yourconfiguration.json
- Você observará que uma ou mais pastas adicionais serão criadas na pasta. Eles contêm os arquivos. Quando abrir o arquivo XML, você verá
<pnp:File />
elementos apontando para esses arquivos. - Leia o modelo em um objeto na memória e salve-o como um arquivo PnP:
$template = Read-PnPSiteTemplate -Path myfile.xml Save-PnPSiteTemplate -Out myfile.pnp -Template $template
Observação
Você também pode salvar um modelo de locatário usando o Windows PowerShell substituto Read-PnPSiteTemplate
com Read-PnPTenantTemplate
e Save-PnPSiteTemplate
com Save-PnPTenantTemplate
. Confira Modelo de Locatário de Provisionamento de PnP para obter mais informações sobre os modelos do Locatário.