All posts by Jeremy Thake

Top 10 Build 2015 recordings not to be missed on Office development!

It has been a long few weeks with Sydney, London, San Francisco and Chicago. I thought I’d just put down my favorite sessions from Build 2015 and I’ll do another one on Ignite once they are up too next week.

1. Build 2015 Day one keynote

This is not to be missed with Rob Lefferts on stage with our CEO Satya Nadella demoing Outlook add-ins like Uber, SAP and our Unified API using the Graph Explorer.

2. Office 365 development…why it matters

This was my only session of the week with Rob Lefferts and we did a demo palooza of all the new announcements.

3. Integrating Web Apps with Office 365

Todd Baginski and Dorrene Brown did a great job of demoing the Property Manager hero demo and how it was put together. Its a great project to show case what can be done with the Office 365 APIs in a real world scenario.

4. Supercharging Your Custom Solutions with the Office 365 Unified API Endpoint

Yina Arena has been spear heading the Unified API endpoint efforts and she does an amazing job of explaining what its all about in depth.

5. iOS and Android Apps with Office 365

Todd Baginski and Josh Gavant showcase how to build native iOS and Android apps against the Office 365 API SDKs.

6. Connecting to OneNote in the Cloud with Office 365 APIs

One of the most exciting announcements for me was the fact that you can call the OneNote APIs with an Azure AD token!

7. Building Multi-Device Apps with Xamarin with Office 365 APIs

These guys did a great job of demoing Xamarin and Office 365 APIs together. Chaks and James are a pleasure to watch!

8. Building a Single-Page App Using Angular and TypeScript Using Office 365 APIs

Andrew is one of my favorite presenters and he killed this session on Angular and TypeSCript.

9. Building Office Add-ins using Node.JS

Another one by AC, I really want to personally get plugged into Node.JS and this was a great intro.

10. Get Your Hands Dirty with the Office 365 APIs, Authentication and SDKs

Rob Howard totally blew away the crowd with his Fiddler skills explaining the auth stack on Office 365 and Azure.

Top 5 tips for presenting at hackathons

I landed in Chicago yesterday after a week in San Francisco at Build 2015 where we announced some great new developer features for Office 365 development. You can also listen to our podcast from this week that covers it in detail. I’ve spent the weekend at a hackathon run by Andrew Clark and his team called There are 8 teams who were coding throughout the night who will be showing their solutions to judges at 5pm today. They were presented 5 problems to select from to build a solution on top of. The majority of them have spun up free Azure and Office 365 trials to leverage the technology to speed up building their solutions.

As a judge at many of these hackathons we’ve been running I thought I’d share top 5 tips for successful presentations during hackathons.

1. Know your judges

At each hackathon the judges will typically be known before hand and will have interests in particular areas of technology. In general though, they will all be excited about innovative ideas on tech regardless.
If they are representing certain technologies from the companies they are from, naturally using their stuff is going to definitely rub them up the right way 😉 Check out the judges at for some hints.

2. Tell the story

The pitch to the judges is really important. You don’t need to explain the problem as the judges will be aware of that, but what is key is how your solution helps solve the problem.
If other teams are doing the same problem, you’ll need to be clear on what the key features are that differentiates your solution. This will help the judges in picking winners.

3. Explain the journey as a team

The judges will have likely done a hackathon in the past. Introduce the backgrounds of the team members and what their skill sets are. Typically it’ll be a mixed bag of skills and often showing what you’ve learnt during the hack will impress the judges.
For instance, at a previous hack, the teams had NEVER used Outlook add-ins before and had built a whole solution in Outlook to translate the bodies of the emails within 1 hour.

4. You only have 24’ish hours

The important part to remember is…you can have the sexiest back end APIs and database schemas…but if the user interface doesn’t tell the user experience you will not WOW the judges. Prioritize on the user experience and add as much polish to this as possible.

5. Its a hack…not a product

The demo doesn’t have to be concrete…you’ve had 24 hours, so if there is a bunch of band aids in the background to get things working…so be it. You’ve seen enough keynotes to realize that a lot of it is smokes and mirrors, so judges won’t expect polish.

I look forward to seeing what people have built in 24 hours!

The Smarter Inbox system

If you aren’t follow Scott Hanselman on Twitter you are doing something wrong in the first place. But I saw a tweet from his last week on an inbox system he was using.

I have been running zero Inbox since joining Microsoft a year ago last week and can’t believe I’ve managed it. Travelling to conferences does make it hard to keep on top of but its the only way I can stay on top of things.

I have been trialing this approach for a week now and love it! i’ve tweaked it a little and wanted to explain what I’ve done.



  • Vendors
    I have various vendors I work with on a bunch of projects, so I essentially added a rule that if any emails come from them to move it to a Vendors folder. I then treat that as a top priority folder to check.
  • External
    I get a lot of external questions, that I do treat with priority but not as highly as my core work. So I have a rule set up that any email not from ‘’ gets put into this folder.
  • CC
    Email is nuts at Microsoft…if I’m on a cc on an email, I file it to this folder. I usually check this folder once a day in the mornings and most I just delete or file, very little are actionable.
  • Invites
    I get a lot of meeting invites, so been able to see these immediately is really important and act on them.
  • Yammer
    The Office 365 Technical Network has a lot going on and the only way I can keep up is via e-mail ironically. The Yammer Inbox is just unmanageable. So I file them all here and try and get through this at least once every other day.

This means that my action inbox is everything else which is the highest priority. So far its been great. I try and keep the folders as empty as possible and action on the spot like I did with Inbox Zero OR create a task and schedule it.

Task management

I’ve been through various Task Management systems:, Wunderlist, OneNote. But I am totally in love with and a paid up subscribe of Their Windows app is great and their iPhone app is awesome too. I forward emails on to various lists I have configured and it plans out my day to day task list perfectly.

