Author Archives: Tim

Caution when creating new Folder


Please take an extra precaution when creating folders in an Engineering Project Library.

We are noticing that sometimes newly created folders have incorrect underlying metadata. If the new folder’s metadata remains incorrect it may be returned in the Project search results as demonstrated below. Items other than “Engineering Projects” in the search results is highly undesirable so we need your help. In the case below, the newly created folder has metadata telling SharePoint that the item is an “Engineering Project” instead of a simple “Folder” so it is being returned in the search results.

Note: The “Engineering Project” metadata is reserved exclusively for top-level projects in the Projects Library of each Regional Site. No other item should be categorized as such.



Until we are able to correct this default behavior, we ask that you examine any new folders you create so it categorized accurately.

This is a two-step process:

  1. Edit the properties of the folder
  2. Select “Folder” in the Content Type Dropdown and save


Here is how you do that:

Select the ellipse menu next to the folder and choose “Edit Properties” as shown below.



At the top of the next form you will see a field named “Content Type” and if the value is anything other than “Folder” simply choose “Folder” and click save.

Once the Content Type is set to “Folder” and saved you are done.








Understanding Document Sharing in SharePoint Online

SharePoint Online offers users the ability to share documents with people outside your immediate organization. Seems simple enough in theory but gets confusing in practice. Here are the key elements to understand if you find yourself confused like I was when testing.

In order for this to work you must first configure the SharePoint Online Tenant and Site Collection to allow sharing. I am not covering how to set that up in this article but you can learn about that here, here and here.

Steps to share a document

The first order of business is to obviously select a document you wish to share by right clicking the ellipses to expose the “Share” option.

Once the share dialog is opened enter the following information:

  1. The email of the person you are sharing with.
  2. Permissions to either edit or only view the document.
    (In my opinion, this incorrectly defaults to “Can Edit” instead of “Can View” so if you don’t want the person you are sharing with to edit you must remember to change this setting each time.)
  3. Enter a friendly message to go along with the email invitation.

Note that the “Get a Link” option on the left side of the dialog and the “Require sign-in” are available only if you have your SharePoint Online Tenant AND site collection configured to share using anonymous links. In most corporate environments you probably always want users to log in so you have control over who has access to your documents and this article assumes so. Otherwise, any user that has the link will be accessing your documents. The Site Collection and Tenant administrator have access to those settings so see them for further information.

After completing the dialog and pressing the “Share” button the user will receive an invitation email similar to the one below.

How External Users Log In

Assuming you require users to sign-in to view shared documents, the user can click the document link to be directed to a login page prior to access.

How users sign-in and what account they use was a point of confusion for me. Notice below the three login options.

  1. Microsoft Account: Use this option to use ANY Microsoft account the user may have. You may use Skype, Xbox, Hotmail, or anything Microsoft. This is the option to use if the “Organizational Account” option is not applicable and you have such an account.
  2. Organizational Account: Use this option if you have an Account specific to the SharePoint Online Tennant in which the Shared document resides. The term “Organizational Account” was and is confusing to me so I just think of it as the SharePoint Tennant specific account. It is possible that you belong to other SharePoint Online Tenants so login using the appropriate account.
  3. Create a Microsoft Account: This is the third option which I overlooked initially. If the user has no existing Microsoft accounts and no SharePoint Tennant specific account then just create an account on-the-fly using this option. Once it is created you can use it over and over again.


Choosing either option 1 “Microsoft Account” or option 2 “Organizational Account” will direct the user to a login page like this.

Choosing option 3 to create a Microsoft Account directs the user to an account creation page shown below. This form is straight-forward, just provide an email address and some other information for verification.

When the form is submitted a verification email is sent to the user and after verification is complete the user’s account is created and can proceed to access the document.


Managing Your Shares

As a site content owner you will want to manage what is being shared and with whom. There are two tools from which you can to do this.

Shared With Dialog

The first method is to use the ellipse menu associated with the document to expose the “Share With” option.

Note in this dialog, there are no option to remove users only view. However, when you click the “Advanced” link you will be taken you to the “Permissions” administration page for that document. The “Permissions” admin page is where you remove users to prevent further access.

Also note that shared external users will not be listed until they actually access it. Until accessed, the user are in a “Pending” list as demonstrated below.

Viewing all Shares

