SharePoint Online + web part, intestazioni e campi di tassonomia.

Tradotto dall'originale in spagnolo. Leggi in spagnolo

In questo tutorial impareremo ad automatizzare la creazione di una pagina in SharePoint Online. Il processo include l’aggiunta di campi di tassonomia, web part e un’intestazione personalizzata. Per farlo useremo uno script PowerShell e il modulo PnP PowerShell.

Configurare le variabili

Per prima cosa definiamo alcune variabili necessarie per collegarci a SharePoint e per indicare il percorso dell’immagine di intestazione.

  • TenantId: ID della directory (tenant).
  • AppId: ID dell’applicazione (client).
  • ClientSecret: segreto client.
$TenantId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
$AppId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
$ClientSecret = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'

Connessione a SharePoint

Usiamo Connect-PnPOnline per collegarci al nostro sito SharePoint Online. In questo esempio usiamo un’identità gestita per l’autenticazione.

Connect-PnPOnline -Url $siteurl -ManagedIdentity

Definire altre variabili

Indichiamo la posizione dell’immagine di intestazione e l’URL di origine da cui la copieremo.

$pageRelativeImage="SiteAssets/ZerogapBanner.jpg"
$source_url_header="/sites/ZerogapSite/SiteAssets/Zerogap/ZerogapBanner.jpg"

Verificare se la pagina esiste già

Prima di creare la pagina, verifichiamo se esiste già usando Get-PnPPage.

$full_url_path=$siteurl + "/sitepages/" + $page_name + ".aspx"

$FileExists=$null
$FileExists = Get-PnPPage -identity $page_name -ErrorAction SilentlyContinue

Creazione della pagina e aggiunta dei componenti

Se la pagina non esiste, procediamo a:

  1. Aggiungere un campo di tassonomia alla lista «SitePages».
  2. Creare la nuova pagina.
  3. Aggiungere una web part alla pagina.
  4. Copiare l’immagine di intestazione nella cartella di destinazione e impostarla come intestazione della pagina.
  5. Disattivare i commenti della pagina.
  6. Impostare il proprietario del contenuto.
If($FileExists)
{
    Write-output "Nothing to do for this site:"
    write-output  $siteurl
}

Se la pagina non esiste, continuiamo con il resto del 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
}

Chiudere la sessione

Infine, una volta terminate le operazioni, ci disconnettiamo dal sito SharePoint.

Disconnect-PnPOnline

Codice completo

Ecco il codice completo dello script, che puoi usare per automatizzare la creazione di una pagina in SharePoint Online con tutti gli elementi descritti sopra.

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

Questo script deve essere eseguito da un utente con i permessi adeguati in SharePoint e con il modulo PnP PowerShell già installato. Ricorda di sostituire i valori delle variabili TenantId, AppId, ClientSecret e l’ID del campo di tassonomia con i dati del tuo ambiente SharePoint Online.

Maximiliano Díaz Doglia

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