How do you manage your inbox and tasks?

New SharePoint CSOM version released for Office 365

[Cross posted from my mate Vesa]

We are happy to announced availability of new SharePoint CSOM package version for the Office 365. This release is done now using a NuGet package release. You can find the latest CSOM package for the cloud from the NuGet gallery with an id of ‘Microsoft.SharePointOnline.CSOM’. We will also update the redistributable package in upcoming weeks, but you can already right now get access on the updated CSOM for your solutions.

Notice that the version for these assemblies is 16.1.3912.1204, so that they do not overlap with the redistributable package, which will continue using 16.0.x.x style versioning. This way updated assemblies added to the NuGet packages will be used by your applications regardless if you had also installed the redistributable package. We are also planning push more frequent updates with the NuGet package in the future. When you use the NuGet package, you will always get the latest versions for you in your app. We have also included these assemblies to the assembly folder of Office 365 Developer Patterns and Practices, where you can always find latest CSOM assemblies for on-premises and cloud (currently in Dev branch and will be merged to master in May release).  We do however recommend using the nuget packages, rather than referencing these assemblies where possible.

Key updates with the assemblies

Here’s the key changes in the released assemblies. Main changes are related on level up with the on-premises CSOM which has been gradually updated during previous CUs.

  • Manage regional settings of a site
  • Manage language settings of a site
  • Manage auditing settings of a site
  • Control advance settings for document sets
  • Support for upcoming enhanced migration APIs
  • Control sandbox solution settings in site collection level
  • Secondary contact in site collection level
  • Sharing settings

We have not yet updated our Office 365 Developer Patterns and Practices samples, but the API usage is demonstrated with the samples which were originally developed for on-premises. These will be updated with the latest cloud CSOM in upcoming days now that the updated CSOM assemblies are available for broader usage.


How to get started with the nugget package?

Let’s do this step by step, so that there’s no doubts.

1. Start up Visual studio and Choose the project type you want to use. In below example we will use console application.


2. Right click project properties and choose Manage NuGet Packages…


3. Search for “SharePoint Online Client Side Object Model” or “Microsoft.SharePointOnline.CSOM”

  • Notice the Created by and version information for the package.


4. Click Install for the package so that it will be installed on the VS project.

  • You can alternatively open up Nuget Package Manager and execute following line: “Install-Package Microsoft.SharePointOnline.CSOM -Version 16.1.3912.1204

5. Verify that the references of the project has been changed


6. You are ready to get started with your code. Here’s just simple code snippet to get access to Office 365, which you could add to your console application to test that everything works accordingly. You will obviously have to change the connectivity details accordingly to align with your own tenant.


Full list of changes in this release

Here’s the full list of changes in different assemblies compared to the previously released CSOM version. We will release samples in the Office 365 Developer Patterns and Practices for these gradually and are absolutely also open for contributions from the field for samples, which demonstrate these new APIs.

Those members which have existed before, but have been now changed are marked with *-character. These are the regional settings related properties which now support also updating those properties in site. We also do absolutely understand that this is not the best method or format to share the latest changes and we are working internally for better process with future releases. We did not also want to delay release notes on this, since we know that many from community have been waiting for these new APIs.


