Category Archives: SharePoint

Excel Services has been Deprecated

SharePoint 2013 (and previous versions) shipped with Excel Services, allowing Excel workbooks to be viewed in the browser. SharePoint 2013 integrated with Office Web Apps (OWA), which also had the capability to show Excel workbooks in the browser. The complication in 2013 was that the two services had somewhat different functionality, resulting in some organizations having to use Excel Services to gain access to specific BI functionality. In SharePoint 2016, Excel on Office Online Server (OOS), formerly known as Office Web Apps (OWA), has been enhanced and now has the capability to work with Excel workbooks that utilize BI capabilities, such as data models.

Microsoft is now recommending that organizations move away from Excel Services and to use OOS instead. This has a couple impacts on clients:

  1. Smaller implementations, such as organizations using SharePoint as a platform for Project Server and that support a limited number of users, will now need a second server. Excel services was a service that ran on SharePoint, but OOS is a separate server product that cannot be installed on the same server as SharePoint.
  2. The list of requirements to support BI is still quite complicated, and will be challenging to communicate to clients. (perhaps a good infographic would help). For example, Excel files with Power View will require SSRS in SharePoint integrated mode to be viewable in the browser. Also, refreshing connections in Excel files with data models will require the PowerPivot add-in.

Microsoft Blog Post about this is here
(see the word doc that is linked in the first paragraph for details on deploying PowerPivot and Power View in 2016)

A good document that compares Excel Services and the Excel Web App from 2013 is here

How Files are Organized within Microsoft Teams/O365 Groups

If a user wants to store a file for an Office 365 Group, the could store it in in the “files” area of the Group, which is really just a library in the team site that was created for the group. Alternatively, they could store the file in the “files” area of a channel within a Team. This file will be stored in a subdirectory of the library for the Office 365 Group. If a user tries to view the files for a team that is associated with a group, they won’t be able to, as files are only associated with a channel, not the team itself. If a user views the files for a specific channel of a team that is associated with a group, they will only see files for that one channel, and will not be able to view files in other channels or files that were uploaded to the files repository for the Group. If, however, the user navigates to the normal O365 Group site and views the file repository, then they will be able to view group files, plus they will be able to see subfolders and files that were created for each channel within the Team that is associated with that Group, which makes sense, as the channels are associated with the group.

If a user would like to view a file, they could of course navigate to the appropriate repository, as described above, or they could simply click on “files” on the left nav of the Teams interface. Then, after clicking on “Microsoft Teams”, the user will be presented with a list of all files that exist across all all channels of all Teams they have access to. Helpfully, this list will also show files that are part of the Group, and not just the team’s channels. Just to clarify, if the user clicks on “OneDrive” in the Files tab, they will see the contents of their own personal OneDrive, not the OneDrive files for any of the teams or groups.

If the user clicks on “notes” within a channel of a Team, they will gain access to the OneNote notebook for that channel. More specifically, there is one single OneNote notebook for the Office 365 Group that is stored in the site assets library of the Group’s Team Site which hosts notes for the Group, including notes for each channel within the Team. Each channel of a Team will get a new tab within the notebook. If a user views the Notes section within the Team interface, they will see only the notes for the current channel. If the user clicks the “edit in onenote” button, they will be able to easily switch between tabs within onenote, and thereby view the notes from the different channels, or notes from any other tab that was created in the site notebook. If the user navigates to the Group site and clicks to view the notebook, the user will have full access to all tabs in the web interface, including the tabs for each team channel. This makes sense, as again, there’s one OneNote Notebook on a Group’s Team Site that stores notes for Group, including for all channels of the Team that is associated with that Group.

It really couldn’t be simpler. 😉

New-AzureSBNamespace for Remote Event Handler Debugging

There are a number of blog posts with outdated instructions for setting up the Azure Service Bus to enable debugging for Remote Event Handlers. The old info is to go to the Azure Portal and create a Service Bus in the UI, or to run the following PowerShell command:

New-AzureSBNamespace -Name mynamespace -Location “East US” -CreateACSNamespace $true -NamespaceType Messaging

However, the UI does not generate a service bus with an ACS namespace (which is required for this task), and the above PowerShell command is deprecated and is not available.

As of the time of writing this, the following works fine:

New-AzureSBNamespace -Name ‘mynamespace’ -Location ‘East US’

The New Delve Blog

My Office 365 tenant just got a new profile update in Delve that has the new blog. It’s, uh, neat? It’s sort of a blog, with a nice but limited editor, and definitely some version 1 functionality. Or version .9.

The editor is similar to what’s used for Sway. So on one hand, everything looks quite good with minimal effort. On the other hand, you don’t get much control. Here’s the toolbar that appears when you select text:

delve blog toolbar