The method mentioned previously is fine for understanding shares with respect to a specific document, but what if you want to view all the shares for all documents? For that, go to “Site Settings” and select “Access Request and Invitations” in the “Users and Permissions” section. Don’t worry if you can’t find it immediately as it is only visible once the first invite is initiated and sharing is turned on for the Site Collection.


The Access Request page has three sections:

Pending Request

The first section shows any user that has requested access to something. When a user is selected in the list the top Ribbon menu will allow you to accept or reject the request.

External User Invitations

The second section shows any external user that has been invited to view or contribute to a document but not yet accepted. Selecting a user in this section enables the Ribbon options to Resend or Withdraw and invitation. Withdrawing the invitation will move the account to the History section mentioned below.


The third section is for historical reference. When an invitation is sent it is in a “Pending” status, it will eventually expire. Once the user accesses the document or the expiration date is reached you will find the account moved into “History” where it will reside for auditing.

It is interesting to note that the lists in each section provide the ability to create views (Note the “Modify this View” and “Create View” links) thereby allowing better organization of data when many records are present.

This article represents the core components and issues necessary for understanding how documents are shared with external users. Many of these concepts are applicable for sharing sites and folders as well.

Lastly, as with many testing exercises with SharePoint Online you are at the mercy of timer job frequencies which you have no control over. As such, at times is can be frustrating waiting for emails to be sent and dialog boxes actually show shared user accounts.

Thanks for reading and I look forward to your comments and questions.







Office 365 Premium == Happy Home Computing

For a measly $20 per user you can now power up your family of 5 with:

  • Word
  • Excel PowerPoint
  • OneNote
  • Outlook
  • Access
  • Publisher


Yes that’s right! 5 family licenses for $100 per year! I can suite up my kids and wife with all the tools for school, work and social and never worry about upgrades again! Me so happy!


If you are not familiar with Office 365 it is the same Microsoft Office you are familiar with only your license allows for you to access it not only from your Laptop of Desktop but also from within your browser, mobile phone, public PC’s or Macs. Upgrades just happen so you are always fresh with the latest and greatest features and unburdened from the hassle of buy and/or downloading and installing upgrades yourself (bit time saver). Documents can be stored on OneDrive so you a free from losing data when you’re hard drive fails. OneDrive makes is very easy to share a document with others. Just selected it and click “Share”. You can then share it with anyone you want and set permissions for them to either view-only or edit.


Each license comes with 20 GB of OneDrive storage making it extremely easy to share documents with each other and out-siders like teachers, friends, coworkers and extended family. Included are 60 minutes of Skype caller per month so if you make that many calls it almost off-sets the price of a single user license.


I am having great success with this product and would like to hear how or if it works for you!


Link to the Amazon download here.

Developing PowerShell Scripts with PowerShell Tools for Visual Studio

I think I have finally hit the sweet-spot in developing PowerShell Scripts. For the past few years now PowerGui has been my tool of choice but as libraries for SharePoint and Azure have become very much part of my every day I have found that tool not providing PowerPacks and other conveniences to get setup quickly. I have been frustrated trying to setup the correct references to so that Intellisense works with Azure and SharePoint – I just have not gotten it right. If you have pointers for me I would love to hear them.

So here is how I am setup know and I can tell you I like it a lot because it give me the opportunity to:

  • Use Visual Studio
  • Use Intellsense
  • Easily Integrate with TFS
  • Provides standard F5 debugging tools
  • Examine Variables in Debug Mode
  • Execute cmdlets directly

The “Immediate Window” is useless in this scenario so you have to rely on the Locals and Watch windows to examine variables. To execute cmdlets directly you just open the Nuget Package Manager Console which is itself a PowerShell console containing all the references you need – no additional setup needed.

To get things going do the following:

Building SharePoint Online Business Solutions using Document Sets – Part 1

This series of posts I will discuss how SharePoint 2013 Document Sets and other SharePoint features can be combined to provide a robust solution for managing numerous related documents like those related to activities such as project management, legal cases, contract negotiations, business proposals or whatever.

In this set of articles we will create a typical corporate Project Management Office (PMO) solution that involves structuring and grouping all document artifacts related to a given project together with as little administrative overhead as necessary.