Here’s list of properties and new classes from the Microsoft.SharePoint.Client assembly.

  • public property Microsoft.SharePoint.ApplicationPages. ClientPickerQuery.ClientPeoplePickerQueryParameters.AllowOnlyEmailAddresses
  • public method Microsoft.SharePoint.Client.AppCatalog.GetAppDetails()
  • public method Microsoft.SharePoint.Client.AppCatalog.GetAppInstance()
  • public method Microsoft.SharePoint.Client.AppCatalog.GetAppPermissionDescriptions()
  • public property Microsoft.SharePoint.Client.AppInstance.ProductId


  • public class Microsoft.SharePoint.Client.Audit
  • public enum Microsoft.SharePoint.Client.AuditMaskType
  • public class Microsoft.SharePoint.Client.AuditPropertyNames


  • public property Microsoft.SharePoint.Client.CreatablesInfo.CanCreateFolders
  • public property Microsoft.SharePoint.Client.CreatablesInfo.CanUploadFiles
  • public class Microsoft.SharePoint.Client.DlpPolicyTip


  • public method Microsoft.SharePoint.Client.File.ExecuteCobaltRequest
  • public method Microsoft.SharePoint.Client.File.GetImagePreviewUrl
  • public property Microsoft.SharePoint.Client.Folder.Exists
  • public property Microsoft.SharePoint.Client.Folder.IsWOPIEnabled
  • public property Microsoft.SharePoint.Client.Folder.ProgID


  • public class Microsoft.SharePoint.Client.IngestionTaskKey


  • public property Microsoft.SharePoint.Client.List.CrawlNonDefaultViews
  • public method Microsoft.SharePoint.Client.List.CreateDocumentFromTemplateStream
  • public property Microsoft.SharePoint.Client.List.FileSavePostProcessingEnabled
  • public method Microsoft.SharePoint.Client.List.GetSpecialFolderUrl
  • public method Microsoft.SharePoint.Client.List.GetWebDavUrl
  • public property Microsoft.SharePoint.Client.List.MajorVersionLimit
  • public property Microsoft.SharePoint.Client.List.MajorWithMinorVersionsLimit
  • public property Microsoft.SharePoint.Client.List.ParserDisabled
  • public property Microsoft.SharePoint.Client.ListItem.Client_Title
  • public property Microsoft.SharePoint.Client.ListItem.GetDlpPolicyTip
  • public method Microsoft.SharePoint.Client.ListItem.OverridePolicyTip


  • public property Microsoft.SharePoint.Client.MountedFolderInfo.HasEditPermission
  • public property Microsoft.SharePoint.Client.MountedFolderInfo.ItemId
  • public property Microsoft.SharePoint.Client.MountedFolderInfo.ListTemplateType
  • public property Microsoft.SharePoint.Client.MountedFolderInfo.ListViewUrl
  • public property Microsoft.SharePoint.Client.MountedFolderInfo.WebUrl
  • public class Microsoft.SharePoint.Client.MoveCopyUtil


  • public property Microsoft.SharePoint.Client.ObjectSharingInformation.CanBeShared
  • public property Microsoft.SharePoint.Client.ObjectSharingInformation.CanBeUnshared
  • public method Microsoft.SharePoint.Client. ObjectSharingInformation.CanCurrentUserShareRemote
  • public method Microsoft.SharePoint.Client. ObjectSharingInformation.GetObjectSharingInformationByUrl
  • public property Microsoft.SharePoint.Client. ObjectSharingInformation.SharedWithUsersCollection
  • public property Microsoft.SharePoint.Client. ObjectSharingInformationUser.IsDomainGroup
  • public class Microsoft.SharePoint.Client.ObjectSharingInformationUserCollection
  • public class Microsoft.SharePoint.Client.ObjectSharingSettings
  • public class Microsoft.SharePoint.Client.PickerSettings


  • public property Microsoft.SharePoint.Client.RegionalSettings.AdjustHijriDays *
  • public property Microsoft.SharePoint.Client.RegionalSettings.AlternateCalendarType *
  • public property Microsoft.SharePoint.Client.RegionalSettings.CalendarType *
  • public property Microsoft.SharePoint.Client.RegionalSettings.CalendarType *
  • public property Microsoft.SharePoint.Client.RegionalSettings.Collation *
  • public property Microsoft.SharePoint.Client.RegionalSettings.FirstDayOfWeek *
  • public property Microsoft.SharePoint.Client.RegionalSettings.FirstWeekOfYear *
  • public property Microsoft.SharePoint.Client.RegionalSettings.LocaleId *
  • public property Microsoft.SharePoint.Client.RegionalSettings.ShowWeeks *
  • public property Microsoft.SharePoint.Client.RegionalSettings.Time24 *
  • public property Microsoft.SharePoint.Client.RegionalSettings.TimeZone *
  • public property Microsoft.SharePoint.Client.RegionalSettings.WorkDayEndHour *
  • public property Microsoft.SharePoint.Client.RegionalSettings.WorkDays *
  • public property Microsoft.SharePoint.Client.RegionalSettings.WorkDayStartHour *
  • public method Microsoft.SharePoint.Client.RegionalSettings.GetGlobalTimeZones *
  • public method Microsoft.SharePoint.Client.RegionalSettings.Update *


  • public property Microsoft.SharePoint.Client.RemoteWeb.CanSendEmail
  • public method Microsoft.SharePoint.Client.RemoteWeb.GetFolderByServerRelativeUrl
  • public method Microsoft.SharePoint.Client.RemoteWeb.GetGroupById
  • public method Microsoft.SharePoint.Client.RemoteWeb.GetListByServerRelativeUrl
  • public property Microsoft.SharePoint.Client.RemoteWeb.ShareByEmailEnabled
  • public property Microsoft.SharePoint.Client.RemoteWeb.ShareByLinkEnabled


  • public method Microsoft.SharePoint.Client.RequestContext.GetRemoteContext
  • public property Microsoft.SharePoint.Client.RequestContext.List
  • public class Microsoft.SharePoint.Client.SharePointSharingSettings
  • public class Microsoft.SharePoint.Client.SharingResult
  • public class Microsoft.SharePoint.Client.SharingUserCollection


  • public property Microsoft.SharePoint.Client.Site.Audit
  • public property Microsoft.SharePoint.Client.Site.AuditLogTrimmingRetention
  • public method Microsoft.SharePoint.Client.Site.CreateMigrationIngestionJob
  • public method Microsoft.SharePoint.Client.Site.CreateMigrationJob
  • public method Microsoft.SharePoint.Client.Site.DeleteMigrationJob
  • public method Microsoft.SharePoint.Client.Site.GetMigrationJobStatus
  • public property Microsoft.SharePoint.Client.Site.SandboxedCodeActivationCapability
  • public property Microsoft.SharePoint.Client.Site.SecondaryContact
  • public property Microsoft.SharePoint.Client.Site.TrimAuditLog


  • public class Microsoft.SharePoint.Client.SPInvitationCreationResult
  • public class Microsoft.SharePoint.Client.TenantAppInstance
  • public method Microsoft.SharePoint.Client.TenantAppUtility.GetAppDetails
  • public method Microsoft.SharePoint.Client.TenantAppUtility.GetAppPermissionDescriptions
  • public method Microsoft.SharePoint.Client.TenantAppUtility.GetTenantAppInstance


  • public method Microsoft.SharePoint.Client.Web.AddSupportedUILanguage
  • public method Microsoft.SharePoint.Client.Web.CreateAnonymousLink
  • public method Microsoft.SharePoint.Client.Web.CreateAnonymousLinkWithExpiration
  • public method Microsoft.SharePoint.Client.Web.DeleteAllAnonymousLinksForObject
  • public method Microsoft.SharePoint.Client.Web.DeleteAnonymousLinkForObject
  • public method Microsoft.SharePoint.Client.Web.ForwardObjectLink
  • public method Microsoft.SharePoint.Client.Web.GetFileByLinkingUrl
  • public method Microsoft.SharePoint.Client.Web.GetObjectSharingSettings
  • public method Microsoft.SharePoint.Client.Web.IncrementSiteClientTag
  • public property Microsoft.SharePoint.Client.Web.IsMultilingual
  • public property Microsoft.SharePoint.Client.Web.OverwriteTranslationsOnChange
  • public method Microsoft.SharePoint.Client.Web.RemoveSupportedUILanguage
  • public method Microsoft.SharePoint.Client.Web.ShareObject
  • public property Microsoft.SharePoint.Client.Web.ThirdPartyMdmEnabled
  • public method Microsoft.SharePoint.Client.Web.UnshareObject


  • public property Microsoft.SharePoint.Client.Sharing.UserSharingResult.DisplayName
  • public property Microsoft.SharePoint.Client.Sharing.UserSharingResult.Email


  • public class Microsoft.SharePoint.Packaging.AppDetails
  • public class Microsoft.SharePoint.WebControls.ModuleLink
  • public class Microsoft.SharePoint.WebControls.ResourceManifestInformation



