Recently we have finally been able to add a modern calendar view to a list in SharePoint Online but only through the UI. Before this a calendar view was only available in SharePoint classic mode. I wanted to automate this ne modern calendar view creation and in order to do this I turned to my trusty friend PnP PowerShell. I figured out that it needed to be done using SharePoint REST API by creating a new SharePoint list view using ViewType2: “MODERNCALENDAR”.
Create New Modern Events SharePoint List with Modern Calendar View
I will show you below how you can create a new Events list using PnP PowerShell and set the default view to be a modern calendar view.. You can also adapt and modify steps 2, 4, 5 & 6 to add a new modern calendar view to an existing SharePoint list.
The steps to create a new modern events list using PnP PowerShell are below:
- Create new SharePoint list using the events template:
- Set new list experience to force the list to display in the Modern experience
- Remove the default classic calendar view provisioned by default with the events template.
- Below Is the JSON body required for the add View REST API call
Note the following regarding the REST API body listed above (Credit Shreyansh Agrawal – power automate – Create Modern Calendar view for SharePoint Online List using the REST API – Stack Overflow)
- RowLimit is set to zero – this is to ensure all items for the current month/week/day are fetched correctly.
- StartDate (internal field name) is mapped to 0th entry in ViewFields
- EndDate (internal field name) is mapped to 1st entry in ViewFields
- ViewData has 5 FieldRef entries – 1 for month view and 2 each for week and day view. The fields are used as ‘Title’ for respective visualizations. If this is missing, you will see the popup to ‘fix’ calendar view.
- CalendarViewStyles has 3 CalendarViewStyle entry – will be used in future. Even if this is missing, View creation will succeed.
- ViewType2 is MODERNCALENDAR
- ViewTypeKind is 1 – which maps to HTML.
- Query can be set if required.
- Use the PnP command Invoke-PnPRestMethod to hit the /Lists/Views/Add end point using the method Post and then use the JSON body we just crafted above.
- Finally set the newly created “Calendar” view to be default for list for normal and mobile modes.
The modern calendar view is now created:
Full code in a Github Gist below:
Here I showed you using PnP.PowerShell to create a new Modern SharePoint events list with all modern views. I took me a while to work out the REST API call to create a MODERNCALENDAR view and thanks to the web developer tools in Microsoft Edge I was able to see what REST API calls were being made to create my own Modern Calendar. Hope this is helpful!
This Post Has 2 Comments
This is really impressive and promising!
Before I give it a go, I have a question: will this approach work on a classic calendar list?
I have migrated a calendar from SP2013 to SP Online and need a modern view so that I can expose the calendar as a tab in MS Teams. (Although I could display the classic calendar view in Teams, I also want the calendar to display seamlessly on mobile Teams app.)
Thanks again, great work, great sleuthing, and I hope my Jedi powers one day equal your own!
One more requirement…. I would like to keep the classic calendar view for Contributors and add a modern calendar view for Readers (ie It seems I would be skipping Steps 2 and 3 above.) Is this possible, or is it all or nothing?