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:

  1. Adicionar um campo de taxonomia à lista «SitePages».
  2. Criar a nova página.
  3. Adicionar uma web part à página.
  4. Copiar a imagem de cabeçalho para a pasta de destino e defini-la como cabeçalho da página.
  5. Desabilitar os comentários da página.
  6. 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.

Maximiliano Díaz Doglia

AI Platform Engineer & Full-Stack Developer
Building Enterprise Integrations & Automations