Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Blog Technique de Romelard Fabrice

Les dernières Actualités de Romelard Fabrice (Alias fabrice69 ou F___) principalement autour des technologies Microsoft

Actualités

  • Toutes les actualités et informations sur les technologies Microsoft principalement autour de .NET et SQL Server

Archives

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

Untitled-HelpPageCreated-02

Pour chaque tâche on trouvera le résultat présenté:

Untitled-HelpPageCreated-01

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:

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: mercredi 17 octobre 2018 12:50 par ROMELARD Fabrice

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Retrouvez-moi aux Microsoft experiences18 ! par Blog de Jérémy Jeanson le 11-06-2018, 22:25

- Office 365: Script PowerShell pour extraire les Teams associés à un utilisateur spécifié par Blog Technique de Romelard Fabrice le 11-06-2018, 13:37

- SharePoint: Extraire les pages publiées dans un site de publishing en CSV par Blog Technique de Romelard Fabrice le 11-06-2018, 11:04

- Office 365: Comment créer un jeu de Pages Modernes dans un Modern Site SharePoint Online en utilisant PowerShell depuis un fichier CSV par Blog Technique de Romelard Fabrice le 10-17-2018, 12:50

- Office 365: Comment Utiliser les Modern Pages dans un Site Intranet SharePoint basé sur le Publishing site par Blog Technique de Romelard Fabrice le 10-16-2018, 15:34

- Office 365: Comment changer le nom “Auteur” dans les pages modernes d'un Modern Site SharePoint Online par Blog Technique de Romelard Fabrice le 10-16-2018, 15:07

- Reprise des articles Codes-Sources de 2011 à 2013 par Blog de Jérémy Jeanson le 08-21-2018, 16:08

- Office 365: Modifier les jeux de couleur dans les Thèmes des pages classiques de SharePoint Online par Blog Technique de Romelard Fabrice le 08-08-2018, 17:27

- Office 365: Modifier les jeux de couleur dans les Thèmes des pages modernes de SharePoint Online par Blog Technique de Romelard Fabrice le 07-04-2018, 13:26

- Office 365: Script PowerShell pour fixer le Quota Warning de toutes les collections d’un tenant par Blog Technique de Romelard Fabrice le 07-03-2018, 14:16