Vue normale

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.
À partir d’avant-hierFlux principal

Show/Hide See all link from SharePoint list/library web parts

When you add a List web part or Document Library web part on modern pages to show the (filtered) list items or documents, it shows See all link at the top right corner of web part as shown in below image. By clicking this See all link, users can navigate to the full list/library page.

See all link in list web part on SharePoint online modern page
See all link in list web part on modern page

But sometimes when you are showing the filtered list views or custom created list views on modern pages, you don’t want other users to access the original list/library and switch between views or modify existing list views. Previously there was no SharePoint out of the box way to hide the See all link from web parts. But, recently Microsoft has added a new option to Show/Hide “See all” button in list/library web part property pane settings.

Show/Hide See All link from SharePoint list/library web parts

Follow below steps to show/hide See all button from list web part in SharePoint online:

1. Go to SharePoint modern page where you have added the list/library web part.

2. Open the page in Edit mode by clicking Edit button from top right corner.

3. Click on the Edit web part button against your list/library web part.

4. Toggle Show “See all” button option and change it to Hide “See all” Button as shown in below image.

5. Click Apply button.

6. Click on Publish/Republish button to save the changes to the modern page.

Show/hide See all button in list/library web part property pane in SharePoint online
Show/hide See all button option in web part settings

Here’s how the list/library web part will look after you hide the “See all” link from web part settings:

Hidden See all button from list web part in SharePoint online modern page
See all button hidden from list web part

Audience Targeting for Quick Links Web Part in SharePoint Online

Microsoft is finally introducing an audience targeting feature for the Quick links web part in SharePoint Online, Roadmap. By using audience targeting, you can promote links to specific groups of people. This is useful when you want to present information that is especially relevant to a particular group of people.

With the release of this update, you will be able to target specific links to different audiences, helping you provide more personalized experiences on SharePoint pages.

Key Points:

  1. The feature is disabled on the web part by default, so nothing is required to prepare for its availability.
  2. To use audience targeting, you must first enable audience targeting on the web part from property pane, and then edit each quick link to specify the audience to target.
  3. Currently you can only use AD groups or Microsoft 365 groups to target audiences. If you want to use SharePoint groups for audience targeting, vote on this UserVoice.
  4. You can target maximum 50 audiences (AD groups or Microsoft 365 groups) per link.

How to Use Audience Targeting:

As I mentioned earlier, to use audience targeting, you must first enable audience targeting on the web part from property pane, and then edit each quick link to specify the audience to target.

Enable audience targeting:
  1. Go to your modern SharePoint page and open it in Edit mode by clicking Edit button from top right corner.
  2. Select the Quick links web part and click on Edit web part (Pencil icon) button.
  3. From the property pane, change the toggle for Enable audience targeting to On.
Enable audience targeting for quick links web part in SharePoint Online
Enable audience targeting
Set the target audiences for each link:
  1. From Page Edit mode, click on the link you want to edit, and select the Edit (Pencil icon) on the link.
  2. Under Audiences to target, type or search for the group(s) you want to target.
Set the target audiences on quick link in SharePoint Online
Set the target audiences for each link

Below Audiences to target, you can see the maximum limit of 50 audiences and number of audiences left to target.

On the page, while you’re in edit mode, you can see which links have audiences selected by looking for the audience icon next to the link as shown below:

Quick Links with targeted audience in SharePoint Online
Links with targeted audience

Once you publish the page, audience targeting will take effect.

Output:

The SharePoint page will show filtered links based on targeted audiences. A user who is not a part of the audience targeted for Learning & Development link will see the quick links web part as shown below:

SharePoint Online Quick links web part with targeted audience
Quick links web part with targeted audience

Note: If you’ve selected an audience group that you recently created or changed, it may take some time to see targeting applied for that group.

I hope you liked this blog. Give your valuable feedback & suggestions in the comments section below and share this blog with others.