The sub-goals of satisfying this requirement are also:

  1. Use out-of-the-box SharePoint (no-code capabilities as much as possible)
  2. Centrally initiate new projects and ensure all have common meta data, document structures and templates
  3. Populate the project with standard PMO document templates such as Project Charter, Status Reports etc.
  4. Automatically associate all project documents together
  5. Search, aggregate, filter Projects within and across Site Collections
  6. Leverage retention policies so projects can be archived for safe keeping

Create Content Types

Document Set Content Type

Firstly, we create a “Document Set” Content Type called appropriately: “Project Document Set.” By leveraging the Document Set’s synchronization feature we can achieve quite a bit of automation without code.

The “Document Set” Content Type is an out-of-the-box SharePoint Content Type with special powers for coordinating the properties among the Content Types it manages. This coordination of Content Types allows you to treat a group of Documents as though they are one. The benefit of this is that you can manage an entire groupings of documents as one unit. For, example moving all related documents to a Records or Document Center for archiving.

For detailed information about the Document Set Content Type please refer to this article from Microsoft.

The image below illustrates the concept more clearly. The green oval represents the Document Set Content Type with Content Types it manages inside. Notice the common fields marked with the red star. The Project Document Set is configured to synchronize the common fields thereby alleviating the burden of requiring the users to complete those fields over and over again with each new document that is added to the set.

There is a design decision here that you will need to make as far as where to define your Content Types:

You can define Content Types and Site Columns in either a single Site Collection or in the central Content Type Hub. The difference is that when defined in the Content Type Hub they are available throughout all the site collections in your SharePoint Farm using the Content Type Publishing feature. Otherwise the Content Type definitions are only available in the site collection in which they were defined. For more information about Content Type Publishing and the Content Type Hub refer to this article.

I’m not going to cover what a Content Type is or how to define them in this article. If you want to learn and understand them start here.

Shared Site Columns

The “Project Document Set” Content Type will have the following fields so those need to be defined in the Site Columns:

  1. Project Name – Single Line Text, Required
  2. Project Type – Managed Metadata, Required
  3. Project ID – Single Line Text, Required
  4. Project Status – Choice

Here you will want some of the fields as required. By doing so you can later use those fields in a Documents Center or Records Center to filing your documents using automatic rules. In subsequent articles I’ll demonstrate how to archive these Project Document Sets using automatic filing rules so I am marking the Project ID, Project Type and Project Name as required.

Project Management Document Types

Next, we create Content Types for the various document types that the Document Set will manage. For this I am using a few standard PMP document templates available at

I will create a Content Type for each document template I downloaded. The Parent Content Type for each of them will simply be SharePoint’s “Document.”

  1. Charter Template
  2. Communication Plan
  3. Status Report
  4. Work Breakdown Structure


Although I did not do it here, I find it helpful to first create a custom base Content Type derived from “Document” (call it “Project Document” or something) and then derive all the remaining Content types from that. This provides the flexibility of easily adding additional fields to all child Content Types by simply adding columns to be base.


Each of the four Content Types will utilize the same site columns we defined before creating the “Project Document Set.”

  1. Project Name – Single Line Text
  2. Project Type – Managed Metadata
  3. Project ID – Single Line Text

Reusing these same fields is important because, as mentioned earlier, SharePoint will automatically synchronize these fields across all the Content Types it manages.

Here is the completed Content Type definition for “Project Charter.” The other three Content Types will be configured the same.

Associate Individual Content Types to the Document Set Content Type

Now we have our “Project Document Set” Content Type defined along with the other Content Types it will manage.

Configuring the Document Set

To configure the “Project Document Set” click it from the list of Content Types and select Document Set Settings as shown.

Here is where all the magic happens.

Allowed Content Types

The first section called “Allowed Content Types” is where you associate Content Types that the Document Set will manage. Here I have selected a group of Content Types that contains all the PMP project Content Types.

Default Content

The next section called “Default Content” defines documents that will be prepopulated when a user creates a new “Project Document Set.” This is awesome because at any time an administrator can change or remove a document template insuring new projects will use the latest templates.

To configure, just select one of the Content Type in the dropdown, specify a folder name where the template will reside and upload a document. The document file is mandatory so if you just want to create an empty folder you won’t be able to. (In another post I’ll demonstrate a remote event receiver which deletes the file so the user sees only an empty folder).

Below is the newly created Project Document Set and notice how SharePoint creates the Folder(s) specified in the “Default Content” settings.

Drilling into that folder you will find a copy of each document that was also specified.

Shared Columns

The “Shared Columns” section lists the fields in the “Project Document Set” Content Type that will be synchronized with the Content Types it manages. Simply check the fields that need to be synchronized. Not only does the synchronizer work when a new Document Set is created but it also works when you update one of the synchronized fields. For instance if, after some time a project name is changed it can be updated on the Document Set and all child items will also be updated.

Continuing from the previous image; below are the properties of the files where the Project Name, Project Type, Project ID fields synchronized from parent Document Set.

Note that word “Frozen” in the Project Name is misspelled. To clean that up all that is necessary is to update the Project Name field with the correct spelling in the Project Document Set and SharePoint will synchronize that change to all the child Content Type’s it manages!


There are two primary issues with this out-of-the-box Document Set functionality that I don’t like. I found no way around these so I eventually ended up created a Remote Event Receiver to clean them up.

The first issue is the Content Type SharePoint assigns to the sub-folders. Remember in the Document Set Setting’s “Default Content Types” section, folders and templates can deployed when a new Document Set is created. Here I noticed that the assigned Content Type is the “Project Document Set” itself which means the sub-folders are themselves “Document Sets” and not the typical “Folder” Content Types that you would expect. Having the sub-folders assigned to my “Project Document Set” Content Type is problematic because we will get incorrect search results when querying the system for Projects.

Not only was the Folder Content Type wrong but I also noticed that the Project Name, Project ID, and Project Type fields are not synchronized. I experimented by attempting to allow my “Project Document Set” to also manage the “Folder” Content Type but it cannot be selected in the “Allowed Content Types” section of the Document Set Settings. As mentioned above I eventually developed a Remote Event Receiver to update the sub-folders so that they were “Folder” Content Types and also populated the values correctly.

The next big undesirable I found when working with Document sets was the “Name” field of the Document Set Content Type. Apparently, “Document Set” Content Types are derived from the “Document Collection Folder” Content Type which in turn are derived from “Folder.” This means that a Content Type is basically a “Folder” and it has a Required “Name” field. As such, the “Project Content Type” also must have a “Name” Field which is redundant to the “Project Name” field we defined. My solution was to have the user simply enter the Project Name in the “Name” field and then the remote Event Receiver would copy the value from the “Name” to the “Project Name” field.

Up Next

In subsequent posts I’ll demonstrate how to tune the search engine to display and filter these Projects and how they can be moved in their entirety to a Documents or Records Center using automatic filing rules..














Release of my latest Web Project: “Check In Now”

I don’t usually get to showcase my development work because the vast majority is for internal business and intranet usage. Today, however, is an exception as we are live with a project I have worked on over the past 4 months. It is an ASP.Net, HTML5 MVC4 application which leverages Entity Framework 6, JQuery, Titter Bootstrap, oAuth, Toastr and other plugins.

The Covenant Medical Group “Check In Now” application allows patients to view current wait times and pre-register at four urgent care facilities located in Lubbock Texas. This app will be expanded to cover many more facilities and regions of the St. Joseph Health System. Patients can complete paperwork at home, ahead of their arrival time. Doing so, fast-tracks their registration process and time to treatment once they arrive. Facility administrators have the ability of updating wait times, view incoming queue of patients and send emails and SMS text messages directly to arriving patients.


Analyzing Your Site’s usage

Recently I was asked if there was a web part that could added to a page which would track site visitors.

The answer to that is no.

However, each SharePoint site collection has a more powerful tool for understanding site usage. SharePoint tracks usage for you and that information is available in Site Settings Site Collection Web Analytics

Reports.   Within this area is a plethora or data including:

  • Top Pages – Pages most visited
  • Top Vistors – Users that visit your site most frequently
  • Top Queries – Search criteria that your users are using to find information on your site. This can be used in conjunction with Search Scopes and Search Keywords for fine tuning search results.
  • Trends and other statistics


Seeking new Web/SharePoint Leadership Opportunities

My most recent position with St. Joseph Health as Manager of Web & SharePoint development has been eliminated along with 30 or so other IT positions due to budget workforce reductions. I really enjoyed working there and have been concerned about this possibility for many months now. However, I wanted to see it through rather than leave because I really enjoyed it there.

So the good news is I am ready for the next challenge and wanted to be sure my readers were aware of this situation. I am seeking opportunities in technical leadership with focus on web and SharePoint development and strategy.

My resume can be found here If you or others in your network need access to it just let me know and I’ll share it out if it is not already.

I really appreciate your support and if you hear of any openings that may be fitting please let me know so it can be evaluated.

Thanks for reading!

Sniffing SharePoint for Enterprise License Feature Usage

SharePoint Enterprise features provide users the ability to use advanced capabilities not found in standard SharePoint licensing. Once you have licenses for Enterprise features all you do is enable them on the site collections and users are free to consume them.

Once enabled, however, there is no easy way to determine if they are being actually used. Enterprise license are pretty expensive so you want to be sure you are getting your money’s worth.

One, painful way to determine usage is to manually thumb around sites looking for things like Excel or Visio Web Parts, InfoPath forms, Content Organizer Rules, Data Connection Libraries or Power Pivot libraries. That is not practical, nor accurate, nor fun.

In my case I have no fancy commercial tools to manage and administer my farm so I often resort to rolling my own PowerShell scripts. The following are some functions I wrote to detect and document the instances of Enterprise feature usages.

The first thing you need is a loop that iterate down through your farm Site Collections and sites. Something like this usually works fine.

Once this main loop is in place we can insert detection functions which analyze SPList objects of each site. With the help of some online research below are the functions I came up with. All of the functions accept a site URL and iterates over the SPList objects to determine if the condition I am looking for is found. If a SPList object contains the feature I seek, it is added to an ArrayList and returned to the calling main loop. The main loop collects all ArryLists and then exports them to CSV or whatever you want to do with them. I export to CSV and put those in MS Access for creating nice reports.

Detecting PowerPivot Libraries

The trick to this function is to analyze the TemplateFeatureId property of a document library and compare it to the feature ID’s for PowerPivot. The PowerPivot feature Id’s are specified in the code.

Detecting Data Connection Libraries

This method is the same as used for detecting PowerPivot Libraries with the exception of a different feature Id.

Detecting Excel Web Parts

This one is a bit more complicated and requires first determining if the function is dealing with a Publishing site or not. For Publishing sites we have to get something called a “LimitedWebPartManager” from each SPListItem in the Pages library. The “LimitedWebPartManager” allows you to iterate over each web part on the page to detect if the any web part of type “ExcelWebRenderer.”

If we are not dealing with a Publishing site, then function looks through all SPList objects that have a “BaseTemplate” property of “WebPageLibrary.” Again using the “LimitedWebPartManager” we look for the same “ExcelWebRenderer” type web parts.

When we find even one “ExcelWebRenderer” web part in a page we add the SPList to the ArrayList which is returned to the calling loop.

Detecting Content Organizer Rules

Content Organizing Rules are Enterprise features usually found in Document or Record Centers. These rules are created by users to automatically route documents to their proper folder based on Meta data on the document. Look it up if you are not sure what they are I think you will find them pretty cool.

Content Organizer Rules are stored in HIDDENs list using a content type named “Rule” so we just iterate over the Hidden SPList objects looking to see if the “Rule” content type is being used. If it is, the SPList is put in my return ArrayList.

Detecting InfoPath Forms

There is probably a cleaner way to detect usage of InfoPath forms but this was what I found in a pinch. In my environment it worked for at least a very large portion of InfoPath usages. I noticed that when you examine a list that has a custom InfoPath form instead of the default, SharePoint Designer will display alongside the default NewForm.aspx and EditForm.aspx additional forms called newifs.aspx and editifs.aspx respectively. I assumed that the “ifs” suffix stands for “InfoPath Form Services” so I set out to detect those. In addition, Form Libraries can also use InfoPath forms and those can be detected by inspecting their BaseTemplate property. If “XMLForm” is the BaseTemplate then an InfoPath Form is being used.

Exporting to CSV

As mentioned before, the main loop collects all the ArrayLists returned by the detection functions for export to CSV (in my case pipe delimited rather than comma). Just select the properties of the SPList and send them to the Export-CSV commandlet. Since all the CSV’s have the same columns just import them into Excel or Access and make your report.

Final Code

Code Snippets using Geshi Syntax Highlighter

From here on out I will be using Geshi Syntax Highlighter. I think this will work out nicely. Below is a sample.