Here’s list of properties and new classes from the Microsoft.SharePoint.Client.Publishing assembly.

  • public property Microsoft.SharePoint.Client.Publishing. ImageRendition.Group


  • public property Microsoft.SharePoint.Client.Publishing. SpotlightChannel.TileHtmlColor
  • public property Microsoft.SharePoint.Client.Publishing. SpotlightChannel.Title
  • public property Microsoft.SharePoint.Client.Publishing. SpotlightChannel.VideoLibraryServerRelativeUrl
  • public property Microsoft.SharePoint.Client.Publishing. SpotlightVideo.Url


  • public property Microsoft.SharePoint.Client.Publishing. VideoItem.OwnerName
  • public property Microsoft.SharePoint.Client.Publishing. VideoItem.PlayerPageUrl
  • public property Microsoft.SharePoint.Client.Publishing. VideoItem.Url



Here’s list of properties and new classes from the Microsoft.SharePoint.Client.Search assembly.

  • public class Microsoft.Office.Server.Search. Encryption.CertificateService
  • public class Microsoft.SharePoint.Client.Search. Administration.PushTenantServiceInfo
  • public class Microsoft.SharePoint.Client.Search. AzureBroker.PushTenantManager
  • public class Microsoft.SharePoint.Client.Search. ContentPush.CertificateService
  • public class Microsoft.SharePoint.Client.Search. ContentPush.PushTenantManager
  • public class Microsoft.SharePoint.Client.Search. ContentPush.PushTenantServiceInfo
  • public property Microsoft.SharePoint.Client.Search. Query.KeywordQuery.TimeZoneId



Here’s list of properties and new classes from the Microsoft.SharePoint.Client.UserProfiles assembly.

  • public property Microsoft.SharePoint.Client.UserProfiles. FollowedItem.IsHybrid
  • public method Microsoft.SharePoint.Client.UserProfiles. UserProfile.CreatePersonalSiteSyncFromWorkItem



Here’s list of properties and new classes from the Microsoft.SharePoint.Client.DocumentManagement assembly.

  • public class Microsoft.SharePoint.Client.DocumentSet.AllowedContentTypeCollection
  • public class Microsoft.SharePoint.Client.DocumentSet.DefaultDocument
  • public class Microsoft.SharePoint.Client.DocumentSet.DefaultDocumentCollection
  • public class Microsoft.SharePoint.Client.DocumentSet.DefaultDocumentPropertyNames
  • public class Microsoft.SharePoint.Client.DocumentSet.DocumentSetTemplate
  • public class Microsoft.SharePoint.Client.DocumentSet.DocumentSetTemplateObjectPropertyNames
  • public class Microsoft.SharePoint.Client.DocumentSet.SharedFieldCollection
  • public class Microsoft.SharePoint.Client.DocumentSet.WelcomePageFieldCollection



Here’s list of properties and new classes from the Microsoft.SharePoint.Client.Tenant assembly.

  • public class Microsoft.Online.SharePoint.SPLogger.LogExport
  • public class Microsoft.Online.SharePoint.SPLogger.LogFileInfo
  • public enum Microsoft.Online.SharePoint.TenantAdministration. SandboxedCodeActivationCapabilities
  • public property Microsoft.Online.SharePoint.TenantAdministration. SiteProperties.SandboxedCodeActivationCapability
  • public property Microsoft.Online.SharePoint.TenantAdministration. Tenant.AllowedDomainListForSyncClient
  • public property Microsoft.Online.SharePoint.TenantAdministration. Tenant.IsUnmanagedSyncClientForTenantRestricted
  • public property Microsoft.Online.SharePoint.TenantAdministration. Tenant.IsUnmanagedSyncClientRestrictionFlightEnabled
  • public property Microsoft.Online.SharePoint.TenantAdministration. Tenant.ShowAllUsersClaim
  • public property Microsoft.Online.SharePoint.TenantAdministration. Tenant.ShowEveryoneClaim
  • public property Microsoft.Online.SharePoint.TenantManagement. Office365Tenant.AllowedDomainListForSyncClient
  • public property Microsoft.Online.SharePoint.TenantManagement. Office365Tenant.IsUnmanagedSyncClientForTenantRestricted
  • public property Microsoft.Online.SharePoint.TenantManagement. Office365Tenant.IsUnmanagedSyncClientRestrictionFlightEnabled
  • public property Microsoft.Online.SharePoint.TenantManagement. Office365Tenant.ShowAllUsersClaim
  • public property Microsoft.Online.SharePoint.TenantManagement. Office365Tenant.ShowEveryoneClaim


You need additional APIs in CSOM?

imageIf you have any specific needs for the APIs you need, please let us know using User Voice in below address. We will address these requests and feedback where we can.

Please be patience on the requests, we will address those APIs which we can as fast as possible, but we do not have infinite resources, so we cannot provide any schedules related on the timing for addressing the feedback. Your input will be still highly appreciated and highly valuable for us to align the resources on the most needed capabilities.

Office 365 Developer Patterns and Practices

Office365PnPLogoRed_thumb1We will provide updated samples and scenarios based on these APIs in the Office 365 Developer Patterns and Practices guidance, which contains already more than 100 samples and solutions demonstrating different patterns and practices related on the app model development together with additional documentation related on the app model techniques.

Check the latest updates in our program from Please join us on sharing patterns and practices for the community for the benefit of the community.

“From the community for the community” – “Sharing is caring” has moved homes

You may have noticed a little change at First off I wanted to say a huge thank you to FPWeb for providing FREE hosting for this web site running on a SharePoint Server 2010 Farm for the last few years. The community has benefited tremendously from the wealth of information shared by the community headed up by myself (Jeremy Thake @jthake), Mark Miller @eusp and Natasha Felshman @teameusp. I would also like to thank all of our sponsors over the years that have helped to pay for expenses to keep the site running and the editorial effort running, without the sponsors this site wouldn’t be what it is today.

I have spent quite a bit of my own personal time writing up a migration script to get the content out of SharePoint Server 2010 Publishing Site lists and libraries into WordPress. I’ve used all the tricks in the book to get ALL of the content over including all the comments, images, authors and categories.

As you are probably aware, I have moved to Seattle to take a role as a Senior Product Marketing Manager role in the Office 365 Developer team. I wrote a post on this back in March when I joined. I would encourage you to go see what our team has been up to at I would just like to say a personal thank you to everyone involved in the community, I wouldn’t have been able to achieve my dream of working for Microsoft without all your support and help over the years!
Mark has also been busy forming a new community around the Nexus product.  You can check out what Mark has been doing over at the Sonatype blog. No doubt that community will benefit immensely from his passion for building strong collaboration across the globe like he did with and then

Rather than let the content disappear off the Internet when the SharePoint Server’s were switched off, I thought it was important to keep things going and accessible. I’ve already had quite a few questions over the last few months around the future of the site.
The site has over 160,000 page views a month purely through search driven referrals. There has been no content updates on the site since November 2013, but if there are people who want to contribute to this site I am more than happy to open the doors again.
The web site is currently hosted on my personal Azure tenant. I am not looking to make this a commercial site and will only source sponsorship to keep the lights on. Truthfully, I have no idea what it’ll cost to run WordPress on Azure Web Sites and Azure SQL with the audience it has.

If people are interested in contributing, I will be looking for some volunteers to act as editors for content in the End User, Developer and IT Pro spaces respectively. I am also looking for someone with some Photoshop skills to skin this site from the default theme with a nice top banner.

So, feel free to chime in below in the comments and lets see what we can rustle up!

My own thoughts on the Office 365 developer vision

It’s been an extremely busy few weeks for me, and everyone at Microsoft, working on Office 365 developer extensibility. We made some very big announcements around: building Office everywhere, connecting to our APIs and building on an open platform. Personally for me, this was my first major launch. I joined weeks after the SharePoint Conference 2014, where our team made some other major announcements like the Office 365 APIs Preview.

To summarize, the announcements this week are:

We had presentations to explain what was new at TechEd Europe 2014 in Barcelona, which are available on demand at The kick-off session also included some bits on our Vision too where we demoed the Microsoft Graph, extending Office for the iPad and hover cards in Outlook. I also recorded a podcast with Brian Jones, Group Program Manager for Office Developer Program (ODP), which you can listen to right now. We also have over 30 hours of FREE on-demand training and accompanying hands on labs available at already.

It’s been really exciting to see the pick up on this with a variety of technology outlets writing about the news like: Apple Insider, eWeek, etc. I’m really looking forward to the developer community getting their hands on the new APIs and extending the My Apps page. There have already been a bunch of questions on Twitter, StackOverflow and Yammer around the news. I figured I’d respond to a few of these here as I fly back from Austin to Seattle after a great weekend of race cars at the Formula 1 😉

Is this yet ANOTHER App Model with My Apps extensibility?

This was actually the first question I got after we revealed this in the Developer Foundational session where I demoed this with Jay Schmelzer, Partner Director of Visual Studio, on day 1 at TechEd. Extending the My Apps page requires you to register an Azure Active Directory Application in the Microsoft Azure Management Portal. You simply define the web site address that clicking on the icon on the My App page directs you to after an authentication flow occurs and grab the client id and secret the page gives you and use that to make calls back to the API. This is very similar to the flow for the SharePoint Hosted and Provider Hosted app model, where the icons land on the Site Contents page of a SharePoint Site. The main difference is that the SharePoint app model uses Azure Access Control Services (ACS) auth flow, which are registered via appregnew.aspx. The engineering teams are working on converging the auth flow used by both and we’ll have stuff to show in the coming months.

The way to look at it as a developer is that you can extend at the: Office level; SharePoint level; or Organization wide. There were many scenarios where developers were using SharePoint Provider Hosted apps and deploying them to a Site Collection just to get the auth flow hooks even though it didn’t leverage the parent SharePoint site at all. Some organizations even deployed the same app to every site collection for discoverability. Essentially now you could just adjust the web site to make these appear in the My Apps page. I also believe that some business solutions will have a combination of every approach: Office, Site and Organization wide.

Can I call SharePoint CSOM/REST APIs using Azure AD auth flow?

In actual fact, you can also call the SharePoint CSOM/REST APIs by posting the same Azure AD access token, as long as when you register your Active Directory Application you request for permission to SharePoint Online. The new Office 365 Files API that connects to SharePoint Online, only works against Document Libraries so there is still a need to use the SharePoint CSOM/REST APIs to connect to SharePoint Lists, Workflow, Managed Metadata, BCS, Search etc.

Can I get an app-only token with Azure Active Directory auth flow?

One of the neat bits about Apps for SharePoint is that you could request different types of auth flow: user; user and app; or app-only. This allowed my app to interact with the parent SharePoint site and where it created things in document libraries or lists, the auditing would show the app had modified it and NOT the user. Azure Active Directory auth flow does not support app-only at this time.

Can I use the Office 365 APIs with an elevated user account in my web sites?

For many ISVs this scenario is very common, for instance those ISVs building back up and recovery solutions where they have to use an elevated administrator account that has access to everything. The purpose of the Office 365 APIs is really from a “me” use case, as indicated by our RESTful endpoint URLs. These APIs are not intended to use elevated or impersonated credentials at all. If a user is accessing your web site and the web site is calling the Office 365 APIs, it will only have access to their own Mail, Calendar, Contacts regardless of whether that user is a tenant admin or not. The exception to this rule is SharePoint Online, where you can request “Full Control” of all SharePoint Site Collections that the user has full control over. For these elevated scenarios the existing Exchange EWS API and SharePoint CSOM/REST APIs should be used.

Can we submit to the Office Store extensions for the My Apps page?

The team is actively working on the ability to support not only Office level and SharePoint level apps but also My Apps extensibility in the Office Store. Right now, the only way for you as an ISV to land in customers tenants is through:

  • Dedicated – providing them with your web site to host and getting them to manually create the Azure AD application and drop in the client id and secret into the web.config of the web site; or
  • Multi-tenant – configure your Azure AD application to be multi-tenant and point them at your web site and go through the consent flow. This was actually demoed in the kick off where we showed both SmartSheets and Xero acquisition process.


The announcements this week were really to enable web developers to extend the My Apps page and to call the Office 365 APIs. In the old world of 3 year releases, we would have shipped this with the whole story completed, but with milestone releases every 6 months and continued improvements every month we have taken a different approach. We do know that web developers will use these APIs against Office and Site level right now. So below are a few common questions we are hearing already:

Should I use Office 365 APIs or continue to use SharePoint CSOM/REST APIs in Apps for SharePoint?

The main benefit of using Office 365 APIs in Apps for SharePoint would be the fact that once registered you could also call Mail, Calendar, Contacts and User and Groups APIs too. In the future as we add new API endpoints there, for example Office Graph, Yammer, and Lync this will become more compelling.

Apps for SharePoint natively work with Azure ACS auth flow and you can use the access token you receive on launching the app to call the SharePoint CSOM/REST APIs.

The new Office 365 APIs cannot be called by the ACS access tokens. Right now, if you deploy an App for SharePoint that uses the Office 365 APIs, it will not register this in Azure Active Directory Application register so that you can get an AD access token. So, right now you’d have to register this manually in the Azure Management Portal and plug in that client id and secret, therefore having two in there…one for Azure AD auth and one for Azure ACS auth. As mentioned above, there is work being done to converge this.

Should I use Office 365 APIs or continue to use SharePoint CSOM/REST APIs in Apps for Office to talk to SharePoint Online?

There are a lot of scenarios where you extend the Office client and want to call into SharePoint Online or Exchange Online. We’ve had some great samples out there to request on the fly permissions to SharePoint Online using Azure ACS auth flow and registering the application in appregnew.aspx and getting the ACS client id and secret. There were already samples of how to call the Office 365 APIs using Azure Active Directory auth flow and registering the application in Azure Management Portal and getting the AD client id and secret. I would encourage the use of Azure AD auth flow here rather than ACS auth flow moving forward for SharePoint Online scenario due to our focus on Azure AD.

Should I use Office 365 APIs or continue to use Exchange EWS APIs for Exchange Online?

Although the Office 365 APIs gives great coverage of Mail, Calendar, Contacts there are still things that the EWS API has coverage over. So it would make sense to call these from your application. Typically this would require capturing the user name and password to use to call these endpoints directly via REST or using the Exchange Client. One of the main advantages of calling using the access token is reducing the need to store the user name and passwords or even request them off the user. I have blogged previously about how you can call the EWS APIs using the Azure AD access token.

How does the Office Store acquisition flow work for Azure AD applications?

If you are an ISV building an App for Office or Apps for SharePoint that uses the Office 365 APIs, you will need to register your application in Azure Active Directory and mark it as multi-tenant. When the user gets the app from the Office Store, they will prompt the user to “Trust” the app, which grants the app an Azure ACS authorization token. The first use of the app where it calls the Office 365 APIs will result in a user being asked to consent the app, regardless of the fact the user would have already “Trusted” this app from the Office Store. The reason for this is because the “Trust” flow from the Office Store is trusting the app for Azure ACS, not Azure AD. As discussed in our kick off session, there is work being done to streamline this too.


I look forward to sharing more with you in the coming weeks as we get more feedback on all these things!

Top 10 tips for preparing for the shift to the SharePoint app model

Last weekend I went to Branson, MI for SharePointalooza which was organized by Mark Rackely and a bunch of very dedicated community members. I was then at SPTechCon Boston and the same questions came up. Essentially people are seeing all the messaging we are communicating from Redmond around the Office 365 Developer platform and wanting to know how they can prepare now where they are still on SharePoint Server 2007, 2010 and 2013.
The biggest misconception was that the app model only worked in SharePoint Online on Office 365, mainly due to the messaging saying the “cloud app model” when it was first launched. This is not true and the app model does work with SharePoint Server 2013.

Continue reading Top 10 tips for preparing for the shift to the SharePoint app model

Apple’s biggest mistake today was locking the stream down to Safari

I sat at work today, looking forward to watching the keynote by Tim Cook, CEO of Apple Inc.  I was very disappointed to  find out that it was blocked to all browsers except Safari…ie. to iOS and OSX. Apparently this isn’t a new stance. Now I have a MacBook Pro at home which I use all the time for my digital photo editing…but at work I’m running Windows 8.

What was my experience trying to follow the announcements? I followed TechCrunch live blogging notes, which was actually surprisingly good. I also followed along on Twitter, where it was a mixed bag of apple fan boys and apple haters. I did “try” and follow Apples very unstable card like notification page which showed if you didn’t have the stream.