Add Modern Calendar to a SharePoint Online page using List web part

In my earlier blog, add modern calendar to a SharePoint online page, I explained how you can show modern calendar list view on SharePoint Online modern pages using Embed web part. I used embed web part because modern calendar views were not supported in SharePoint out of the box List web part at that time.

Fortunately, Microsoft is rolling out a new feature which will support modern calendar views in List web part. This feature is associated with Microsoft 365 Roadmap ID 70750. In this blog we will see how to add the modern calendar view to a SharePoint online page using List web part.

1. First of all, create a modern calendar list view by following this blog: Create a modern Calendar view in SharePoint Online/Microsoft Lists.

2. Go to your modern SharePoint page and open it in Edit mode by clicking Edit button from top right corner.

3. Open web part toolbox and search for List.

Search "List" in SharePoint online modern web part toolbox
Search “List” in SharePoint web part toolbox

4. Click on List web part from Search results. It will add the List web part to your modern page.

5. Initially the List web part shows all the lists available on your SharePoint site. Click on the list name where you created a modern calendar view OR you can also select a list from web part configuration property pane which opens when you click on Edit web part button

Select a list in "List" web part on SharePoint online modern page
Select a desired list in “List” web part

6. By default the List web part will load the default view of your SharePoint list. If you have set newly created Calendar view as your default view, skip this step. Else, select your calendar view from Switch view options dropdown as shown below:

Select modern calendar list view from views dropdown in SharePoint online list/ Microsoft Lists
Select modern calendar list view from views dropdown

7. Click on Publish/Republish button to save the changes.

You will see the final output on SharePoint page as shown below:

Modern calendar list view web part added to SharePoint online modern page
Modern calendar list view added to a SharePoint online modern page

Learn more

Introducing Embed web part in SharePoint spaces

Tech giant Microsoft is introducing Embed web part in SharePoint spaces which will allow users to show SharePoint pages or HTML page embed content as an interactable overlay on a SharePoint space. Space viewers will see a thumbnail image in the 3D space that can be viewed as a fully functional HTML overlay when selected by the user. Space viewers that are using a mixed reality headset will only see the thumbnail when selecting the web part unless they return to the browser to interact with the embedded content.

This new feature release will allow users to add content such as:

  • Microsoft Forms
  • The PowerPoint embed viewer
  • SharePoint Pages
  • Power Apps

This message is associated with Microsoft 365 Roadmap ID 70732.

Release Timeline

  • Targeted release (selected users and entire organization): Roll out will begin in early November and expect to be complete by mid-November.
  • Standard release: Roll out will begin in mid-November and expect to be complete by late November.

How this will affect your organization

SharePoint spaces authors will see a new embed web part available in the spaces web part toolbox while designing a SharePoint space.

SharePoint spaces authors will see embed web part as shown in below image:

Introducing Embed web part in SharePoint spaces in SharePoint online
Introducing Embed web part in SharePoint spaces

What you need to do to prepare

You might want to notify your users about this new capability and update your training documentation as appropriate.

Learn more

Hide/Disable Web search external images in SharePoint Online

SharePoint Online offers powerful web parts and features that enhance the visual appeal of your sites, including the ability to search for external images on the web while using web parts like Image, Hero, Image Gallery, Quick links, etc. While this feature can be valuable in various contexts, there are scenarios where organizations prefer to disable or hide the option to search for external images especially when they have created organization assets libraries in the SharePoint tenant.

In this blog post, we’ll explore how to hide/disable the “Web search” feature in SharePoint using SharePoint Online PowerShell, PnP PowerShell and CLI for Microsoft 365.

Using SharePoint Online PowerShell

Use below SharePoint Online PowerShell script to disable or enable external image “Web Search” feature in SharePoint Online tenant:

# SharePoint online admin center URL
$adminCenterUrl = Read-Host -Prompt "Enter your SharePoint admin center site URL (e.g https://contoso-admin.sharepoint.com/)"

