SharePoint Online + web parts, cabeçalhos e campos de taxonomia.
Traduzido do original em espanhol. Ler em espanhol
Neste tutorial, vamos aprender a automatizar a criação de uma página no SharePoint Online. O processo inclui a adição de campos de taxonomia, web parts e um cabeçalho personalizado. Para isso, usaremos um script PowerShell e o módulo PnP PowerShell.
Configurar variáveis
A seguir, vamos definir algumas variáveis necessárias para estabelecer a conexão com o SharePoint e para definir o caminho da nossa imagem de cabeçalho.
TenantId: ID do diretório (tenant).AppId: ID do aplicativo (cliente).ClientSecret: segredo do cliente.
$TenantId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
$AppId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
$ClientSecret = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
Conexão ao SharePoint
Usamos Connect-PnPOnline para nos conectar ao nosso site do SharePoint Online. Neste exemplo, estamos usando uma identidade gerenciada para a autenticação.
Connect-PnPOnline -Url $siteurl -ManagedIdentity
Definir mais variáveis
Especificamos o local da imagem de cabeçalho e a URL de origem de onde vamos copiá-la.
$pageRelativeImage="SiteAssets/ZerogapBanner.jpg"
$source_url_header="/sites/ZerogapSite/SiteAssets/Zerogap/ZerogapBanner.jpg"
Verificar se a página já existe
Antes de criar a página, verificamos se ela já existe usando Get-PnPPage.
$full_url_path=$siteurl + "/sitepages/" + $page_name + ".aspx"
$FileExists=$null
$FileExists = Get-PnPPage -identity $page_name -ErrorAction SilentlyContinue
Criação da página e adição de componentes
Se a página não existir, seguimos para:
- Adicionar um campo de taxonomia à lista «SitePages».
- Criar a nova página.
- Adicionar uma web part à página.
- Copiar a imagem de cabeçalho para a pasta de destino e defini-la como cabeçalho da página.
- Desabilitar os comentários da página.
- Definir o proprietário do conteúdo.
If($FileExists)
{
Write-output "Nothing to do for this site:"
write-output $siteurl
}
Se a página não existir, continuamos com o restante do processo:
Else {
Add-PnPTaxonomyField -List "SitePages" -DisplayName "Archive" -InternalName "Tracking" -TaxonomyItemId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
Add-PnPPage -Name $page_name
$page_file=$page_name + ".aspx"
Add-PnPPageWebPart -Page $page_file -Component "Zerogap Tracking"
$PageHeaderImage = $relative_site + "/" + $pageRelativeImage
$target_url=$relative_site + "/SiteAssets"
$target_url=$target_url.replace('//','/')
$DocumentLibrary = $null
$DocumentLibrary = Get-PnPList -Identity "SiteAssets"
if ($DocumentLibrary -eq $null) {
$Web = Get-PnPWeb
$Zerogap = $Web.Lists.EnsureSiteAssetsLibrary()
$Zerogap = Invoke-PnPQuery
}
Copy-PnPFile -SourceUrl $source_url_header -TargetUrl $target_url -Force
Set-PnPPage -Identity $page_file -CommentsEnabled:$false
$page=Get-PnPClientSidePage -Identity $page_file
$page.SetCustomPageHeader($PageHeaderImage)
$page.Save()
$Page.Publish()
Set-PnPPage -Identity $page_file -Publish
$values=@{"Editor"="admin@Zerogap.com"; "Author"="admin@Zerogap.com"}
$id = Get-PnPPage -Identity $page_name | Select -ExpandProperty PageId
$Zerogap = Set-PnPListItem -List "Site Pages" -Identity $id -Values
$values -UpdateType UpdateOverwriteVersion
Set-PnPPage -Identity $page_file -Publish
}
Desconectar a sessão
Por fim, depois de concluir nossas operações, nos desconectamos do site do SharePoint.
Disconnect-PnPOnline
Código completo
A seguir, o código completo do script, que pode ser usado para automatizar a criação de uma página no SharePoint Online com todos os elementos mencionados.
Param
(
[Parameter (Mandatory = $true)]
[string] $siteurl,
[Parameter (Mandatory = $true)]
[string] $page_name,
[Parameter (Mandatory = $true)]
[string] $relative_site
)
$TenantId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
$AppId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
$ClientSecret = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
Connect-PnPOnline -Url $siteurl -ManagedIdentity
$pageRelativeImage="SiteAssets/ZerogapBanner.jpg"
$source_url_header="/sites/ZerogapSite/SiteAssets/Zerogap/ZerogapBanner.jpg"
$full_url_path=$siteurl + "/sitepages/" + $page_name + ".aspx"
$FileExists=$null
$FileExists = Get-PnPPage -identity $page_name -ErrorAction SilentlyContinue
If($FileExists)
{
Write-output "Nothing to do for this site:"
write-output $siteurl
}
Else {
Add-PnPTaxonomyField -List "SitePages" -DisplayName "Archive" -InternalName "Tracking" -TaxonomyItemId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
Add-PnPPage -Name $page_name
$page_file=$page_name + ".aspx"
Add-PnPPageWebPart -Page $page_file -Component "Zerogap Tracking"
$PageHeaderImage = $relative_site + "/" + $pageRelativeImage
$target_url=$relative_site + "/SiteAssets"
$target_url=$target_url.replace('//','/')
$DocumentLibrary = $null
$DocumentLibrary = Get-PnPList -Identity "SiteAssets"
if ($DocumentLibrary -eq $null) {
$Web = Get-PnPWeb
$Zerogap = $Web.Lists.EnsureSiteAssetsLibrary()
$Zerogap = Invoke-PnPQuery
}
Copy-PnPFile -SourceUrl $source_url_header -TargetUrl $target_url -Force
Set-PnPPage -Identity $page_file -CommentsEnabled:$false
$page=Get-PnPClientSidePage -Identity $page_file
$page.SetCustomPageHeader($PageHeaderImage)
$page.Save()
$Page.Publish()
Set-PnPPage -Identity $page_file -Publish
$values=@{"Editor"="admin@Zerogap.com"; "Author"="admin@Zerogap.com"}
$id = Get-PnPPage -Identity $page_name | Select -ExpandProperty PageId
$Zerogap = Set-PnPListItem -List "Site Pages" -Identity $id -Values $values -UpdateType UpdateOverwriteVersion
Set-PnPPage -Identity $page_file -Publish
}
Disconnect-PnPOnline
Este script deve ser executado por um usuário com as permissões adequadas no SharePoint e com o módulo PnP PowerShell já instalado. Lembre-se de substituir os valores das variáveis TenantId, AppId, ClientSecret e o ID do campo de taxonomia pelas informações do seu ambiente do SharePoint Online.