announcementWhich often showed this page:

Throughout the day I followed updates from various tech blogs and peoples opinions on Twitter that were also a very mixed bag of “no innovations” to “this thing is amazing”.

When I got back tonight, I turned on my Apple TV and watched the 2 hour show on my 60″ TV in full HD. My first impression based on my consumption all day was TOTALLY adjusted once I watched the whole thing…regardless of the comments throughout the day.

If you haven’t watched the presentation…I highly recommend you do. Hats off to the Apple crew, they certainly do know how to put on a show and present an amazing set of products! As a marketer at Microsoft, there is a lot to learn from these guys in Cupertino.

It’s a great lesson for Apple to invest the money in the infrastructure to stream the live announcement to everyone…regardless what platform they are using to ensure they control the message.

Here are some things that I thought were very impressive. When I asked the fan boys “what was impressive” they didn’t mention on my Facebook threads so I wasn’t aware:

  • Metal – the game demonstration graphics were very impressive…i’m sure it’s going to kill your battery life, but certainly a big market out there for this. I’m not a big gamer at all so not a killer feature for me.
  • Camera advancements – although its only a 8MP camera, the image resolution is amazing. The photo samples they showed were amazing, as someone who loves photography. I’m not sure how this is technically different from Nokia Lumia 1020 40MP camera, but producing a 40Mb file can’t be bad! I do miss my 1020 camera, now having a giant 1520 phablet.
  • Apple Pay – so the Apple haters were chiming on about NFC being available on Google Wallet for a while now…but in app purchases and the security around this with banks was very impressive.
  • Apple Watch Dial – the dial is extremely natural and very Johnny Ive in being very much like the traditional watch dial.
  • Apple Watch straps – the amount of customizations available also make this a lot more flexible than others on the market.
  • Apple Watch Quick Board – the intelligence in quick replies based on the message that was sent to you was a nice touch for the watch.
  • Apple Watch notifications – all the support from major app vendors is very impressive. Twitter went nuts on opening the hotel room door by waving it in from of W Hotels. Going to be funny if your battery runs out on the device…no details on battery other than “a day charge”.
  • Apple Watch compatibility – the fact it’ll support 5s, 5c and 5 is simply amazing! That’s a lot of existing devices that will support it.
  • Health and Fitness – I was impressed with the depth of the integration. The hype that they just wiped out FitBit etc. is certainly not accurate when the watch “starts at $350”. It’ll certainly hurt the Garmin type products in the same price range.

The one thing that boggles me with smart watches is that it is tied to the phone, much like Google Android Wear. I always saw those Samsung ads where the hand held the smart phone and was twisted to look at the watch face rather than just use the phone! It’ll be interesting to see how people use this form factor. I’m sure it’ll be a lot less awkward than Google Glass!

Apple were serious innovators with the  Apple II, iMac, iPod, iPhone and iPad. Apple may not always be the first to market these days, but being first isn’t always the best (Microsoft SPOT watches). You can see with the watch they’ve really thought about this.

I’m guessing they’ll be some comments on this post…what were your most impressive features? and for those Apple Haters….be nice 😉

Top 5 things I’ve learnt in 5 months at Microsoft

“Time flies when you are having fun” Anon

Just sitting on the sofa tonight and looking back at the calendar its nearly the end of August and I started at Microsoft March 31st, nearly 5 months ago.

I think anyone who joins Microsoft corp without working in the field is going to have a unique experience in their first year. Microsoft as a company is also going through changes with the Mobile First, Cloud First directive from the new CEO, Satya Nadella, who joined in February. The division I’m in as a Technical Product Manager, Office 365, is also going through significant change by moving a extremely successful “box product” with a 3 year cycle to a subscription service.

Continue reading Top 5 things I’ve learnt in 5 months at Microsoft

Using the Exchange Online EWS API with Office 365 API via Azure AD

In my normal day to day job in the Office 365 Developer technical product management team I’ve been doing more and more work with the new Office 365 APIs that call into Exchange Online, SharePoint Online, and OneDrive for Business and use Azure AD for auth flow. These new end points are all OData 4 and very much focused around the mobile device application and standalone web application “me” space…e..g as the logged in user accessing services related to that user. There is plenty of information on (our nice shiny new one!) on these APIs and I’ve also shipped a podcast (I do these weekly so please check them out!).

Continue reading Using the Exchange Online EWS API with Office 365 API via Azure AD

August catch up on Office 365 Development news

It’s been a busy few months for our Technical Product Management team, in Building 1 in Redmond, focusing on Office 365 Development. It’s month four for me personally in the team and reflecting back it’s been a great ride! it has been a really exciting time working with the team with our core focuses: Chris Johnson leading the team and driving our vision with management; Sonya Koptyev focusing on the Information Worker developers and the new; Dave Pae focusing on our ISV NDA program and DX (formerly DPE) cross-over including Dev Camps; Jim Epes working on the Office Store; and myself on the new content for ramping up developers and Microsoft event track ownership. Naturally we all have lots of other stuff we work on each day to keep us all busy of course!

Continue reading August catch up on Office 365 Development news

Come say hi at SharePointalooza Sep 12th and 13th Branson, Missouri

I’m going to be speaking at SharePointalooza next month and would love to meet you guys there too…sounds like its quite the party as well as full of great sessions around Office 365 content. So what are you waiting for???

And now to the marketing fluff…


SharePointalooza is less than two months away! SharePointalooza is a TWO DAY conference offering sessions and technical workshops on all things SharePoint, Office 365, and Yammer.  SharePointalooza takes place at Branson Landing in Branson, Missouri on September 12th and 13th.

Please allow us to take a few minutes to explain to you why you  should consider attending SharePointalooza.