# Connect to SharePoint online admin center
Connect-SPOService -Url $adminCenterUrl

# Disable external image "Web Search" feature in SharePoint
Set-SPOTenant -FilePickerExternalImageSearchEnabled $false

# Enable external image "Web Search" feature in SharePoint
# Set-SPOTenant -FilePickerExternalImageSearchEnabled $true

# Disconnect SharePoint online connection
Disconnect-SPOService

Using PnP PowerShell

You can use below PnP PowerShell script to hide/disable external image “Web Search” feature in SharePoint Online:

# SharePoint online admin center URL
$adminCenterUrl = Read-Host -Prompt "Enter your SharePoint admin center site URL (e.g https://contoso-admin.sharepoint.com/)"

# Connect to SharePoint online admin center
Connect-PnPOnline -Url $adminCenterUrl -Interactive

# Disable external image "Web Search" feature in SharePoint
Set-PnPTenant -FilePickerExternalImageSearchEnabled $false

# Enable external image "Web Search" feature in SharePoint
# Set-PnPTenant -FilePickerExternalImageSearchEnabled $true

# Disconnect SharePoint online connection
Disconnect-PnPOnline

Using CLI for Microsoft 365

Use below CLI for Microsoft 365 script to remove/disable external image “Web Search” feature in SharePoint Online tenant:

# Get Credentials to connect
$m365Status = m365 status
if ($m365Status -match "Logged Out") {
m365 login
}

# Disable external image "Web Search" feature in SharePoint
m365 spo tenant settings set --FilePickerExternalImageSearchEnabled false

# Enable external image "Web Search" feature in SharePoint
# m365 spo tenant settings set --FilePickerExternalImageSearchEnabled true

# Disconnect SharePoint online connection
m365 logout

Conclusion

Disabling or hiding the web search for external images in SharePoint Online is a strategic choice for organizations that prioritize content security, brand consistency and compliance. By following the methods outlined in this blog post, you can tailor your SharePoint environment to align with your organization’s policies and enhance the overall governance of your digital assets.

Learn more

SharePoint Online: My feed web part

Microsoft recently launched My feed web part to all SharePoint Online tenants. In this blog we will explore my feed web part and how you can make your SharePoint site or page more dynamic and relevant to individual users by adding the My feed web part.

What you can do with My feed web part?

Using My feed web part, you can make your SharePoint site or page more dynamic and relevant to individual users. The My feed web part shows mixed content and activity from across Microsoft 365, based on what’s likely to be most relevant to the logged in user at any given time.

The content shown in feed is personal to each user. Different users will see different content at the same time.

What you will see in your feed?

Your feed can show your own documents as well as different content from others. You can only see the documents or other content that you have access to or directly shared with you. The content can be:

  • The documents stored in SharePoint site or OneDrive
  • The documents or links someone sent you as an attachment in email, or through a Microsoft Teams chat
  • Microsoft Teams meeting invitations and recordings
  • Recommended news posts
  • Other content from across Microsoft 365

How to add My feed web part?

Microsoft has made my feed web part available directly under web part toolbox. So, there is no action required from admin center or you don’t have you activate any feature or configure any site settings.

Follow below steps to add my feed web part to your SharePoint online site:

  1. Go to SharePoint online page where you want to add this web part.
  2. Edit the page by selecting Edit at the top right of the page.
  3. Open web part toolbox by hovering your mouse above or below an existing web part and selecting plus icon.
  4. In the web part search box, enter My feed to quickly find and select the My feed web part.
Adding My feed web part in SharePoint online page
Adding my feed web part to SharePoint online page

Properties of My feed web part

You can see the properties available for this web part by selecting the Edit button on the left of the web part. Currently there are only two options you can set:

  1. Maximum number of items to show in feed (1 to 15).
  2. Whether you want to include SharePoint news.

