Changes to SharePoint Online Storage Limits and Site Collection Storage Management Announced

Microsoft has just announced that it has changed the storage limits for Site Collections and how they use storage from your available tenant storage.

In the old model, if you reserved 100 GB for a site collection, the storage was reserved from your available tenant storage.  In the new model, only the used storage counts against your allocation – if your users have only stored 10 GB of content into the site collection then that frees up the remaining 90 GB back into the pool.

In addition, Microsoft has provided a new manual and automatic setting for site collection storage.  Auto means that storage is allocated as needed; Manual means that you can set storage quotas for each site collection.

Auto for Site Collection Storage Management highlighted

manage storage for your site collections manually highlighted

Read More

Office 365 APIs Push Developers Further Into Externally Hosted Client Side Application Models

As posted previously in my article Guidelines for Customization in SharePoint 2013, Microsoft is pushing custom code development off the SharePoint platform and providing new ways for developers to provide customizations both as SharePoint embedded “apps” (similar to what used to be called Web Parts) as well as completely external applications that use Office 365 as a backend content repository.

A figure that shows the O365 APIs Preview platform

For those still working with SharePoint 2007/2010 and even SharePoint 2013 on premise, this is a fundamental shift to the farm deployed, server side code solutions or even the sandbox deployed solutions that were the model in previous versions of SharePoint.

In the past few weeks, there have been a few new developer tools that have been published that push this new development model even further:

If your organization is still investing in Web Parts, WSPs, Server Side Object Model, etc. from the SharePoint 2010 days or you are maintaining legacy code that was built for SharePoint 2003, 2007 or 2010 be prepared for a new paradigm and an opportunity to redesign these components as you transition to Office 365 – the world has changed to a Javascript, client-side, HTML 5, JSON, REST model and Office 365 is embracing this model heavily in all the latest API patterns and practices. 

Read More

Microsoft Cloud Finally Coming to Australia

Microsoft announced in May 2013 that they would be setting up a data center in Australia.  However, a year later there is still no official announcement and the closest data center is in Singapore.

Microsoft is now expected to announce the official unveiling of its long awaited Australia based Azure data centers at its partner conference on September 2-4.

Read More

Developing a Site Archiving Strategy for SharePoint

File:Video tape archive storage (6498637005).jpg

One of the key requirements for any enterprise SharePoint implementation is to transition sites to an “archive” state when they are no longer in use.  When we define the requirements for “archive”, we need to answer two key questions:

  • When should a site to be archived and how is the archiving process triggered (e.g. a date, an event, a person clicking a button, etc.?)
  • What happens to a site when it is archived (e.g. delete it, export it, lock it down, move it to another site collection, etc.)?

Here are a few options and best practices to answer both questions.

Approach #1: Change the Site Settings

A really simple approach to archiving is to simply change the permissions of the site to be read only or to even lock it down further so that it is not longer even read for intranet users.  Reading could be restricted to a small group of corporate site managers who can still access the site for historical purposes but for everyone else, the site is now invisible and off limits.

Another approach to updating a site so that it is archived is to change the site settings so that it is clearly now in an archive state.  The following post has some good suggestions on how to do this using basic site settings including:

  • Changing the search settings so that the site is no longer available in search results.
  • Changing the title or look and feel so that the site shows clearly that it is in archive state.
  • Turning off version control and workflows.

With a little bit of custom scripting, one could write a workflow or script that does this automatically based on a triggering event.  Alternatively, this could be done manually by the Site Administrator.

Approach #2: Move the Site

One obvious choice is to move the site to a separate “archived” area within your site structure. 

Within SharePoint, moving sites within a Site Collection can be done using the Content and Structure tool (requires Publishing feature to be enabled).

If you need to move your site to another site collection entirely, this is not trivial, especially with SharePoint Online.  The reason for this is that your site is dependent on features that are deployed to the site collection that may not be available in the site collection that is the target destination.  In addition, there are no GUI tools available out of the box to support this move – it has to be done through an export and import process using either Central Admin (only available on premise) or PowerShell.