PRICE – Most multi day SharePoint conferences cost at least $1000 in registration fees. Our registration starts at just $30. In addition, We worked out special rates with the Hilton Convention Center to offer a discounted rate of $139 per night. Other hotels in the area cost as little as $39.99 per night making SharePointalooza the most economical choice for your training dollars while bringing you the highest quality content.  SharePointalooza is a NOT for profit event and every dollar goes towards giving you a world class experience. However, we understand that money can be an issue, that’s why we are proud to offer FREE registration to those that need it. If you would like free general registration, just enter the code “SPSOZARKS” on the registration page:


OUR SPEAKERS – To put it simply, you will not have another chance to see this group of SharePoint/Office 365 experts in this type of intimate setting. We are truly blessed to be hosting the greatest experts in SharePoint and Office 365. You will not find a more world class list of speakers anywhere else.  These awesome SharePoint MVP’s and talented speakers from all over the world are coming down to support the community and have a great time.  We cannot stress enough how much we’re truly humbled by their experience and skill. This alone sets SharePointalooza apart.

WORKSHOPS– In addition to standard sessions we also offer more in-depth workshops that you will simply not find at other conferences.

LOCATION, LOCATION, LOCATION – The event is being held at a great location in Branson at a world class convention center. Directly across the street is Branson Landing which boasts of many shops and restaurants.

LIVE MUSIC – We’ve found some amazing bands from Chicago and Nashville and we are bringing them in to play on an awesome outdoor stage at night to give the attendees and speakers a chance to unwind after a day of learning.

SUPPORT – By attending SharePointalooza you are supporting efforts to continue to bring high quality technical conferences to the area. Without your attendance and support these events are not possible.

Registration is open! Register today at

and we’ll see you soon!

For more information and a list of sessions check our out website at

The SharePointalooza Organization Committee

Using the SharePoint CSOM and REST API with Office 365 API via Azure AD

It’s been really exciting to see ISV’s and the community start playing with the new Office 365 APIs. I’ve presented on these at TechEd North America with Thorsten Hans in the SharePoint Power Hour session.

In a nutshell, the Office 365 Developer platform has: the App Model to surface up your business solutions directly within the user interface of the products; and then the Office 365 APIs for you to consume our services from your own standalone web applications or device apps.

Continue reading Using the SharePoint CSOM and REST API with Office 365 API via Azure AD

Office 365 Developer Podcast rolling…

I’ve been busy getting a new Office 365 Developer Podcast started over on our Office 365 Blogs.

It’s been a very successful two weeks with our first how where I talk to my immediate team mates (Chris Johnson, Sonya Koptyev minus Dave Pae who was away at a conference). Check it out here .

The second show was with Radi Atanassov and we discussed in depth the OAuth flows in Apps for SharePoint. It’s a must listen for all Office 365 developers out there. Check it out here .

Next week I have Bill Ayers talking about the journey SharePoint developers have had moving from a managed code World over to a hybrid one that includes much more JavaScript. In two weeks it is a recording of a panel of amazing peeps from the European SharePoint Conference in Barcelona around the App Model.

I’m trying to encourage some good discussion around the Podcast at the Office 365 Technical Network Yammer Group. So please hop on over and ask your questions and give your feedback. What do you want to hear about? Got something to say and want to get on the show? Check it out here


How the Office 365 Developer community can work with us

I’m currently in week number 10 at Microsoft, working as a Senior Product Manager in the Office 365 Division focusing on the Professional Developer Audience.
For those who’ve followed me prior, I was an architect in the Product Management division at AvePoint Inc for three years and a SharePoint Development Consultant in Australia since around 2006. Before joining Microsoft, I was also recognized as a SharePoint MVP for my work in the community mainly around my blogging, speaking at conferences, social engagement and open source contributions.
The reason I point this out, is that I’ve been in your shoes…not being behind the curtain and trying to find answers whatever way I can. Google/Bing was, and still is, my best friend when it comes to finding my answers! Most of these come from the MSDN Library, Blogs and StackOverflow.

Continue reading How the Office 365 Developer community can work with us

Office 365 Developer YamJam 6th June 9am PDT

The Developer YamJam is almost here! Join our team at Microsoft from 9:00am-10:00am PDT, (UTC -7) Friday, June 6th in the Developer YamJam group. This is a great opportunity to connect directly with Microsoft engineering and get your questions answered.

To participate:

1. Join the Developer YamJam group.

2. Read the Developer YamJam Flow & Etiquette Note that is pinned to the sidebar BEFORE posting.

3. You can post questions separately before the YamJam begins. The TOP 3 questions (judged by “Likes”) posted BEFORE the YamJam begins will be answered.

4. Come back to the group this Friday at 9am PDT to take part in the live Q&A.

Hope to see you there!

My TechEd NA 2014 Sessions available to watch

I’ve just returned from TechEd North American in Houston and already the sessions are available over at Channel 9. I had three sessions last week on Office 365 development which you can check out here:

SharePoint Power Hour with Thorsten Hans

Deep Dive into Developing Advanced Microsoft SharePoint Applications Using Third-Party JavaScript Libraries

Setting Up Your On-Premises Environment for App Development with Fabian Williams

I was also the track owner for Office 365 Development and there were some amazing sessions that you can also check out here too.

European SharePoint Conference 2014 Slides

It was great to speak at the European SharePoint Conference this week in Barcelona. I have embedded my slides here from both of them.



SP24 AngularJS and Apps for SharePoint Presentation & Code Samples

Thanks to everyone that attended my #SP24 session today. I was super impressed by the online turnout and the amount of quality speakers and sessions that occurred over the 24 hour period. The organized certainly looked a little tired 20 hours in when my session started…truly dedicated souls!

Continue reading SP24 AngularJS and Apps for SharePoint Presentation & Code Samples