You can choose to turn off SharePoint news in the My feed web part if your page already contains SharePoint news.

Properties of My feed web part in SharePoint Online
Properties of My feed web part

Here’s how my feed web part will look like on SharePoint online page:

My feed web part in SharePoint online page
My feed web part in SharePoint online page

How Microsoft know what’s relevant to users?

This web part shows the feed based on the signals that you and your colleagues send when you work in Microsoft 365. For example, when you and a colleague attend the same meetings or update the same document, it’s a signal that you’re likely to be working together.

Other signals are who you follow, who you communicate with through email or in Teams, who your manager is, and who has the same manager as you.

I hope you liked this blog. Give your valuable feedback & suggestions in the comments section below and share this blog with others.

Learn more

Find All the Stream (Classic) Web Parts During Migration to Stream in SharePoint

Another day, another opportunity to spackle the walls of SharePoint where there’s a hole. Wouldn’t it be great if you could go somewhere in the SharePoint Admin Center to see all the places you’ve used a particular Web Part in pages? Well, you can’t, so PowerShell. PnP.PowerShell, in fact.

You may be considering migrating your videos from Stream Classic to Stream in SharePoint. After all, it’s got to happen sooner or later, and the migration tool is now available for everyone. At Sympraxis, we’ve started to help our clients with these migrations, usually in the context of other work.

One thing you’re likely to want to know is where you have used the Stream (Classic) Web Part in your pages. Depending on how you do the migration, it is likely going to be a good idea to visit many of those pages to either switch to the Document Library Web Part or at least validate the Stream (Classic) Web Parts are working.

Just as I did when I upgraded from the PnP Modern Search Web Parts v3 to v4 (See: Upgrading the PnP Modern Search Web Parts from v3 to v4: Where are they?), I turned to PowerShell. I grabbed that same script and buffed it up a bit to find the Stream (Classic) Web Parts this time.

I took a bit of a different approach with this iteration, though. Rather than using search to find the pages with the Web Parts (I found it was missing some), I switched to using Get-PnPPageComponent | PnP PowerShell. This allows me to get the Web Parts (aka Page Components) in a page directly.

The script below is what I used. I’ve included some comments to indicate where you might choose to do things a bit differently, depending on your environment and your goals. I’m just outputting the info to the console, as the tenant where I’m working isn’t that dense. You may choose to output to a CSV file or something else.

Want to know more about migrating to Stream in SharePoint? Watch the recording of our AskSympraxis from November 30, 2022: Migrating from Stream Classic.

# findStreamClassicWebParts.ps1 - Inventory Stream Classic Web Parts to ensure they still work after migration

# Connect to your tenant here. This should be the only change you need to make to use this script.
$tenant = "sympmarc"
$adminConnection = Connect-PnPOnline -Url "https://$($tenant)-admin.sharepoint.com" -Interactive  -ReturnConnection

# Get all the sites to check
# Checking all the Communication Sites and Team Sites
# $sites = Get-PnPTenantSite | Where-Object { $_.Template -eq "SITEPAGEPUBLISHING#0" -or $_.Template -eq "GROUP#0" }

# Checking sites associated with the Intranet (Home Site)
$sites = Get-PnPHubSiteChild -Connection $adminConnection -Identity "https://$($tenant).sharepoint.com" | Sort-Object

# You may choose to exclude some subsets of sites
$filteredSites = $sites | Where-Object { $_ -eq "https://$($tenant).sharepoint.com/sites/Exec-BoardRelations" }