From left to right:

  • Bold
  • Italic
  • Underline
  • Link – currently uses a JavaScript “prompt” function, which is a bit primitive.
  • bullet list
  • number list
  • Convert text to a heading – this does more than apply a format, it inserts a new heading section right above the current section and moves the text to it. There’s no button to click to undo this. Users can manually move the text back, or ctrl-z sort of works. (ctrl-z puts the text back in the original location but leaves the new header, the user will just have to manually delete it)
  • Quote – This moves the selected text to a section right below the current section and applies formatting to it
  • Remove formatting – Removes any of the previously mentioned formatting from the selected text

A few additional notes:

  • If you copy and paste text in from other sources, it will lose its formatting. (this includes things like bulleted lists: paste in a bulleted list and it becomes normal text with line breaks.)
  • You can add a video, but oddly it doesn’t prompt you to select one from an Office 365 video site or OneDrive. It just displays another JavaScript prompt dialog:
javascript prompt

This is sad

  • There are no options to change formatting other than what was already mentioned. So  no changing fonts, and no changing the ~450 pixel high image / header at the top of each and every blog post.
  • There is no standard blog view: you can’t scroll down through recent blog posts. Instead, the blog home page displays a set of Tiles, with the more recent blog post at the top.  Though, once you’re viewing a post, there are some nice looking arrows that appear that let you navigate to the next or previous blog post
  • There is no calendar view of posts to easily see what was posted 3 months ago, for example.
  • It does show you the count of views, which is nice.
  • Like Sway, it automatically adjusts for different sized screens.
  • You can insert documents from OneDrive. They appear on-screen courtesy of Office Online.
  • There is no RSS feed. In fact, there’s no OOB mechanism to find out when someone else has posted something new to their blog. It’s no longer just in a SharePoint library like the old blog, so alerts are not available. The quick solution (?) to this is to set up a search part on a page somewhere and use the following query to return all blog posts. Just sort it by date modified:

path:”https://tenantname.sharepoint.com/portals/personal” ContentTypeId:0x010100DA3A7E6E3DB34DFF8FDEDE1F4EBAF95D*

Or, to display one person’s blog, just put in the more specific path.

Of course, this is a work in progress, so by the time you read this something will have changed.

Prevent users from sharing content with “Everyone” in SharePoint Online

New capabilities were recently added to the SharePoint Online Management Shell that allow us to block users from being able to share content with either “Everyone” or “Everyone except external users”.

To do this, fire up the SharePoint Online Management Shell, and connect as usual:

Connect-SPOService -url https://somesite-Admin.sharepoint.com

To view the current settings:

Get-SPOTenant

get-spotenant

The current sharing dialog before changing any settings:

everyone-before

To hide “Everyone”:

Set-SPOTenant -ShowEveryoneClaim $false

everyone-after

The “Everyone except external users” can be hidden easily as well:

Set-SPOTenant -ShowEveryoneExceptExternalUsersClaim $false

Of course, to turn it back on just run the same command with $true. Note, nothing further has to be done to get these commands to take effect. The next time a user clicks “share”, these items will be hidden.

Connect-SPOService: DTD is prohibited in this XML document

The error message of “DTD is prohibited in this XML document” is an error that can be caused by DNS configuration, as described here. Another simpler cause is trying to connect to the incorrect url, as the Connect-SPOService needs to be provided with the url to the Admin site. So, the following will generate the above error:

Connect-SPOService -url https://somesite.sharepoint.com

The following should work just fine:

Connect-SPOService -url https://somesite-admin.sharepoint.com

Sorting with the SharePoint Search REST API is Case Sensitive

A customer wanted to see a list of users sorted by last name, which seemed pretty simple. The data is already in the search index, and a simple REST call should be all that’s needed, I assumed.

The REST call:

http://server/_api/search/query?querytext='lastname:d*'&sourceid='B09A7990-05EA-4AF9-81EF-EDFAB16C4E31'&sortlist='lastname:ascending'&rowlimit=200&selectproperties='accountname,lastname,firstname'&trimduplicates=false

The above should return all users (since I’m using the predefined source id that points to the user profile search result) whose last names begin with “d”, and the results should be sorted by lastname, ascending. However, this yielded results like:

  • Davidson
  • DeSoto
  • Dean

So, the search REST API is sorting like JavaScript, which is based on the unicode values and not a “normal” dictionary sort. The solution? I don’t know. To my knowledge, there are no options in the Search REST API to control how the sort is executed. The only solution I found was to do the sort via JavaScript.

As an aside, there is an additional problem with the REST call, above. Specifically, “lastname:d*” seems pretty simple and self-explanatory. However, SharePoint doesn’t interpret this as looking for last names that begin with “d”, it apparently interprets this looking for last names that have a word that begins with “d”. So this REST query will return the following:

  • Davidson
  • DeSoto
  • Dean
  • Smith-Davis

There may be a way to specify to only match the beginning of the field value, not the beginning of any word in the field value, but I haven’t found it yet. Again, JavaScript solved this one, though admittedly that’s a poor solution.