This creates an external file that can be re-imported if it is ever needed. 

This approach lacks any automatic triggering mechanism to determined when a site is to be locked down.

Another approach is to use a third party migration tool such as Sharegate or Metalogix to move your sites to another Site Collection or even an entirely different farm.

Approach #3: Use a Third Party Tool for Archiving

There are a number of third party tools that provide archiving capabilities over and beyond what SharePoint provides out of the box.  Check out tools such as:

These tools provide sophisticated archiving capabilities that are worth investing in especially for enterprises with large volumes of sites/documents.

Approach #4: Site Based Retention Policy

SharePoint 2013 supports a site based retention policy that can archive a site based on policy rules.  Site policies are created at the site collection and apply to sites within the collection. 

For each site, the policy has to be applied individually under the site settings. 

The policy prescribes both when a site should be archived and what happens to the site as a result. 

However, as you can see by the settings, the policy options are reasonably limited and the triggering date is based on the site creation date and not on some other type of triggering event – for example, 90 days of inactivity. 

Approach #5: Implement a Custom Workflow

Another approach to using the Site Policy concept is to implement a custom workflow.  Such a workflow can add additional business logic to the transition of state from open to closed.  Within the Site Policy concept in SharePoint 2013, you can elect to run a workflow to manage site closure.

Such a workflow could send an email to the Site Administrator to ask if they are still using the site and use the answer to determine whether to close the site or leave it open for another year.  Within the policy, you can have the same workflow run on a periodic basis to determine again whether the site should be closed.

Read More

Azure Resource Manager Tools Now Available in Preview

Microsoft has been working on a new set of tools for Visual Studio that will allow you to define a complete cloud deployment model for custom applications that you build in Visual Studio.  For example, you can create a custom ASP.NET MVC application that uses SQL Server as its back end database as a project in Visual Studio today, but the new Azure Resource Manager will allow you to also define the cloud infrastructure components that are required for your custom application using Azure Gallery templates. 

The current toolset allows you to create only new types of “Cloud App” – a plain ASP.NET web site and a ASP.NET web site with SQL Server. 


Additional templates will be added for other common scenarios.

The cloud app solution essentially creates a set of script files for deploying your environment within Azure.  The scripts are in a combination of JSON templates and PowerShell scripts.  The scripts are fully parameterized and you can create multiple “Resource Groups” to deploy, e.g. different environments for dev, test, prod, etc.


Once you have configured your resource group, you can publish your application to Azure through Visual Studio or through PowerShell.



Read More

Office 365 Now Offers Unlimited Sharing to External Users

Microsoft has just announced that Office 365 subscribers can have unlimited external users sharing content with internal employees.  The external sharing features in Office 365 include:

  • Collaborating on documents using One Drive or SharePoint
  • Sharing calendars
  • Using Lync

External users cannot be existing employees, contractors or onsite agents for your organization. 

It should be noted that External users have some limitations on the functionality they can use within SharePoint.  External users are restricted from performing the following functions:

  • Creating their own personal sites, edit their profile, etc.
  • Creating their own OneDrive for Business document library
  • Act as a Site Collection Administrator
  • See the company wide newsfeed
  • Add storage to the overall tenant storage pool
  • Access the Search Center to execute searches on “everything”
  • Access site mailboxes
  • Access Power BI features including Power View, Power Pivot, etc.
  • Use eDiscovery

If you need your external users to have these features, they would need to be added as regular subscription users.

Read More

Guidelines for Customization in SharePoint 2013

SharePoint 2013 and in particular, Office365, represents a fundamental shift towards on using out of the box functionality and to shift code off the SharePoint farm.  There are a number of key drivers for this shift:

  • Many years of frustration, negative feedback and migration headaches from users moving custom solutions from SharePoint 2003, 2007 and 2010 to the latest version of SharePoint
  • Improvements in SharePoint 2013 that reduce the need for custom code to customize the platform
  • The deeper integration of Office technologies online into SharePoint, e.g. Excel Services, Visio Services, Access Services, etc. that can act as pseudo applications instead of building new custom apps
  • A shift in general web technologies to support client side application development with things like JavaScript frameworks, CSS, HTML 5, etc. 
  • The need to support Office 365 as a cloud based offerings means restricting customizations that could pose a threat to the shared service
  • The rise in “apps” in general which represent small deployable software components instead of monolithic applications

For those looking to custom develop on SharePoint 2013, there are two really good articles on customization strategy from Microsoft:

In particular, if you are targeting Office 365 the key message is that you cannot deploy custom code to the SharePoint farm.  You are still allowed to deploy Sandbox Solutions but they must be “no code” and are only typically used for branding and template extensions.  Everything else should be a new SharePoint “App” where the code lives externally to SharePoint and uses client side frameworks to access SharePoint data. 

App for SharePoint programming model

Read More

Creating an Azure Virtual Network Complete with Domain Controller, Active Directory and SharePoint

I needed to create a SharePoint 2010 demo farm for some testing purposes, so I decided to plunge into creating a brand new virtual network complete with domain controller, active directory and a new SharePoint 2010 farm.  Here are some key lessons learned and some very useful articles that helped me complete the task.

Creating the Virtual Network

An Azure Virtual Network is a private network that can be used to segment your virtual data center into logical zones.  Because the network is private, you can control the IP addresses, set up a traditional domain structure, add your own DNS server, etc.

You can also create a VPN tunnel either as a site-to-site or point-to-site connection.  I tried out creating a point-to-site connection from my laptop to the virtual network and it worked like a charm. 

Creating a new Virtual Network is easy and can be done using the Azure Portal.


Creating the new Domain and Active Directory

The next step is to create a new domain by setting up a Domain Controller and Active Directory server.  I used this article as a guide and created myself a virtual machine that could act as a primary domain controller.

When you create the new VM, use either the standard Windows Server 2012 R2 Data Center or Windows 2008 R2 SP1 templates to create your server.


Once you have a newly provisioned server, it is recommended that you assign it a static IP address so it can act as a DNS server.  This can be done using PowerShell with the command:

Get-AzureVM -ServiceName StaticDemo -Name VM2 | Set-AzureStaticVNetIP -IPAddress | Update-AzureVM

Check out this article for more details on setting up a static IP address.

Once you have a static IP address, you can install Active Directory and set up your server as a domain controller. 

Add the DNS Server to Your Virtual Network

Once you have created a new domain controller and DNS server, you need to set up the DNS server in the Virtual Network itself.   This can be done through the Azure Portal.


I forgot to do this the first time, and the impact is that when you add new virtual machines to your domain, they can be successfully added but when you try to login you get the following error:

There are no logon servers available to service the logon request

This happened even when I configured the server itself with the appropriate DNS entry – it needs to be done at the network level in order to work properly.

Add Your VMs to Your New Domain

Once you have your working domain and virtual network, you can now add additional virtual machines to your network.  When you provision the machine, make sure you use the cloud server attached to your Virtual Network.



Once you have your VM up and running, add the DNS for your domain controller and join the domain.  Now you have a VM running in your newly created domain!

Once I had a VM properly configured, I installed SQL Server and SharePoint on the box and now have a fully functional SharePoint 2010 Farm running on Azure!

Read More

Best New Features in Power Query Update–Improved Error Management

Microsoft has just released a new update to Power Query with a few new enhancements to improve the loading of data into your Power Pivot models.

One of the best features in the update is improved error reporting and debugging.  In the older versions of Power Query, if you loaded up a million rows into your model and a few rows failed (typical scenario was type conversion errors such as someone putting “None” into a column that should be a number), it was very difficult to track down the failing rows.  This has now been addressed in the latest update.

Now you can see a list of every row that created an error with a specific message to explain why the row failed the load process.

In addition, you can now set a default replacement value for any value that generates an error on the load for each column.

For example, if I had a CSV file that had “N/A” stuffed into a numeric column, I could change this value on load to 0 instead of removing the row (or another appropriate value).

Read More