foreach ($site in $filteredSites) {
    Write-Host -BackgroundColor White -ForegroundColor Black "Looking in $($site)"

    # Get the pages
    $siteConnection = Connect-PnPOnline -Url $site -Interactive -ReturnConnection
    $pages = Get-PnPListItem -Connection $siteConnection -List "Site Pages" | Where-Object { $_.FieldValues.File_x0020_Type -eq "aspx" }

    foreach($page in $pages) {
        #Write-Host -BackgroundColor White -ForegroundColor Black "Checking $($page.FieldValues.FileLeafRef)"
        $streamPage = Get-PnPPageComponent -Connection $siteConnection -Page $page.FieldValues.FileLeafRef | Where-Object { $_.Title -eq "Stream" } | Select-Object Title, WebPartId
        if($streamPage) {
            Write-Host -BackgroundColor Green -ForegroundColor Black ">>> Found Stream Classic Web Parts in this page: $($page.FieldValues.Title) - $($page.FieldValues.FileDirRef)"
        }

    }

}

Updating User Profile Properties with the `Date no year` Format

When you set a User Profile property with PowerShell, and it has a format of Date no year, how should you pass in the values? In other words, do you pass in the year, and it just gets lopped off or do you just pass in the day, like “November 10”?

In many cases you won’t actually care that much. But you should want to know how the values are stored so it doesn’t bite you later.

Out of the box, SPS-Birthday is the only User Profile property which uses the Date no year format. But you may decide to add others.

When you run a line of PowerShell like this, the value stored in the SPS-Birthday field is “11/15/2001 12:00:00 AM”

Set-PnPUserProfileProperty `
  -Account "me@sympmarc.com" `
  -PropertyName "SPS-Birthday" `
  -Value "11/15/2001"

When you run this next line (today), the value stored is “11/15/2022 12:00:00 AM”

Set-PnPUserProfileProperty `
  -Account "me@sympmarc.com" `
  -PropertyName "SPS-Birthday" `
  -Value "November 15"

Note that the year stored is different in each case: 2001 vs. 2022.

We can prove that by checking the values afterward with this line:

Export-PnPUserProfile -LoginName "me@sympmarc.com"

In the user interface (UI), in both the cases above, the result is:

What this proves in the Date no year format stores the value as a full date/time, but it is displayed without the year.

The reason this mattered to me was I was trying to use the PnP Modern Search Web Parts to display people with birthdays today. To do that, I needed to filter on a Managed Property mapped to the People:SPS-Birthday Crawled Property.

Once the RefinableDate02 Managed Property was set up, I could add a query like this:

RefinableDate02:"2022-{CurrentMonth}-{CurrentDate}T00:00:00Z"

Note that the year needs to be a constant in order for the filter to work. We might have two people with birthdays on November 15, but in the years 1954 and 2001. If we store the actual year with in the SPS-Birthday property, then our filter can’t work: there’s no wildcard-type mechanism in KQL we can use to say “ignore the year”. In the old DOS days, we could do something like: ????-{CurrentMonth}-{CurrentDate}T00:00:00Z to say “any four characters”, but KQL doesn’t support that.

So, the key here is to choose a year and set all the birthdays to have that constant year. In this case, we chose 2000. This also ensures data privacy, as someone with a little PowerShell knowledge could retrieve people’s “real” birthdays.

If we didn’t choose a constant year, but instead passed in “November 15” and expected that the year wasn’t stored, our filter would break when 2023 rolls around.

The filter ended up looking like this:

RefinableDate02:"2000-{CurrentMonth}-{CurrentDate}T00:00:00Z"

Now we’ve got a working solution which is robust enough to last over the years. A little detective work was well worth the effort.

Resources

Additional RefinableString* Managed Property Variants in the Search Schema in SharePoint Online

It would seem like the simplest thing in the world: show results in the PnP Modern Search Results Web Part in alphabetical order. My wanting to do this led to multiple conversations with my search guru Mikael Svenson (@mikaelsvenson) and the uncovering of some really useful variants on RefinableString in the SharePoint Online Managed Properties.

The new(ish? – it’s not clear how long they have been there) pre-created Managed Properties which are variants of RefinableString are now documented in Manage the search schema in SharePoint – SharePoint in Microsoft 365 | Microsoft Learn. Until I offered some updates recently, these variants weren’t in the article. I’m not sure I’d ever found this article before, but it seems to be the canonical list of Refinable Managed Properties, along with a lot of useful information about the Search Schema.

