Accéder au contenu principal

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>&nbsp;</p><p>&nbsp;</p>"
    $TextTemplateToPut += "<h3>Estimated Time:</h3><ul><li>&nbsp;</li></ul>"
    $TextTemplateToPut += "<h3>Person in charge:</h3><ul><li>&nbsp;</li></ul>"
    $TextTemplateToPut += "<h3>Starting time:</h3><ul><li>&nbsp;</li></ul><p>&nbsp;</p>"

    $PageTitleToUpdate = -join($pageFileTitle, " - ", $PageTitleShort)
    $ParentNodeID = 0
    $PageNodeID = 0

    Write-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 SilentlyContinue

    if($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-PnPNavigationNode

    foreach($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

Posts les plus consultés de ce blog

Série de vidéos sur le montage d'une serre horticole ACD

 Episode 1: Préparation du terrain Episode 2: Montage de la serre en elle même Episode 3: Finalisation avec le montage électrique alimentant la serre Bon visionnage Fab

Présentation des outils utiles pour l'entretien de ses haies vives

Afin de gérer les haies vives, il est nécessaire d'avoir recourt à un matériel adapté. Les solutions à batteries sont bien adaptées pour un usage personnel avec des dimensions raisonnables. Ainsi dans mon cas précis, j'utilise les outils suivants de la Gamme Ryobi 18V ONE+ électroportatif: Petit taille-haies simple mais efficace -  RYOBI OHT1855R Un modèle plus puissant qui fonctionne très bien -  RYOBI RY18HTX60A Pour les parties hautes de vos haies, voici un outil très utile -  RYOBI OPT1845 Enfin lorsque vous devez élaguer certains arbres ou certaines partie hautes de vos haies, ce dernier outil est très utile -  RYOBI OPP1820 Ces outils font parti maintenant de mon arsenal de base pour maintenir notre maison chaque saison de taille. Fab

Série de Videos sur Home Assistant intégrant la production Photovoltaïque

 Un certain nombre de vidéos sont en ligne pour intégrer sa production photovoltaïque dans Home Assistant en partant de la base. Installation de Home Assistant: On peut ensuite intégrer les composant des Micro-Onduleurs Enphase, mais aussi les batteries Enphase: Ou encore le composant de contrôle Ecojoko: Ce qui permet alors de faire des comparaisons entre les valeurs capturées: Des videos seront encore publiés dans les prochaines semaines sur différents aspects de cette solution. Fab