samedi, avril 27, 2024

Le Blog de Teamy

En route pour l'école 2.0 avec Microsoft 365 Education

Microsoft 365PowerShellSharePoint

Calendrier ‘Classique’ vs Calendrier ‘Moderne’


Nombreux gestionnaires de sites SharePoint Online sont confrontés à une problématique avec l’utilisation de listes de type ‘Evènement’. Ce type de liste très utile, est un peu l’enfant oublié de la famille SharePoint. Car ces listes non pas été ‘modernisées’ au niveau des interfaces actuelles de SharePoint Online. Tout ce qui est proposé par Microsoft, c’est l’utilisation de la webpart ‘Event » sur les pages ‘modernes’ pour afficher le contenu d’une liste ‘Event’. Mais cette approche n’est pas toujours suffisante, surtout si nous avons ajouter nos propres colonnes dans ces listes d’évènements.

L’objectif de cet article est donc de passer de ceci

À ceci

Tout en permettant l’utilisation de la widget SharePoint ‘Event’ sur les pages modernes, mais aussi en offrant la possibilité d’ajouter nos propres colonnes, et de les ajouter sur la vue de type ‘Calendrier’ Moderne.

Visual Studio Code

Pour arriver à ce genre de résultat, il va falloir passer par l’exécution de code PowerShell depuis un environnement ‘Visual Studio Code’

Tout ce dont vous avez besoin pour créer d’excellentes applications. Gratuitement.
Logiciels et services gratuits pour les développeurs – Visual Studio (microsoft.com)

Je vous invite à télécharger et installer ‘Visual Studio Code’ pour réaliser la suite des opérations décrites dans cet article

Pour exécuter le code qui sera fournit ci-dessous, nous devons compléter notre environnement de développement avec deux modules ‘extensions’.

– L’extension PowerShell
– L’extension PnP PowerShell

Lorsque l’installation de ‘Visual Studio Code’ est terminée, je vous invite à l’exécuter

Et d’afficher les extensions (suivre la flèche rouge)

Dans la zone de recherche : powershell
Et cliquer sur ‘Install’

Ensuite dans la zone de recherche : Pnp PowerShell
Et cliquer sur ‘Install’

Fichier source PowerShell

Nous allons créer un fichier source pour recevoir notre code, un fichier PowerShell a comme extension ‘.ps1’

Création d’un fichier texte sour Visual Studio Code

Une fois le fichier créé, nous allons le sauvegarder comme fichier de script PowerShell

Lui donner un petit nom aussi par la même occasion.
‘Modern Event List Creation.ps1’

Code Source du script PowerShell

				
					$SharePointSiteUrl = "https://teamyedu.sharepoint.com/sites/Intranet"
$SharePointListName = "Mon Agenda Moderne"
$DefaultCalendarViewName = "Calendrier"

clear

Connect-PnPOnline -Url $SharePointSiteUrl -Interactive
$list = New-PnPList -Title "$SharePointListName" -Template Events


Set-PnPList -Identity $List -ListExperience NewExperience
Remove-PnPView -Identity $DefaultCalendarViewName -List $list -Force #Remove Classic Style Calendar Default View

#New Calendar View
$viewCreationJson = @"
{
    "parameters": {
        "__metadata": {
            "type": "SP.ViewCreationInformation"
        },
        "Title": "$DefaultCalendarViewName",
        "ViewFields": {
            "__metadata": {
                "type": "Collection(Edm.String)"
            },
            "results": [
                "EventDate",
                "EndDate",
                "Title"
            ]
        },
        "ViewTypeKind": 1,
        "ViewType2": "MODERNCALENDAR",
        "ViewData": "<FieldRef Name=\"Title\" Type=\"CalendarMonthTitle\" /><FieldRef Name=\"Title\" Type=\"CalendarWeekTitle\" /><FieldRef Name=\"Title\" Type=\"CalendarWeekLocation\" /><FieldRef Name=\"Title\" Type=\"CalendarDayTitle\" /><FieldRef Name=\"Title\" Type=\"CalendarDayLocation\" />",
        "CalendarViewStyles": "<CalendarViewStyle Title=\"Day\" Type=\"day\" Template=\"CalendarViewdayChrome\" Sequence=\"1\" Default=\"FALSE\" /><CalendarViewStyle Title=\"Week\" Type=\"week\" Template=\"CalendarViewweekChrome\" Sequence=\"2\" Default=\"FALSE\" /><CalendarViewStyle Title=\"Month\" Type=\"month\" Template=\"CalendarViewmonthChrome\" Sequence=\"3\" Default=\"TRUE\" />",
        "Query": "",
        "Paged": true,
        "PersonalView": false,
        "RowLimit": 0
    }
}
"@

Invoke-PnPSPRestMethod -Method Post -Url "$SharePointSiteUrl/_api/web/lists/GetByTitle('$SharePointListName')/Views/Add"  -ContentType "application/json;odata=verbose" -Content $viewCreationJson
Set-PnPView -List $list -Identity "$DefaultCalendarViewName" -Values @{DefaultView=$true;MobileView=$true;MobileDefaultView=$true} #Set View To Be Default

				
			

Vous avez trois praramètres à définir :

$SharePointSiteUrl = « https://teamyedu.sharepoint.com/sites/Intranet »
L’adresse complète du site SharePoint où vous souhaitez ajouter une liste d’évènements

$SharePointListName = « Mon Agenda Moderne »
Le nom de la liste que vous souhaitez créer

$DefaultCalendarViewName = « Calendrier »
Le nom de la vue de type calendrier que vous souhaitez

Exécution du script

La première étape lors de l’exécution, est l’authentification

Il vous faut utiliser un compte qui a les permissions nécessaires sur le site SharePoint de votre choix

Résultat

Vérification du résultat sur mon site SharePoint

Tout cela me semble en effet correct comme attendu.

Il ne reste plus qu’à espérer qu’un jour, Microsoft opère une mise à jour de ces listes ‘Event’ pour bénéficier de cette modernisation sans passer par ce genre d’approche codée.

Remarque : Il existe actuellement un ‘bug’ connu chez Microsoft mais toujours non résolu. La colonne ‘Titre’ de ces listes génère un comportement bizarre lorsque l’utilisateur clique dessus.  Le navigateur tente un téléchargement.  Mais cela n’empêche pas le bon fonctionnement de la liste en question.

Si vous souhaitez appliquer cette approche sur une liste existante, il vous suffit de remplacer le code suivant :

				
					$list = New-PnPList -Title "$SharePointListName" -Template Events
				
			

par

				
					$List = Get-PnPList -Identity $SharePointListName
				
			

Comment avez-vous trouvé ce billet ?

N'hésitez pas à voter !

Score moyen 5 / 5. Nombre de vote 1


S’abonner
Notifier de
guest
0 Commentaires
Inline Feedbacks
View all comments