Once in a while, you’ll want to use the survey web part for one reason or another. There are awesome tools like Yammer polls, Microsoft Forms, etc. but sometimes the only tool suitable for a specific use case is still the out-of-the-box SharePoint survey app.
If you search for it when adding a new app and get “We didn’t find a match here, but check out…” don’t fret. It’s tied to a site feature that apparently isn’t activate on your site. This applies to both on-prem and online/O365 environments.
To get the survey app as an option on your site, you’ll need to be a site owner who can activate the Team Collaboration Lists site feature (settings wheel > Site settings > Manage site features).
Once you activate it, your site will now be able to add these apps:
…and much more
Here’s a quick GIF demonstrating activation of the required feature:
I’m late to the game trying out PerformancePoint Services, a has-been dashboard and KPI service for SharePoint server that still exists in production for many on-prem farms running 2013/2016/2019. I’d venture to guess most would prefer the more modern and flexible Power BI (either Report Server or the online service via O365) to PerformancePoint Services but, alas, change takes time.
So, anyway, when I tried to open Dashboard Designer on a PerformancePoint list for the first time, I received the following error.
Cannot Start Application
Cannot download the application. The application is missing required files. Contact application vendor for assistance.
I had tried to open Dashboard Designer using Chrome and CrEdge (Chromium Edge) without luck. The downloaded designer.application file just gave me the issue seen above.
In the end I found, as with most dated tools and functions in the SharePoint world, some things only work in Internet Explorer (IE). This particular button, however, worked in both IE and Edge!
So copy your list’s URL, move over to Edge or IE, and try to launch it again from there. This worked well for me. Good luck!
Reflection, to me, is an important part of my growth. It can be difficult to move forward without acknowledging and appreciating how far we’ve come. In this post, I’ll share a bit of what 2019 brought to my career journey, preparing me for 2020.
That certification, plus MS-100 + MS-101 = M365 Enterprise Admin Expert
TWO national conferences (North American Collaboration Summit and SharePoint Fest Seattle)
FOUR SharePoint Saturdays (St. Louis, Omaha, Pittsburgh, and Kansas City)
TWO user groups other than my own
Gave my first keynote for any event, at SPS Omaha
Attended my first MVP Summit
Appeared on two podcasts
Left LMH Health, and the healthcare industry, to take on new challenges in the corporate realm at DH Pace
Goals for 2020
Honestly, I don’t know what’s next and I don’t have a clear vision of where I want to be. But here are a few things I am interested in pursuing along the way to wherever I’m headed:
Gaining another certification
Learning more SQL, Azure, and AI
More blogging and speaking on the Power Platform
Writing fiction (what??)
I am grateful to University of Kansas Libraries and LMH Health for helping me gain valuable experience and knowledge over the last several years. Within your walls I made amazing connections and friends who inspire me regularly. And without your support, I wouldn’t have achieved much of what’s shared in this post.
Thank you to my colleagues at DH Pace for making me feel welcome and valued as a new member of the team. I’m excited to see what we achieve this year.
Thank you to all of the SharePoint Saturday, national conference, and user group organizing committees who welcomed me to their respective stages this year. Meeting your enthusiastic attendees is always a highlight of my year.
Thank you to Tara Saylor, Suzanne Hunt, Nikkia Carter, Jonathan Weaver, April Dunnam, Stacy Deere-Strole, Sharon Weaver, Matthew J. Bailey, Melissa Hubbard, Shadeed Eleazer, Akdas Asif, and Mohamed Ubaid for sharing your time and expertise with the Lawrence SharePoint User Group.
Thank you to my Twitter and LinkedIn connections. I enjoy learning from you and getting to know you.
And, as always, thank you to the attendees, the readers, and listeners – you’re a continuous source of inspiration and joy. I wish each of you growth, happiness, and love this year and I hope you’ll say hello if our paths cross in 2020.
In keeping with a tradition I started last year, I’m sharing the top 10 posts of 2019. Blogging is one of my favorite ways to share with the community (and, admittedly, document things I might forget otherwise). It’s been a pleasure and privilege to have this platform – thank you for reading.
The following includes the ‘Top 10’ most popular posts by views published in 2019:
Microsoft Surface Pro 4 “plugged in, not charging”
Alas, I reached a day where I thought I was done with my Surface. It powered on when plugged in
Note: Applies to SharePoint Online/O365 and modern experiences only.
In SharePoint Server/on-prem, we have to manage content types and allow links to documents before we can link to documents outside the current document library. But in SharePoint Online/O365, there’s a Link option on the New menu that does all the work for us, and without even needing to adjust the library’s content type settings.
Modern experience in SharePoint Online/O365
In a modern-view document library, simply use New > Link.
Then paste a URL to the file, or select it from recent files which, yes, will include files modified even outside the current library.
This will add a link/shortcut within your document library to the document stored/managed elsewhere.
Today I ran across an issue where someone had created links within a classic document library that redirected users to documents stored in a different library. This is easy to do, but for some reason those links were now leading users to blank .aspx pages instead of the intended document.
Note that users weren’t taken to an “invalid” or “can’t be found” error page, but a completely blank page with a URL ending in .aspx. If you’re being redirected to anything other than a blank page the following solution probably won’t apply to you.
I figured out that, somehow, the library in question no longer had the “Link to a document” content type included. You normally can’t delete a content type that is in use, but with the right permissions and perhaps a migration tool or script, anything is possible. Without the content type on the library, the links that once worked under that content type now could not.
Important: The links are not necessarily broken – do not delete them. Once the content type is added again, they should work unless the original URLs have actually changed.
To re-add the link/shortcut content type to the library, follow these directions (same as if you were adding it for the first time):
1. Go to Library > Library Settings
2. Choose Advanced settings
3. Set Allow management of content types to Yes.
4. Click OK to save changes.
5. Under Content Types choose Add from existing site content types
Let’s create a Flow in Power Automate that accomplishes the following:
Sends an email every Monday morning
Includes a table of upcoming training opportunities from a SharePoint calendar
Table has a column with “Add to calendar” download links
1. Create a new flow of type Scheduled – from blank
2. Name the flow and set the schedule to whatever frequency and times are appropriate for your needs.
3. Choose your site and list name. In my case, my calendar isn’t listed so I’ll type its name, Events, after select Enter custom value.
4. To filter to just the events coming up in the next week, we’re going to expand “Show advanced options” and enter filter criteria.
5. If you, like me, are going to filter based on “Start Time” you’ll need to know its internal name which is EventDate. For our filter, we can only use internal field names. To get started, copy and paste the following filter query into your Filter query box:
EventDate gt '' and EventDate lt ''
6. Now click between each set of apostrophe ( ‘) marks and change the dynamic content panel to Expression as seen below.
First expression: utcNow()
Second expression: addDays(utcNow(),8)
7. Now add a Create HTML table step. Use the dynamic content panel to set “From” to value from the Get items step (1). Then Show advanced options (2) and set Columns to Custom (3).
8. Under Header, type each column header you want in your table in the order you want it to appear horizontally. For Event I’ve mapped its Value to the “Title” field on my SharePoint calendar by selecting Title from dynamic content. You may also wish to add columns like Location and Category. Get your headers in the order you like, but leave Date and Save/Add to Calendar blank for now.
9. Once you’ve gotten all but Date and Save mapped to a SharePoint calendar field, it’s time to use Expression (on the dynamic content panel) to set up the remaining two. You can copy and paste Date’s formula as long as you’re using Start Time (EventDate) for the date. Save, however, you’ll need to update with your own site collection’s URL (where the calendar lives) and replace the GUID with your own calendar’s GUID. Follow steps 1-2 in this post to get your calendar’s GUID.
Save: concat(‘<a href=”https://YourSiteURL/_vti_bin/owssvr.dll?CS=109&Cmd=Display&List=%7B1EA8795A%2D3B0D%2D43D7%2DA48E%2DB3CCD4BFE950%7D&CacheControl=1&ID=’,item()?[‘ID’],’&Using=event.ics”>Add to my calendar</a>’)
10. Now add a Compose step. This will make sure our links are clickable in the email (helps decode the HTML so that it parses and renders correctly). We’ll populate this, again, by using an Expression.
11. Lastly, add a Send an email step. I preferred using the html markup option and added an image to my header. You can use either the default rich text or html editor. To insert your table, make sure you insert Outputs (from dynamic content > Compose step).
That’s it! In 11 steps, you’ve scheduled a weekly digest that will email recipients a table of clickable “Add to calendar” links for upcoming opportunities.
To test your flow, rather than wait for the start of your schedule, use “Test.”
To elevate this concept to the next level, you can adjust your HTML filter to only get a certain category and send multiple emails to subscribers of different categories (say, only PowerApps subscribers getting PowerApps courses). You could also create multiple HTML tables and show “SharePoint courses” in one table, “OneNote courses” in the next and so on.
When working with calendars, a big request I hear is to make it more like Outlook or to make it easy to add an event to your calendar, at least. In SharePoint online, this is easy! The Events web part on modern pages includes an Add to my calendar button on events by default.
However, when working with classic pages or SharePoint Server/on-prem, it’s not so easy. There are two ways we might utilize Power Automate or SharePoint Designer to help us out:
We could create a hyperlink column if we want something on-page/in-item, then populate it using a workflow.
Usage idea: A landing page for upcoming training opportunities displayed in list (not calendar) format with a column designated for “Add to my calendar” links
If it doesn’t need to be clickable on the item or page within SharePoint, we could just build the URL within the workflow and include it in an email message.
Usage idea: A Flow that runs weekly to “Get items” coming up that week and sends a list out with clickable links for adding items of interest to recipients’ calendars
No matter the tool, Power Automate or SharePoint Designer, the most important part to know is how to build the URL. That won’t change from one tool to the other.
1. Go the the list settings for the calendar hosting the events
2. Copy the list GUID from the URL in the browser. This includes everything in the address bar after “List=”. This should begin with %7B and end with %7D. This is your calendar’s GUID in hyperlink-friendly formatting.
3. Update the following URL template with your site’s path, and paste in the list/calendar GUID you copied from step 2 where GUID is. Leave the [ID] as it is for now.
https://Site or Subsite path/_vti_bin/owssvr.dll?CS=109&Cmd=Display&List=GUID&CacheControl=1&ID=[ID]&Using=event.ics
If not updating a field or creating a variable that pieces the URL together, you can create expressions (via Dynamic content panel) to concatenate the different parts of the URL. For example, if I’m creating an HTML table, for Value I’d use the dynamic content panel > Expression and enter a formula like:
concat('<a href="https://natechamberlain.sharepoint.com/_vti_bin/owssvr.dll?CS=109&Cmd=Display&List=%7B1EA8795A%2D3B0D%2D43D7%2DA48E%2DB3CCD4BFE950%7D&CacheControl=1&ID=',item()?['ID'],'&Using=event.ics">Add to my calendar</a>')
In this specific example, I’m creating the table after a “Get items” step. The formula above is what I’m using for the value of the “Save” (Add to Calendar) column.
Create iCal (.ics) links using SharePoint Designer
In SharePoint Designer, we can set a hyperlink field to our iCal link to make it easy to add an event to your calendar. This could be placed as a main column in a list view, or just on item display forms like this:
Let’s set the hyperlink field via workflow:
1. Create a variable (set workflow variable) and use the string builder
2. Paste your almost-finished URL from earlier in this post. Replace [ID] with a lookup to the current item’s ID
3. If setting a field (skip if just using the link elsewhere) add , Add to Calendar (or whatever link text you want) to the end of the string. It just has to be a comma, a space, and the text.
4. Set the hyperlink field (iCal in my example above) to your new variable.
If you’re not setting a field in your list, maybe you’re emailing new events to people and want an easy link in the email body itself. In that case, just skip step three above and your variable will just be the URL, ready to be used in email actions.
Why can’t we just use calculated columns?
Once upon a time, I blogged about creating Automatic iCal hyperlinks using a calculated column. This almost works. It creates the hyperlinks for all existing items at the time of the calculated column’s creation. But then if you add a new item or modify an existing item, the [ID] field drops out the hyperlink which, of course, breaks the link.
The appeal of calculated columns is that it won’t create another version of an item when the link is generated and it doesn’t require Power Automate or SharePoint Designer to work. Unfortunately, if the link doesn’t work after item edit or creation, then the point is lost anyway. So let’s pretend that method doesn’t exist except for one-time uses or lists that will never change again.
Setting a hyperlink column’s value using Power Automate is a bit different than setting other column types’ values. In SharePoint, a hyperlink column has two components – address and description. If you update this column type using Power Automate’s “Update item” action, your address and description are both set to the same value.
In SharePoint Designer workflows, we could do this easily with the usual “Set field” action:
But in Power Automate, we only get one field which maps to the URL/address part of the hyperlink field, and is duplicated as the description as well in SharePoint.
And if you’re thinking it could work with a comma, as some other field types might, it won’t. You’ll get “Enter a valid uri.”
To get this to work so we can set both address AND description as separate values, we have to use an HTTP request action instead of (or in addition to) the Update item action. This isn’t as complicated as it may sound. Here are the steps:
1. Add the Send an HTTP request to SharePoint action
2. Choose or enter your site for Site Address
3. Set Method to POST
4. Set the Uri to the following, changing List Name to your list’s name, and replacing [ID] with the ID field from dynamic content