SharePoint Online + web parts, en-têtes et champs de taxonomie.

Traduit de l'original en espagnol. Lire en espagnol

Dans ce tutoriel, nous allons apprendre à automatiser la création d’une page dans SharePoint Online. Le processus comprend l’ajout de champs de taxonomie, de web parts et d’un en-tête personnalisé. Pour cela, nous utiliserons un script PowerShell et le module PnP PowerShell.

Configurer les variables

Nous allons d’abord définir quelques variables nécessaires pour se connecter à SharePoint et pour indiquer le chemin de notre image d’en-tête.

  • TenantId : ID de l’annuaire (tenant).
  • AppId : ID de l’application (client).
  • ClientSecret : secret client.
$TenantId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
$AppId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
$ClientSecret = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'

Connexion à SharePoint

Nous utilisons Connect-PnPOnline pour nous connecter à notre site SharePoint Online. Dans cet exemple, nous utilisons une identité managée pour l’authentification.

Connect-PnPOnline -Url $siteurl -ManagedIdentity

Définir d’autres variables

Nous indiquons l’emplacement de l’image d’en-tête et l’URL source depuis laquelle nous copierons cette image.

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

Vérifier si la page existe déjà

Avant de créer la page, nous vérifions si elle existe déjà avec Get-PnPPage.

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

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

Création de la page et ajout des composants

Si la page n’existe pas, nous procédons comme suit :

  1. Ajouter un champ de taxonomie à la liste « SitePages ».
  2. Créer la nouvelle page.
  3. Ajouter une web part à la page.
  4. Copier l’image d’en-tête dans le dossier de destination et la définir comme en-tête de la page.
  5. Désactiver les commentaires de la page.
  6. Définir le propriétaire du contenu.
If($FileExists)
{
    Write-output "Nothing to do for this site:"
    write-output  $siteurl
}

Si la page n’existe pas, nous poursuivons le reste du processus :

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
}

Fermer la session

Enfin, une fois nos opérations terminées, nous nous déconnectons du site SharePoint.

Disconnect-PnPOnline

Code complet

Voici le code complet du script, que vous pouvez utiliser pour automatiser la création d’une page dans SharePoint Online avec tous les éléments mentionnés ci-dessus.

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

Ce script doit être exécuté par un utilisateur disposant des autorisations adéquates dans SharePoint et du module PnP PowerShell déjà installé. N’oubliez pas de remplacer les valeurs des variables TenantId, AppId, ClientSecret ainsi que l’ID du champ de taxonomie par les informations de votre environnement SharePoint Online.

Maximiliano Díaz Doglia

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