Office 365: Comment créer un jeu de Pages Modernes dans un Modern Site SharePoint Online en utilisant PowerShell depuis un fichier CSV
Dans de nombreux cas, les pages modernes sont très pratiques pour un site d’aide en ligne, alors que dans le passé la réponse classique à ce besoin était de passer par des Site Wiki et les WikiPages
Les avantages d’utiliser les Modern Pages
Dans Office 365 SharePoint Online. l’implémentation des pages modernes entraine de nombreuses fonctionnalités natives simplifiant la vie des gestionnaires de contenu et la navigation de l’utilisateur final, telles que:
- Présentation moderne des pages
- Les composant disponibles Modern WebPart
- L’intégration des pages modernes dans le composant Modern News WebPart
- Agrégation des pages modernes dans les Communication Hub Site
- Agrégation des pages modernes dans les application natives SharePoint (Web et Mobile)
- Adaptation de la présentation pour tous les appareils sans aucun développement aditionnel
- ...
C’est aussi un besoin vital de se caller à la stratégie de Microsoft et l’usage des Wiki Site/Pages n’est plus du tout dans cet axe d’évolution.
Présentation du Business Case
Ce script s’inscrit dans un besoin particulier correspondant aux demandes suivantes:
- Pour chaque tâche de travail d’une checklist business, créer une page de présentation de cette tâche
- Grouper les tâches par groupe dans la navigation de gauche
- Implementer dans chacune des pages un fond de page basique préchargé
- Automatiser la création des pages et des menus
Le fichier CSV doit contenir les éléments suivant en colonne:
- CHECKID: en text semblable "1.01", qui sera utilisé pour le nom du fichier de page"1.01.aspx"
- CHECKNAME: en texte avec le nom de la tâche semblable "Collect data from the business line"
- CHECKTOPIC: en texte semblable à "01. BASICS TASKS"
Une image générique par groupe de tâche doit être placée dans la librairie de fichiers “SiteAsset” du site courant sous le format "$(CHECKTOPIC).JPG".
Une fois le site exécuté, chaque responsable de tache doit éditer et compléter les détails de la tâche comme suit:
Task Title: Collect the Data from the Business
Topic:
- 01. BASIC TASKS
Description:
Get all the data from the business line to be sure the mission is ready to start
Estimated Time:
- Some minutes
Person in charge:
- Task Manager
Starting time:
- When the mission is started
PowerShell script:
Le script peut être utilisé tel que ou adapté à votre besoin:
$HelpAndQAUrl = "https://[YourTenant].sharepoint.com/sites/SiteCollection/helpsite"
$CSVFilePath = "C:\Business-CheckList.csv"##Connecting to site - get and save your O365 credentials
[string]$username = "Admin@YourTenant.onmicrosoft.com"
[string]$PwdTXTPath = "D:\FINAL\SHAREPOINT\SECUREDPWD\ExportedPWD-$($username).txt"
$secureStringPwd = ConvertTo-SecureString -string (Get-Content $PwdTXTPath)
$cred = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $secureStringPwd# ---------------------------------------------------------------------------------------------------------------
[string]$TextTemplateToPut = ""
[string]$pageFilename = ""
[string]$pageFileTitle = ""
[string]$PageTopic = ""
[string]$PageTitleFull = ""
[string]$pageFilename = ""
[string]$PageTitleToUpdate = ""
[int]$ParentNodeID = 0
[int]$PageNodeID = 0# ---------------------------------------------------------------------------------------------------------------
#GET CSV File
$AllPagesToCreate = Import-Csv -Path $CSVFilePath# --------------------------------------------------------------------------------------------
#Loop for each line
foreach ($PageToCreate in $AllPagesToCreate)
{
# ---------------------------------------------------------------------------------------------------------------
Write-host " ==> Page ID", $PageToCreate.CHECKID, "- Name:", $PageToCreate.CHECKNAME , "- Topic:", $PageToCreate.CHECKTOPIC -ForegroundColor Yellow
# ---------------------------------------------------------------------------------------------------------------$pageFileTitle = $PageToCreate.CHECKID
$PageTopic = $PageToCreate.CHECKTOPIC
$PageTitleFull = $PageToCreate.CHECKNAME
if($PageTitleFull.IndexOf("(") -gt 0)
{
$PageTitleShort = $PageTitleFull.Substring(0, $PageTitleFull.IndexOf("("))
}
else
{
$PageTitleShort = $PageTitleFull
}
$pageFilename = -join($pageFileTitle, ".aspx")$TextTemplateToPut = "<h2>Task Title: $($PageTitleFull)</h2>"
$TextTemplateToPut += "<h3>Topic:</h3><ul><li>$($PageTopic)</li></ul>"
$TextTemplateToPut += "<h3>Description:</h3><p> </p><p> </p>"
$TextTemplateToPut += "<h3>Estimated Time:</h3><ul><li> </li></ul>"
$TextTemplateToPut += "<h3>Person in charge:</h3><ul><li> </li></ul>"
$TextTemplateToPut += "<h3>Starting time:</h3><ul><li> </li></ul><p> </p>"$PageTitleToUpdate = -join($pageFileTitle, " - ", $PageTitleShort)
$ParentNodeID = 0
$PageNodeID = 0Write-host " "
Write-host " -------------------------------------------------------------------------------------------- " -ForegroundColor green
Write-host " ---- START THE PAGE CREATION:", $pageFileTitle, "-", $pageFilename -ForegroundColor green
Write-host " ---- Page Title Full:", $PageTitleFull -ForegroundColor green
Write-host " ---- Page Title Short:", $PageTitleShort -ForegroundColor green
Write-host " -------------------------------------------------------------------------------------------- " -ForegroundColor green# ---------------------------------------------------------------------------------------------------------------
#connect to the web site using the stored credentials
Write-host " "
Write-host " -------------------------------------------------------------------------------------------- " -ForegroundColor green
Write-host " ---- CONNECT THE SITE --- " -ForegroundColor green
Write-host " CONNECTED SITE:", $HelpAndQAUrl -ForegroundColor Yellow
Connect-PnPOnline -Url $HelpAndQAUrl -Credential $cred
Write-host " -------------------------------------------------------------------------------------------- " -ForegroundColor green
$checkpage = Get-PnPClientSidePage -Identity $pageFilename -ErrorAction SilentlyContinueif($checkpage -eq $null)
{
Write-Host " >>> Page does not exist or is not modern"
$page = Add-PnPClientSidePage -Name $pageFilename -LayoutType "Article"
}
else
{
Write-Host " >>> We have a modern page present"
$page = $checkpage
}
#Add text webpart to page
Add-PnPClientSideText -Page $page -Text $TextTemplateToPut
Set-PnPClientSidePage -Identity $page -LayoutType "Article" -Title $PageTitleToUpdate$page = Get-PnPClientSidePage -Identity $pageFilename -ErrorAction SilentlyContinue
Write-host " ==>> PAGE HEADERS ImageServerRelativeUrl:", $page.PageHeader.ImageServerRelativeUrl -ForegroundColor Green
$ctx = Get-PnPContext
Write-host " ==>> WEB Relative URL:", $ctx.Web.ServerRelativeUrl -ForegroundColor Yellow
$mySiteRelativeURL = $ctx.Web.ServerRelativeUrl
$myPageRelativeURL = -join($mySiteRelativeURL, "/", $page.PagesLibrary, "/", $pageFilename)
Write-host " ==>> PAGE Relative URL:", $myPageRelativeURL -ForegroundColor Yellow$page.PageHeader.ImageServerRelativeUrl = $mySiteRelativeURL +"/SiteAssets/$($PageTopic).JPG"
$page.Save()
$page.Publish()Get-PnPConnection
$AllQuicklaunchNodes = Get-PnPNavigationNodeforeach($MyNode in $AllQuicklaunchNodes)
{
if($MyNode.Title -eq $PageTopic)
{
Write-host " ->>>> PARENT - MenuNode Title:", $MyNode.Title, "- ID:", $MyNode.ID -ForegroundColor Yellow
$ParentNodeID = $MyNode.ID
}
else
{
Write-host " - MenuNode Title:", $MyNode.Title, "- ID:", $MyNode.ID -ForegroundColor Green
}
}
if($ParentNodeID -eq 0)
{
Write-host " ===>>>> TOPIC LINK NOT EXIST, Need to create it" -ForegroundColor Red
$AddMyNode = Add-PnPNavigationNode -Title $PageTopic -Url $mySiteRelativeURL -Location "QuickLaunch"
$ParentNodeID = $AddMyNode.Id
}
$Topicnodes = Get-PnPNavigationNode -Id $ParentNodeID
foreach($MyPageNode in $Topicnodes.Children)
{
if($MyPageNode.Title -eq $PageTitleToUpdate)
{
Write-host " ->>>> PAGE NODE EXIST- MenuNode Title:", $MyPageNode.Title, "- ID:", $MyPageNode.ID -ForegroundColor Red
$PageNodeID = $MyPageNode.ID
}
else
{
Write-host " ->>>> PAGE NODE - MenuNode Title:", $MyPageNode.Title, "- ID:", $MyPageNode.ID -ForegroundColor green
}
}
if($PageNodeID -eq 0)
{
$AddMyNode = Add-PnPNavigationNode -Title $PageTitleToUpdate -Url $myPageRelativeURL -Location "QuickLaunch" -Parent $ParentNodeID
}
}
Résultat:
La page d’accueil du site peut alors être configurée pour présenter les dernières pages publiées via la WebPart Modern News
Pour chaque tâche on trouvera le résultat présenté:
Exécution Post creation
Cet autre script peut être utilisé par la suite pour adapter les pages du site avec le personnes ayant édité ces pages (responsables de tâches) et présenter ces information correctes dans la webpart:
Conclusion
Ce script a été utilisé de nombreuses fois pour créer des centaines de pages de manière industrielle.
Romelard Fabrice
English version published:
Commentaires
Enregistrer un commentaire