The new (to me, anyway) ones are in the last four rows of the following table in that article:

Managed property typeCountMultiQuerySearchRetrieveRefineSortManaged property name rangeNotes
Date10QueryDate00 to Date09
Date20MultiQueryRetrieveRefineSortRefinableDate00 to RefinableDate19
Date2QueryRetrieveRefineSortRefinableDateInvariant00 to RefinableDateInvariant01*
Date5QueryRetrieveRefineSortRefinableDateSingle00 to RefinableDateSingle04
Decimal10QueryDecimal00 to Decimal09
Decimal10MultiQueryRetrieveRefineSortRefinableDecimal00 to RefinableDecimal09
Double10QueryDouble00 to Double09
Double10MultiQueryRetrieveRefineSortRefinableDouble00 to RefinableDouble09
Integer50QueryInt00 to Int49
Integer50MultiQueryRetrieveRefineSortRefinableInt00 to RefinableInt49
String200MultiQueryRetrieveRefineSortRefinableString00 to RefinableString199
String40MultiQueryRetrieveRefineSortRefinableStringFirst00 to RefinableStringFirst39*
String10MultiQueryRetrieveRefineSortRefinableStringLn00 to RefinableStringLn09**
String50QueryRetrieveRefineSortRefinableStringWbOff00 to RefinableStringWbOff49***
String50MultiQueryRetrieveRefineSortRefinableStringWbOffFirst00 to RefinableStringWbOffFirst49*, ***

* Mappings to crawled properties – Include content from the first crawled property that is not empty, based on the specified order.
** Language neutral word breaker
*** Complete Matching

As you can see, each of the additional RefinableString* Managed Properties has something a little different about it, as indicated in the Notes.

Need to know more? Feel free to ask your questions in the comments.

Resources

Crawled Properties Not Created From Site Columns in Modern Team Sites

You know that feeling where you’ve done something so many times and it’s worked and then one day it just doesn’t? Yeah, I just had one of those.

I’m still a big fan of the PnP Modern Search Web Parts, just like I was last week or last year. To really make them sing in your solutions, you’ll end up creating Site Columns and using Content Types. I love those things, too, but this post isn’t about why.

Over the last few weeks, when I have created Site Columns, made sure they are included in Content Types, and added content using those Content Types, the Site Columns have not shown up as Crawled Properties in the SharePoint Admin Center (More features / Search [Open] / Manage Search Schema). They simply never show up. I’ve given it overnight, then a week, then two weeks.

The sequence here is important, so to reiterate:

  • Create your Site Columns
  • Add the Site Columns to Content Types
  • Add content using those Content Types – This is the one that bites many people, including me. No content, nothing to crawl!
  • The Site Columns show up as Crawled Properties

I swear this has been a reliable way to go from Site Columns to Managed Properties (after mapping to Refinable[Type]NN Managed Properties) for years. The ultimate goal in my case is to use those Managed Properties in search-driven solutions using the PnP Modern Search Web Parts. But of course, Managed Properties have other benefits as well.

I’ve been doing this for years, and I sorta feel like I know what I’m doing. I’m not proud, so I headed over to my MVP channels, and tagged people like Agnes Molnar (@molnaragnes) and Mikael Svenson (@mikaelsvenson) in a post asking whether something had changed.

Agnes pointed out an old post from Joanne Klein (@JoanneCKlein) entitled Crawled & Managed Properties in Modern Team Sites. Turns out there’s a kooky hole in things. I have no idea why this hasn’t gotten in my way before.

If you are creating your IA (my shorthand from Site Columns and Content Types, among other things) in a modern Team Site, it’s not good enough to be an Owner. As Joanne wrote, you also need to add yourself as a Site Collection Administrator directly. (Site Permissions / Advanced permissions settings / Site Collection Administrators)

