The SharePoint Success Site is an extension of the great Microsoft 365 learning pathways site, which allows you to use and create curated playlists within a SharePoint site to offer training and support for users. The SharePoint Success Site is a fairly recent introduction to the learning pathways family and is offered as a standalone deployable option from the SharePoint look book.
How to provision
There are two ways to provision the SharePoint Success Site, either directly from the SharePoint look book, or via the learning pathways site itself.
Provision via the SharePoint look book
The SharePoint Success Site is dependent on the learning pathways site, so you will need to provision that first, or make sure that it is updated to the current version. More information on how to update the learning pathways solution can be found here.
You will need to be a global administrator to provision the SharePoint Success Site (described as tenant admin in the look book)
You will need to have an app catalog site in your SharePoint environment. More details on how to create an app catalog site can be found here
You will need to be an app catalog administrator to provision the SharePoint Success Site
Provision via the learning pathways site
Navigate to the learning pathways site in your SharePoint environment
From the navigation menu > select Learning Pathways Administration
Press the ellipsis … > add content pack
Select the SharePoint Success Site
This will then take you through to the SharePoint look book to follow the steps as described above
Once provisioned, the SharePoint Success Site will be deployed as a separate communication site within your environment. The site uses a content pack installed in the learning pathways site, which will be displayed within the site.
Issues and troubleshooting
Learning pathways errors in the SharePoint Success Site
When I tried to provision the SharePoint Success Site it didn’t work as seamlessly as I expected. For me, after provisioning the site via the SharePoint look book I received the following error across all pages displaying the learning pathways web part:
In this post we demo the ability to download approvals in Microsoft Teams as PDFs for filing, printing or transferring.
Microsoft introduced the ability to save, print and transfer approvals as PDFs in late 2022. With this feature, approval creators are able to save a completed approval request to a PDF file and have the option to print it. At the time of writing, there was very little online about this feature, or what it looks like – so here it is in action!
Demo – save a PDF from approval
There are several ways to trigger a new approval, via Teams chat or channel message, the approvals app or via Power Automate to name a few. In my example, I created a Teams channel approval:
Note: There’s a brief delay after sending your approval before it appears within your activity feed, or the approvals app (approx. 5 minutes). Once it does, you are able to go ahead and approve/ reject it. You cannot save approvals as PDF whilst they are in the ‘requested’ state.
Once the approval has been completed, you can either view the details of the approval (if a channel message) or open the approval up from the approvals app in Teams.
Once your approval is open > press Save as PDF.
A PDF export of the approval window will download into the local downloads folder on your device. The output will look something like the below:
There is no way currently to change the download location of the PDF or change the behaviour. It would be nice it it was configurable to set it to save to a OneDrive location potentially.
There are no standard approval triggers related to this functionality in Power Automate. Again, for the same purpose as above, it would be good to be able to leverage this functionality via Power Automate to route the downloaded PDF to a OneDrive/ SharePoint location.
This is an oldie but a goodie in my opinion, this post will show you how to use library filters in SharePoint to only show items/ files created, or modified by the current user.
The steps below will guide you through the process of updating the view of a list or library to only show items created or modified by the current, logged in user.
Open the list or library you wish to update
From the library actions ribbon > select the current view (for example: all documents)
Press edit current view
Scroll down the edit view page until you get to the filter section
Create the following filter:
NOTE: this example will only show items that were created by OR modified by the current, logged in user. If you want your filter to only show items where both these values are true, change OR to AND.
Press OK to save your changes
Now your view should have updated to only show items created by, or modified by the current, logged in user.
This example is really simple and easy to implement and there isn’t any real impact on your users as nothing is technically being restricted, just filtered out of the default view.
The flip-side of this is that in of itself could be considered a limitation if there is information stored within the list/ library that requires limited permissions. I’ll go into the options available for this later in this post.
However with that said, depending on what permissions you have in place for your list/ library, you could use this approach to secure the contents too.
Consideration #1 – Views don’t change permissions
A “back door” to gaining access to all contents stored in the list/ library would be to use a different view than the set default view to access all items (for example: if you created a new view to follow the below method, but left the default view set to show everything).
The solution to this would be to apply this filter approach to the default view, make sure any other public views follow the same approach and make sure end users don’t have elevated permissions.
Consideration #2 – Ensure permissions are set correctly
The only way an end user could bypass this approach without any “all items” views available, would be if they had the permissions to do so. The permission that controls this is called the Manage Lists permission, which is only granted via the Edit, Design, Full Control, Manage Hierarchy permission levels by default.
If end users aren’t in these groups, your in luck!
Consideration #3 – list/ library contents is not searchable
If you are using views to filter who can see contents within your list/ library then you will need to ensure this setting is updated if the contents needs to be hidden (below example is a document library):
Press the cog button > library settings
Press advanced settings
Under Search > change allow items from this document library to appear in search resultsto No
Consideration #4 – If it’s a list, enable item level permissions
With lists, in advanced settings there is an additional configuration option – item level permissions which allows you to specify which items users can read and edit.
As the heading implies, this consideration only works for lists in SharePoint as the functionality isn’t available out the box for document libraries. SharePoint Maven have written up what the two different levels of item level permissions you can set mean, which you can find here.
Have you ever changed the name of a SharePoint Online site and tried to re-use the old URL for a new site? If you have you have probably encountered an issue where SharePoint admin center will tell you that URL is still in use. Well this is because the URL is, in fact still in use in the form of a redirect.
In 2019, Microsoft introduced the site rename feature within the SharePoint admin center, which also updated site URLs too. Once a URL is updated for a given site, or moved to a different geo location, or as part of a site swap – a redirect is automatically created to ensure any links that were pointing to the prior URL continue to work.
How to use an old site URL
To use on old site URL you need to run the following PowerShell command. Note: You will need the SharePoint administrator role to run this command:
Open the SharePoint Online Management Shell and run the following command:
Microsoft documentation says that a redirect template (Template type: REDIRECTSITE#0) is applied when the site URL is updated, which contains special headers and logic to redirect your browser requests to the new site.
In this post we look at a specific use case for needing a Power Automate flow to be available across all of SharePoint, some of the current limitations of Power Automate and how to overcome them using Encodian Trigr.
Most organisations will have a central location where they store policies, procedures and guidance documents. For most, this would form part of their corporate intranet solution on SharePoint/ Teams, but you also might find yourself getting asked by users “how do I get my policies from my team/ collaborative locations into the the corporate policy library?” – not such an easy answer!
Policies generally can be created by individuals and small groups of people, within the Teams/ SharePoint sites that they have access to for collaboration. For these people, having a way to publish relevant documents from their own collaboration sites to a central policy location in a consistent way makes a great deal of sense and you may think Power Automate is the way to achieve it…however this is not the case! Power Automate flows have a 1:1 relationship with the lists or libraries they are triggered from, so there is no easy way to do this with out-the-box capabilities.
Power Automate is also unable to manually trigger a flow when selecting multiple documents, something else that my scenario requires. This is where Encodian Trigr can really bridge the gap. Trigr makes Power Automate flows available across SharePoint, allowing users to access and run flows from within any library or list.
In my example, I needed to have a flow available across all SharePoint/ Team sites, which would allow all users to select one-to-many documents and publish to a central policy upload center for approval – and here is how I used Encodian Trigr to achieve it:
There is a comprehensive guide on how to deploy the Encodian Trigr app available here. I followed these steps to get Trigr setup in my environment.
Under My flows > + New flow > Automated cloud flow
Give your flow a name
Search and select the Encodian ‘When a user runs a Trigr‘ Power Automate trigger action
NOTE: This was my first time using Encodian Trigr, so I was prompted to provide a connection name and an API key. For the connection name I just entered ‘Encodian connection for flow’, and the API key will be in your welcome email, or available via this link: https://account.encodian.com/trigr/apikey.
You will now see the ‘When a user runs a Trigr‘ trigger action. Enter a title & description for your flow
The ‘When a user runs a Trigr’ Power Automate trigger action provides all of the properties relevant to the files which were selected by the user when the Trigr action was started.
For the next step we are going to use the get file content action. Due to a current limitation of Power Automate, dynamic values are not immediately accessible by the SharePoint action. To get around this, we will just enter hard-coded values at first, then replace them with dynamic values once we have finished configuring the flow.
Get file content
Add a get file content action
Hard-code the site address of the site where the files are saved that you wish to publish
Hard-code the file identifier as just the ID number for now
Send an email
Add a send an email action with the the following confirguration:
To: User Email Address dynamic content from the ‘when a user runs a Trigr’ trigger action’
Subject: Anything you wish
Body: Anything you wish
Update get file content
Now we will go back to our get file content action and update the hard-coded values with dynamic content from the ‘when a user runs a Trigr’ trigger action’:
Open the get file content action
Update Site Address to Site Address dynamic content from the ‘when a user runs a Trigr’ trigger action’
Update File Identifier to File Identifiers
NOTE: This will create put all your actions in an apply to each loop, which is what we want if we want to be able to process multiple documents. The File Identifier dynamic content will be replaced with the current item from the apply to each loop.
Add a copy file action after the update get file content action and configure with the following properties:
Current site address: site address dynamic content from the ‘when a user runs a Trigr’ trigger action
File to copy: Current item apply to each dynamic content
Destination site address: select/ hard-code the destination site address (in my case the policy site)
Destination folder: select/ hard-code the destination library/ folder
If another file is already there:replace
Create the Trigr action
So far we have installed trigr in our environment, created the flow which will be used and now we need to create the Trigr action in the Encodian account portal:
Microsoft Search is the unified search experience that is prevalent across Microsoft 365. Microsoft Search gives users contextual search results depending on the app they search from, be it form Word or Excel, through to SharePoint, Teams & OneDrive.
If your familiar with SharePoint search you might think this is a doddle to set up. Know your crawled properties from content sources? Managed metadata from managed properties? Well, this might not help you for modern search as not all contextual app based search results are created equally, specifically Teams and SharePoint…
Within the settings of the M365 admin center there is section called search & intelligence where you can gain access to the following configurable options within Microsoft Search:
Acronyms: Admin or system curated acronyms/ abbreviations used by an organisation or team
Bookmarks: Helps users find important information with just a search. Each bookmark includes a title, URL, keywords and a category.
Floor plans: Floor plans in Microsoft Search help users find people, rooms, and spaces within a building.
Locations: Helps your users find addresses and locate your organization’s buildings by providing an accurate location.
Power BI: Support for Power BI dashboards and reports to make it easier for users to find data & analytics
Q&A: Creating a Q&A is similar to creating bookmarks. Answer user’s questions instead of just providing a link to a webpage.
Result types & verticals: Result types define how search results are shown on the page based on conditions and rules. Search verticals are tabs on the search results page that show results of a specific type or from a select source.
For all of the above options within Microsoft 365, there is a varied amount of consistency as to how each option displays within specific apps, or in some cases do not display at all. For SharePoint all of the above search options do not display in the default search results of a given site. SharePoint communication or team sites search scope is to search just the site by default. Hub sites will search the hub, plus any associated sites to the hub.
None of the above search options display from within Teams, either via the desktop app or via the browser. There also isn’t a link to organisation, or a way to see all files etc. from the search experience within Teams.
Microsoft documentation says that Acronyms, Bookmarks, Floor plans & Location only show answers on Bing, SharePoint, and Office 365. Power BI search results display in the Windows search box, SharePoint, Office 365, and Bing.
Solutions and workarounds
I only really have a solution as such for SharePoint on this one, as for Teams and OneDrive there is very little you can do to change the search result options as far as I know.
For SharePoint, the only way currently to get these options to show is to change the scope of your site. There are three search scope parameters:
0 – default scope, effectively site
1 – tenant
2 – hub
3 – site
To change the scope of your site search, you need PowerShell/ PnP. You’ll also need to be a SharePoint admin to run it, but if you are you can run this cmdlet to change the scope to tenant wide:
Connect-PnPOnline -Url https://contosodemosg.sharepoint.com/sites/Strategy -UseWebLogin
# this will prompt you to sign into your site. Use the site owner credentials to sign in
$web = Get-PnPWeb
$web.SearchScope = 1
# 1 for Tenant, 2 for Hub, 3 for Site, 0 for default behavior
Once your cmdlet has run successfully, you’ll notice the change in the site targeted as when a search is initiated it will default to the “organisation” wide search results by default, showing any of the configurable options you’ve set up within Microsoft Search.
For OneDrive on web, the search experience is subtly different than SharePoint or Teams. When you search there are the following options via a drop-down: My files, All files, or Whole organisation. All files is the default setting, but you can select the scope of your search before hitting enter, or change the scope after your results are returned.
Things to consider
#1 Intranet search results will not be scoped
If you are building an intranet solution or already have one in place, changing the search scope will bring in search results from Teams, SharePoint & OneDrive, so it will not be ring fenced to just “intranet” content.
#2 All sites which require the scope change will need updating
You will need to change the scope for all the sites you wish to search tenant wide. So if you have an intranet solution, all sites will need this change applying.
#3 Ensure you have the correct admin roles
When I was creating Bookmarks/ Answers/ Locations etc. I originally gave my account the Search Administrator role. This displayed more config options within search & intelligence, but when it came to publishing, it threw up the dreaded “something went wrong” error. To be able to publish, I needed to also apply the Search Editor role.
The idea for this post came from reader George’s comment asking to do a demo of how an address book can be created in SharePoint. From my research there is already quite a bit out there on how to do this already, but here are my two ways to create an address book.
Example 1 – dynamic list filtering
This example is a pure out of the box, SharePoint solution for creating an address book feature. For this example we will use dynamic filtering between two lists to show a certain set of values when an option is selected.
To start we will need to create two lists:
An alphabet list that will act as our index, storing all the letters of the alphabet as list items.
A contacts list that will be the list that contains all the address book data.
Create the alphabet list
Start by creating a new custom list > call the list Alphabet.
Create new items in the list for each letter of the alphabet. I used ‘edit in grid mode’ to speed this process up
Change the view to a gallery view
From here, format the list view using either the example JSON list view formatting below, or create your own to style the A-Z list to display each letter as a button
Save your view under a new name, I called mine “alphabet filter view”. The end result will look like the below:
NOTE: There was an original example for this I found online many months ago, but I cant for the life of me find it. If anyone knows where this example came from, leave a message in the comments and I’ll credit it in this post.
Create the contacts list
Next, we need to create the contacts list. If you already have your user data held somewhere else, you can always create your new contacts list from Excel.
Once the contacts list is created, create a new lookup column with the following configuration:
Give your lookup column a name. I called mine “AZLookup”
Require that this column contains information = No
Enforce unique values = No
Get information from: Alphabet
In this column: Title
Now you need to update each item in the contacts list, to ensure each item has an A-Z value in the lookup column. Again, for this I used “edit in grid view” to speed things up.
Switch to the gallery view and format the list using either the example JSON list view formatting below, or create your own to style the contacts list in a way that suits your needs.
Save the view and give it a new name. I called mine “Contact cards”. The result will look like the below:
Create the address book page
Now are lists are created and formatted, it’s time to create a new page, add our web parts and start dynamic filtering!
Create a new page, select any template you like
In a new one column section, add a new list web part > select the Alphabet list
Edit the web part and make the following changes:
Change the view to Alphabet Filter View
Set the size to small – about 5 items
Hide the command bar
Hide the see all button
Either in the same or new one column section, add a new list web part > select the Contacts list
Edit the web part and make the following changes:
Change the view to Contact Cards
Set the size to autosize – fit to number of items
Hide the command bar
Hide the see all button
Turn dynamic filtering on
Column in Contacts to filter = AZLookup
List or library containing the filter value: Alphabet
Column containing the filter values properties: Title
You will now be able to dynamically filter your contacts list using the A-Z buttons on the address book page!
Bonus! Populate the contacts list from M365 user data
When creating this demo I thought to myself “wouldn’t it be great if you could populate the contacts list from data already in Microsoft 365”. I thought it was a good idea so I created a Power Automate flow to get all the user data from M365 and add it to the contacts list.
The flow uses the search for users (V2) action that, if no search terms are added, will bring back all the users within Microsoft 365 within the flow. Once that action has retrieved all the users, the create item action, wrapped within an apply to each creates a new item within the contacts list for each user the search for users action has found, populating the columns in the contacts list with dynamic content from the previous action.
NOTE: There is a pagination setting that will need updating if you have more than the threshold limit of 1000 users.
This flow was really just to prove the concept, so it runs on a manual basis. If you were to want to do something like this I would suggest having a one time “import of all the user profile data into the contacts list, then a separate, flow that runs on a longer schedule that only runs if certain conditions are met (for example: if the email address doesn’t already exist in the contact list).
Example 2 – Custom SharePoint Framework address book web parts
There are several SharePoint framework (SPFx) sample solutions available from GitHub that work as address books, connecting to user data in Microsoft 365 and allowing you to browse and search for users. Not all samples are offered as downloadable solutions packages, sometimes you will need to package & deploy them manually. I’ve got a post here that covers everything you need to do 🙂
People Directory SPFx sample
This sample was made available as part of the PnP starter kit (formerly the SharePoint starter kit), which I installed and have been using in my tenant since 2019 without issue. This web part lets you browse an A-Z, as well as being able to search for users.
This web part can be downloaded from GitHub and installed into your tenant.
This sample allows you to browse an A-Z, as well as being able to search for users and sort the results by job title, first name, last name etc. When a user is found, a profile hover card is displayed is the same as the rest of Microsoft 365.
This web part needs to be packaged into a solution before installing into your tenant.
In this post we describe how to use a hidden taxonomy list to allow us to change the format and store metadata terms, plus their parents in SharePoint Online.
Lists and libraries in SharePoint Online have the ability to show a term or the term plus parents within a managed metadata column by editing said column and changing a neat little option called display format.
However, when you turn on this option your term plus parents displays in the following way: Parent:Term. What if you wanted to change the way the parent plus child terms are displayed into either a different or user friendly format? Let’s do exactly that:
The taxonomy hidden list
There is a secret list within each SharePoint site called the taxonomy hidden list that, as the name suggests is a hidden list that stores cached managed metadata terms used within site. The taxonomy hidden list is unique to the site and each time terms are used within the site, they get stored within the taxonomy hidden list.
This list contains a lot of repeated stuff that might look confusing, but it does specifically contain the full path of a term including it’s parent, which is what we are looking for.
So in my example I want to replace the colon in the parent plus term with a comma and a space, so it looks like this: Parent, Term. In the below example my managed metadata column is called Department. Here’s how I did it step-by-step:
In your target list/ library, create a new single line of text column to store you formatted parent plus term (DeptCopy in my example).
Create a new flow in Power Automate based on the when a new item is created SharePoint trigger, making sure your site address and list name are added and configure the actions below:
Get item action
Set the site address as the target SharePoint site and the list name as TaxonomyHiddenList. Note: you will need to enter a custom value here and type this in.
Set the Id to equal the managed metadata column (Department) WssId from the when a new item is created trigger.
Create a new variable to store the full path of the term from the get items action. Give the variable a name set the value to equal Path from the get items action.
Use the compose data operation to create an expression to replace the colon with a comma and space. You don’t have to do this step, I just use it for troubleshooting to easily see what the outputs are of my input value.
Update your previously created column to show the newly formatted term plus parent with the output from the compose action. Note: If you don’t use the compose action from the previous step, just write the expression above directly in the column you want to update.
There is quite a bit online about seeing empty values in your managed metadata column. Although I’ve not personally noticed this, the taxonomy hidden list is set to have unique permissions by default and has the following permissions:
Anonymous users: view items
There is a good write up of the taxonomy hidden list here.
Although there are a number of dynamic content options available, none of them seem to contain the parent + term like they do in the hidden taxonomy list. For example the path column that’s available from the ‘create an item’ trigger, outputs ‘null’.
This post details an issue with document libraries in SharePoint Online when there are more than 30 folders within a ‘grouped’ view, causing files not to be visible to users.
I’ve been working through a large-scale migration project for some time now, and have recently moved several document libraries from SharePoint 2010 into SharePoint Online. Although the library in question is large (approx. 200K items), it is well structured employing two levels of folder then using metadata to arrange files within.
The problem I’ve observed does not just apply to large libraries, it applies to all libraries that contain more than 30 folders.
Since migrating the document library I’ve noticed an issue with using group by views. A grouped by view is purely just a view that is grouped by a particular column, by clicking on the column name and pressing “group by”.
The library has a default view that has group by enabled to group items by a custom “document type” column. With grouped by views, a limit is automatically applied to the number of folders shown (30) and a “show all” link appears at the bottom of the view. When you click on this, it shows all the subfolders, but also automatically applies a filter to the view to the effect of “document type = empty”. This causes all the files within the subfolders to not display.
This issue only occurs for custom columns, any in-built columns (name, created by etc.) will let you group by and not apply the empty filter.
Response from Microsoft
I raised this issue with Microsoft via support and the response I received was:
“Although it is not desirable behaviour, it is expected”.
Microsoft support response to my issue
It was explained to me that the way these large libraries are structured, which, in my opinion has been considered to be best practice for well over a decade is no longer support in SharePoint Online. In essence this advice was don’t use grouped by views for document libraries with more than 30 folders.
We then proceeded to talk through how to re-build the affected document libraries using a different structural approach to overcome this issue which I will talk through below.
Temporary solutions/ workarounds
#1 Rebuild all affected document libraries
In my example, the document library is for storing employee files, so the first solution to this would be to completely re-build the document library, starting with splitting the library up into smaller, individual libraries (A-Z). Then, instead of interacting directly with the libraries, instead use a combination of pages, the highlighted content and document library web parts, with KQL queries to present the relevant files in a sort of address book style.
For example: there would be an address book page with highlighted content web parts displayed for each A – Z folder. Each highlighted content web part would have a KQL query to only shows the site pages for each employee with the relevant A-Z letter in the title. If this is something you’d like me to do a separate demo on, let me know in the comments section.
Alongside splitting up the large library into smaller libraries, for this solution you would also have to create a page per employee and add a document library to the employee page, pointing to the relevant library/ folder
#2 Use multiple views to navigate folders/ files
For this workaround I created two views: All Documents and All Folders. The All Folders view does not have grouped by enabled and allows you to navigate through all the folders without running into the empty filter. Once a users arrives at the relevant folder, they switch to the All Documents view which has the grouped by view enabled, allowing the user to view the files within the folder grouped by the custom column.
#3 Manually remove the filter
This workaround is by far the simplest option, but puts the most burden on the end user. With this issue, it is possible to just remove the filter after it gets applied by pressing “show all”. Users are able to just untick the filter and continue to use the document library. This is what my users are currently doing.
#4 Classic view
My least favourite option of them all, but worth including as it does get around the issue. Classic view does not apply the “show all” link or restrict the number of folders displayed within a document library view. Switching to classic view will allow users to interact with the library without issue, but would potentially have other issues if any modern features are being used elsewhere within the library.
In this post we will take a look at two different ways to remove search results in classic and modern SharePoint.
There may be occasions in SharePoint where you are required to remove an item, or items from the search results. When we are talking about search results, we are referring to the items that are returned when a user initiates a search in SharePoint.
Click on one of the buttons below to find out more about how you can remove search results in both classic and modern SharePoint: