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 :
- Ajouter un champ de taxonomie à la liste « SitePages ».
- Créer la nouvelle page.
- Ajouter une web part à la page.
- Copier l’image d’en-tête dans le dossier de destination et la définir comme en-tête de la page.
- Désactiver les commentaires de la page.
- 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.