Event though you’re in the Owners group, and the Owners group is in the Site Collection Administrators, you still need to add yourself directly.

Do that, kick off a re-index of the site in question, and within moments practically, your Crawled Properties will be ready to use. None of us are quite sure why this is, but it worked in two tenants for me today, one right after the other.


In case you’re wondering, once you have the Crawled Properties in place (below, ows_SiteName, ows_ExaminerName, and ows_Jurisdiction are Crawled Properties), you can map them to Managed Properties (RefinableString00, RefinableString01, and RefinableString02 below). Those Managed Properties can then be used as filters (nee refiners) in the PnP Modern Search Web Parts or elsewhere.


Mikael also pointed me to his post Tech and me: Mapping or clearing crawled property to managed property mappings using PowerShell (or code). This looks like it might help with this problem, but more likely is most useful when the Crawled Properties are not showing due to a different bug.

Thank you Joanne, Agnes, and Mikael!

Dear Microsoft: Determining Solution Usage in Your Tenant Shouldn’t Be Like This

You love the SharePoint Framework, so you build stuff with it. It’s the accepted development model, and it’s been around for years now. There’s no risk of falling behind or getting out of sync with the rest of the Microsoft 365 development world. You’re playing by the rules!

SPFx logo courtesy John Fitzpatrick @maddfitz

Scenario One

You’ve created some fantastic Web Parts and made them available across your tenant. Time passes, and there’s a regime change in your organization. Someone new in power wants an inventory of where those Web Parts are in use to understand how valuable they really are – some measure of ROI for the original investment.

Scenario Two

You use some community maintained Web Parts and they provide fantastic capabilities. Because of some business changes, you decide to build your own versions of the Web Parts, which will function quite differently. So you need to know how many places you’ll need to reconfigure when you have the new Web Parts ready.

Scenario Three

Because of attrition and some truly colossal budgeting mistakes, the team who originally built your Intranet is long gone. you know they did some less than ordinary things, but you’re not sure what. Web Parts are starting to break and you need to do some triage. (Or it’s possible the consultants who built things and didn’t communicate well left you with a mess – but that rarely happens. 😉 )


The examples above are basically unsolvable. Deploying Web Parts tenant-wide seems like a fantastic idea, but there is no tooling you can use to identify completely where those solutions and their Web Parts are in use. Even if you were cautious and you only deployed the solutions with the Web Parts to sites where they were requested or it seemed like they would be useful, you can’t figure out where they are actually used – or whether they are in use at all.

Why is this? Because there is no pages API. We can write PowerShell to loop through all the sites in the tenant to see where a solution is deployed. That looks something like this (code based on a @ToddKlindt example):

# Get all the sites
$sites = Get-PnPTenantSite

# Loop through the sites
foreach ($site in $sites) {

    $app = Get-PnPApp | Where-Object -Property title -Like -Value $appToFind 
    if ($app) {
        Write-Host "$($site.Url) has $($appToFind)"
        # Loop through the pages - Oh, No!
    }
    
}

Great, we know where the solution is deployed. All we need to do is loop through the pages to see where the Web Parts are in use. Damn, no. No pages API. We could try to load the pages into memory and try to do some sort of jQuery selector like stuff to see if the Web Parts are there, but the page assembly pipeline and progressive loading means you may not even have a real view of the page.

Wait! App Insights! We can just run through that data and see where the Web Parts are used. Oh, dang. We weren’t told to use App Insights or it was deemed to complex or expensive to bother with. No joy there.

What we really need is a solutions dashboard that shows us where solutions are used, how many times Web Parts are installed, how often they load, where there are performance issues, etc. But the only way that dashboard could realistically be built is – you guessed it! – if there were a pages API.


