Friday, March 22, 2019

Exposing a Group calendar in Teams (also for external members)

Every Microsoft Team is built upon an Office 365 Group, and each group has a group calendar. Unfortunately external users don’t have direct access to this calendar. There are a couple of ways to add a group calendar to Teams as a teams tab, but currently there is only one configurable approach which works for external members of a team/group.

(The non-working option is to add a teams tab which point to the URL for the groups calendar.)

The steps involved are to go to the Teams modern team site, create a new page, add the calendar web part to that page, and then link to to that page as a teams tab.

Here I’ve create a page called calendar.

In the Microsoft Teams client, add a SharePoint tab, pointing to this page.

When an external user visits the team, the calendar displays nicely in the tab, as it would for internal users.

Note: Newly added users to a team might not see the calendar right away as it takes a little bit of time for permissions to synchronize

Wednesday, March 20, 2019

A simple solution to implementing proper back functionality in PowerApps

When navigating between screens in PowerApps you use the Navigate function. There is also a Back function which takes you to the previous screen. The caveat with Back is that it doesn’t build a navigation history, but remember the previous screen only. This means that if you go from screen 5 to 4 using Back, then the next Back call will take you to 5 again, not screen 3.

Do I really need to think about this?

Puzzlepart introduces Hook me up! – an anchor part for modern pagers

In January of 2018 I wrote a post showing how you could use the modern script editor web part to add a jump anchor to a modern page. Of course, you should shy this web part due to possible security risks (unless you really really know what you are doing).

Last night Theresa Eller was looking for a proper solution to this on twitter, so I whipped up a small web part which adds an invisible span tag to the page, which you can anchor to. If you set scrolltome as the id, you can reference it when creating a hyper link in the text web part.


This time around I made the code compatible with both SharePoint 2016 and 2019 as well.

Go download the sppkg file from and install it where needed.

Monday, March 18, 2019

Fetch a Bearer token in SharePoint context to be used with a back-end service

(The post image has nothing to do with bearer tokens, but the Lego 1967 Mustang GT I finished building is just freakishly cool!)

I’m working on a solution which has a small UI created using the SharePoint Framework. This UI will make an authenticated call to a back-end service, which again has to read some data from a SharePoint list for validation.

The easy approach would be to read the validation data in the UI, but this would lead to a potential security hole, disclosing the verification mechanism. I could also have read the SharePoint data using app-only permissions in the back-end service, but this adds one more moving piece.

Thus, I ended up with fetching a valid Bearer token for the logged in user, and passing that along to the back-end service, which in turn can use it for SharePoint authorization.

The code itself is fairly simple from within the SPFx web part.

const provider = await this.context.aadTokenProviderFactory.getTokenProvider();
const token = await provider.getToken('https://<tenant>');

Took me a few tries, but pass in the root URL for your tenant and you get a token you can use for future calls against any SharePoint resource (as long as it’s valid).

Tuesday, March 5, 2019

Governance and consciousness around handling Teams and Groups

foosball table shallow focus photography

I have worked in the space of content production and collaboration for quite a few years now. Along this journey new tools and technologies have arrived to help us better manage the content being produced. At the same time content production increases, and it’s no easy feat for neither technology nor people to keep up with the constant battle of managing content the right way, and making sure the right content is readily available and findable.

To simplify matters we can divide the problem into two.

  1. How do you make sure content is stored correctly according to business rules and regulations which might apply
  2. How do you make sure stale/old/obsolete content is removed and not hoarded to ensure valid content is surfaced

I have previously written about why and how you can take control of Teams and Office 365 Group creation in Office 365, and approaches automating the lifecycle management of Teams and Groups.

There is no one solution which just solves everything and each business has to form their own opinion on how they want to use technology to improve the quality of content stored in their organization. The only known is that the longer you wait before deciding on a path, the harder it is to fit the solution on top of existing content afterwards.

Once you have decided what your governance plan should be, you need to figure out what parts can be automated, and what parts require human actions – and how can you ensure humans take the correct action. If being asked if you should keep or delete a Team/Group if it seems inactive, the default human response is probably to keep it, as then you won’t get blamed for deleting anything important. A better process might be to make sure employees take ownership and are made accountable of their content – to filter out the good from the bad – and perhaps move the good content to another permanent storage.

Or go the easy route and let anarchy take hold and hope technology by itself will solve all your problems in the long run – any plan decided is better than no plan at all :)

If some of this sounds interesting, feel free to attend my session “What Options do You Have to Govern the Lifecycle of Office 365 Groups and Teams?” at the SharePoint Conference in May:

Office 365 Groups and Teams introduce many workloads such as document management, tasks management, and chat logs. Built into the Office 365 platform your organization has many tools and functions available to help control how information is governed and to help you control the lifecycle of the information stored within the groups and teams.

The goal of my presentation is to show what tools are available in the Office 365 suite to help with lifecycle management and to show how you can use them to ensure a healthy environment with reduced information bloat while still maintaining information control and integrity. Some of the functions are available in different administration UI’s, but for the IT Pro’s loving PowerShell out there, most of it today is available via PowerShell and the Microsoft Graph.

Using admin UI’s and PowerShell I will dig into some of those capabilities and show how you can get hold of the information you need in order to implement your business rules and requirements for lifecycle management of Office 365 Groups and Teams.

Save $50 and register via today!


Happy content controlling!

Post image by Alex Sajan at Unsplash