My search hero, Mikael Svenson (@mikaelsvenson) suggested a way to find the Web Parts with search in his post Locate pages where a particular web part is being using on modern SharePoint sites which is based on a post by Beau Cameron (@beau__cameron) called Experiment – Find out where SPFx Web Parts are being used in Modern SharePoint sites. So you can get at this info via search, but it’s a bit of a kludge.

I’m going to try to devise something with this approach, but my disgruntlement stands. See my follow up post: Upgrading the PnP Modern Search Web Parts from v3 to v4: Where are they?


When Microsoft builds new functionality like modern pages and doesn’t provide an API, they are blocking all sorts of scenarios. Those blocked scenarios are important to them as well as us. Remember that modern pages have been around for years now. It’s inexcusable that there isn’t an API for them. I’ve been involved in many discussions that have ended with…but there isn’t a pages API, so we can’t do that. Some of those discussions have been with people who work at Microsoft.

Modern solution management is going to become ever more important as organizations continue to use the excellent capabilities arriving regularly to the Microsoft 365 platform. But for every shiny new capability that rolls out, there are a dozen unfulfilled needs or broken promises. Understanding solution usage in our tenants shouldn’t require a PhD in PowerShell, a live chicken, divinity lessons, and 12 garter (not Gartner) snakes.

Fantastic 40 is back in SPFx form

Well, actually not, but I hope that the title of this post will make you want to check it out.
I would like to share a great project called "SPFx Fantastic 40 Web Parts". Except the name, this project has almost nothing to do with the old "Fantastic 40 Application Templates for SharePoint (WSS & MOSS)" because it is a collection of 40 SPFx Client Side Web Parts. It is open source project so you can use it as you find for useful. It was created by Olivier Carpentier, but the code is provided "as is" without support from Microsoft.
I am so excited because the web parts look great and they might be a solution to common needs that the out of the box modern webparts don't fulfill.
It is also a great learning resource and demonstration of what can be done with SPFx.
If it is not an issue for you to consume the web parts assets from CDNs you do not control you can download and deploy the *.sppkg as it is and it will work. I also tried most of the web parts on SharePoint Server 2016 with classic pages and they work and look great.
The web parts are grouped in seven categories and below you can find some samples.

Menu & Carousels & News Management: News Slider

The News Slider Web Part renders a simple news slider carousel to your page. You can manage your active news, manage the layout and easily render a cool slider to enhance your pages.


Social Tools: Tweets Feed

The Tweets Feed Web Part is a SharePoint client side web part built with the SharePoint Framework (SPFx). This web part generates a Twitter Feed on the page, based on the specified account. This Web Part uses the Twitter API to integrate the timeline.



Maps, Charts & Graphs: Bar Chart

The Bar Chart Web Part is a SharePoint client side web part built with the SharePoint Framework (SPFx). This web part insert a Bar Chart in your pages, and you can manage the bar chart settings as items, color, title, legends, etc. This web part uses chart.js lib.


Images Galleries & Tools: Grid Gallery

The grid gallery Web Part renders a pictures slideshow with grid of thumbnails. This web part implements unitegallery.js (a popular jquery script) as a client side web part for SharePoint.


Video & Audio: Media Player

The Media Player Web Part is a SharePoint client side web part built with the SharePoint Framework (SPFx). With it, you can insert a video in your pages that is a HTML 5 compatible video or audio files, a YouTube video or a Vimeo video. This web part uses Plyr.js lib.


Text Tools: Tabs

The Tabs Web Part is a SharePoint client side web part built with the SharePoint Framework (SPFx). This web part helps to create a tab (you manage, add, delete, edit or move a tab dynamically) and the web part editor can easily modify the tabs content thanks a HTML editor (WYSIWYG). This tab control is responsive, so the layout will adapt the render with the screen size.



Tools: Stock Info

The Stock Info Web Part is a SharePoint client side web part built with the SharePoint Framework (SPFx). This web part generates a stock graph picture for a specified stock. This web part uses the Yahoo Financial service.


❌
❌