Author Archives: Cameron Dwyer
I attended my first Office Developer Bootcamp on Friday last week. I wasn’t 100% sure of what to expect and had a little extra pressure as I was also presenting on Office Add-in development and assisting with the labs.
I ended up having a really fun day. Lots of great conversations had during the bootcamp at Microsoft office at North Ryde. I was a little surprised that the questions weren’t all technical and I fielded a few questions more related to the business side of commercialising add-ins. Thanks to all those that attended and to the great people behind organising the day (Ashish, Amr, John)
Here’s my slide deck from the ‘Developing Office Add-ins‘ talk.
Thanks for everyone that came along to the Sydney SharePoint User Group this month. It was great to be able to deliver so much exciting SharePoint news following all the announcement made at Microsoft Ignite. Given Microsoft Ignite now covers far more than just SharePoint it takes a while to distil the SharePoint specific announcements from over 700 sessions that were presented over 5 days at Microsoft’s biggest conference of the year.
I’ve kept the presentation to just the User/IT Pro announcements (sorry developers I couldn’t fit all the news into a 1 hr presentation!)
Feel free to take this presentation and use it for your own user groups or internal within organisations.
As the dust settles on Microsoft Ignite for another year I’m left going back over my notes and recalling discussions I had for all those key announcements, advice and snippets of gold that will have a real impact for Office developers.
If you are looking for a high level list of announcements made at the conference, the Ignite Book of News is a good place to start although it doesn’t cover many of the announcements that were made in the Office Developer area – this book covers a lot of the Azure announcements, which most Office developers will have a mild interest in (we have to host our code somewhere!)
Here’s some of my favourite announcements:
- Call Microsoft Graph and Web APIs and deploy Extensions across your SharePoint sites
- Deploy your web parts and application pages to Microsoft Teams
- Connect across components with dynamic data capabilities
- Deliver complete applications with application pages
- Harness more of SharePoint with new Microsoft Graph APIs
- Managed access to Microsoft Graph (data connect to bulk export to Azure subscription)
- Notifications API
- Dynamics is now in Microsoft Graph
- New PowerApps templates
- Security API
- Microsoft Teams, Messages, Calendars, Files, and Folders
- In preview but suitable for production use
- Capable of reaching both v1 and v2 services
I thought this years conference was very well run and the volume of people moving about the conference centre wasn’t overwhelming. I had a lot of fun meeting new people and reconnecting with old friends. It’s great to have such knowledgeable Microsoft staff accessible on the expo hall floor (both from a Marketing and Engineering side) to discuss particular scenarios, technologies, ad bounce ideas off.
One of the critical components of an Office Add-in is the add-in manifest. This is the xml file that describes how your add-in should be activated when an end user installs and uses it with Office documents and applications. This manifest contains references to URLs where your web application resides and also to other resources for your add-in such as images to show on ribbon buttons and task panes.
Your manifest.xml file is uploaded to a central location where it is made available to users of your add-in (this may be a public location such as AppSource or the Office Store).
When users acquire your add-in a copy of the manifest.xml file is cached onto the host device and is only periodically resynced if the manifest.xml file is subsequently updated in AppSource/Office Store. I have seen this take weeks on some combinations of host products/devices.
You need to be careful if you are modifying your application and the changes involve modifications to the URLs in the manfiest.xml file. Imagine your add-in has been deployed and is in use by many users. The manifest.xml file might look similar to the fragment below (notice the SourceLocation URL on line 13).
That SourceLocation URL (line 13) is the main page of the add-in that gets loaded into the Task Pane when the add-in is launched. Lets imagine you change the structure of this add-in so that the starting page of the app is now https://www.contoso.com/apps/search/index.html
How do you go about deploying the updated manifest file that points to this new URL?
If you update the manifest.xml file with the new URL you then have to go through the AppSource/Office Store submission process to get the new manifest approved. You are far from 100% in control of the approval process so you don’t know when the new manifest will get approved and thus when the new URL will come into effect. So do you need to keep your application running at both the old and the new URL at least until the new manifest is approved? It gets a little worse than that though, it seems the deployment of a manifest change can take weeks to reach “saturation” whereby it had propagated down to all client host product caches and the old manifest is no longer being used. I can’t exactly tell you how long this process takes and if it ever fully reaches “saturation” as I’m still seeing some users hitting my service on a URL in a manifest that was superseded almost 3 months ago!
Rather than keeping your old and new application running side by side, the approach I have taken that works quite nicely is to put in place temporary redirects from any URLs that were present in the old manifest and have changed in the new manifest. I suggest creating these as temporary redirects as you will be able to monitor your traffic over time and know when you have reached saturation and you stop getting users coming in on URLs from old manifests. If you use permanent redirects, this may get cached by the client and next time the client will have done the redirect itself and you will no longer be able to track if the new manifest has been deployed or it’s an old manifest being redirected via a client side cached redirect.
How do you go about implementing temporary redirects? Well this depends on what you’ve developed your website using and how you are hosting it. In my case I am hosting the app as a Web App in Azure, redirects can be configured in the web.config file that is located in the root folder of the Web App.
Below is an example web.config file that would achieve that temporary redirection.
As the Digital Workplace Conference comes to a close for another year I’d like to reflect on what a great event this is for the Office 365 and SharePoint community in Australia and thank the people behind the organisation of the conference, in particular Debbie Ireland and Mark Rhodes.
This year I was fortunate enough to be included in the lineup of amazing speakers, many who had travelled internationally to be here for the event.
My session was on the topic of Office Add-in development and I’d like to thank everyone that attended the session and the passionate people who came to talk to me after the session as well. My slide deck is available here:
I have in the past pondered if conferences are still relevant in the modern era of video training, social media and plethora of information available on the internet. Two days immersed in this conference gives me no doubt that conferences are still a highly valuable medium for education, awareness, training and more importantly direct and open access to experts. It hard to imagine another environment that brings together so many experts that are happy to discuss and understand your scenarios, pains, challenges and success stories and talk through options, past experience and thoughts on the topics.
Personally I was able to meet some awesome people that I follow and have been “virtually” taking advice from for years.
I also had the opportunity to talk to a lot of attendees and love to hear the many varied stories of how organisations are using the technology and where they are looking to go in future.
Here’s some of my photos from the event.
Wonder what a Microsoft 1:1 hackathon looks like? OnePlace Solutions Teams/Graph Engagement Experience
I was fortunate enough to be involved in a 1:1 hack engagement with Microsoft recently where OnePlace Solutions hosted some eager Microsoft engineers for a week long engagement. The intention was to see how we could harness some of Microsoft’s new Teams extensibility options and the Graph API, and for Microsoft to identify limitations or areas for improvement.
The format of the event:
- brainstorming possible ideas ahead of the event itself
- discussion and selection of a few possible ideas
- splitting up into teams and scoping what were would try to achieve within the scope of the hack
- working in a compressed scrum process (daily stand-ups, task refinement and retros)
- present to a wider audience on the last day of the hack to show what had been achieved and the business benefit
It was amazing to see how quickly the Microsoft engineers were absorbed into our development team, brought up to speed with our existing code-base, and starting to deliver functionality.
The real takeaway and reason for writing this article it just to let everyone know what an awesome opportunity these engagements are from Microsoft, a bit of what you can expect and that I highly recommend getting involved if the opportunity arises.
What did I see as the biggest benefits to our business of doing this hack with Microsoft?
The tips, tricks and work pattern knowledge sharing that occurred only comes when you truly try to work together on a project and aren’t just academically sharing knowledge. We all work in different ways and by running the hack almost as a true project (in a condensed form) there is a lot more than just the coding that is being discussed. VSTS, scoping, work item tracking, design white-boarding sessions, daily stand ups, retros, git source control, review of pull requests. All this is outside of the actual coding and using the technology being hacked on, but it is also a critical piece of developing in an efficient, scalable and measurable way.
Accelerated and focused learning on new technologies. The speed of getting across where a technology like Teams extensibility is up to, what’s possible when applying to problems we are trying to solve, and that hard first mile of understanding the frameworks, dependencies, and tooling to get the first hello world skeleton running.
Outside of the technology it’s a great opportunity to meet and build relationships with people who share a similar passion and spend a lot of their time working to solve similar problems. At OnePlace Solutions we are a passionate bunch of technologists that enjoy working in a social and supportive environment – from what I’ve experienced the hack is a perfect match for the way we work, with Microsoft bringing the same mindset, energy and support to the hack. We spent as much time laughing and discussing topics outside of technology as we did on it. At the end of the day we are social creatures and I found the hack was a perfect environment that bought people together with a desire to want to work together on a common goal, to challenge and push each other to do more in a fun and supportive way, and have a good laugh at the same time. Having access to global Microsoft resources to get definitive answers quickly, removed the amount of wasted time and frustration which allowed productivity, enthusiasm and energy levels to remain high.
We dedicate an amount of time each sprint to R&D, which usually involves educating ourselves in what is possible with new technologies and APIs and often going as far as prototyping code to see what’s possible and where the limitations are. It’s hard to imagine a better return on investment than spending this R&D time with Microsoft in the format of a 1:1 hack.
So a huge thank you to the Microsoft engineers, we had a great time and my advice to anyone thinking of getting involved with these engagements is that they can have great value to your team.
I still find styling HTML elements difficult at times, trying to figure out where the styling is being inherited from and exactly which elements I need to apply styles to. The Developer Tools in Chrome go a long way to assisting with this. For this tip I’ll assume you are familiar with Chrome Developer Tools for inspecting HTML elements and CSS styles.
What I wanted to focus on was those frustrating elements that only exist on the page (in the Document Object Model) while a certain element has the “focus”. This often happens with navigation menu options or dropdown controls, where you have the menu options or dropdown options visible on the screen but as soon as you click something in Developer Tools (to go exploring), the menu options or dropdown options disappear and don’t exist on the page anymore! This is usually because an event such as the blur event is fired when you click outside the element and this removes the elements from the page that you are trying to inspect.
This tip might not work in all scenarios but it has gotten me out of trouble on a few occasions.
Here’s an example scenario. On the left side of the screenshots you can see the OnePlaceMail (Outlook Add-in) displayed in Chrome, on the right hand side is Developer Tools inspector window. I’m using a 3rd party control for my “Content Type” dropdown (it’s the Kendo UI for Angular library)
When collapsed it’s easy to inspect the kendo-dropdownlist element (that holds the selected value of ‘Document’. At this stage the menu options that will appear when I click on the dropdown don’t even exist in the DOM.
When I do click to expand the dropdown, the image below shows that a new kendo-popup element appears in the DOM (and it contains sub-elements to represent each of the options). But the problem is if we now try to use the Developer Tools and expand that kendo-popup element to see those sub-elements then the dropdown collapses (because I’ve click off it) and the kendo-popup element is removed from the DOM and we’re left with nothing to inspect!
So to work around this in the Developer Tools inspector, right click on the element that is driving the elements to appear/disappear (kendo-dropdownlist) and select Break on | subtree modifications.
Now go to the web page and click on the dropdown to show the dropdown options. They are shown (elements added to the DOM) but the Developer Tools inspector now goes into a paused state. The web page is effectively frozen.
While in this paused state, you can now return to the elements tab and we can expand and explore that pesky kendo-popup element that was dynamically created. This time however the dropdown won’t collapse itself as we click around in the inspector.
I hope you find this tip useful
Lets start with a little bit of history, the year was 2008, Windows PCs and Microsoft Office had been entrenched throughout organizations around the globe. We saved all our files on a network drive (if we were smart), or SharePoint if we were really smart and had a dedicated engineer that could keep up with patching it. Sales of Apple Mac had been increasing since the turn of the century and Microsoft had built a version of Office specifically for the Mac and had it running there since 1998. The development story for Microsoft Office had almost exclusively been a Windows only experience, it was quite a rich experience with Visual Studio Extensions for Office allowing Office add-ins to be written in managed code. But I see 2008 as a pivotal year, the landscape of IT usage was about to change in a very disruptive way… Apple had just launched the first version of the iPhone.
In the decade since this moment we have seen a shift towards an always connected, productive on any device world. Microsoft Office was changing dramatically to keep pace with the demands of this changing world. Office was already on the Mac, but fast forward to today (2018) and we have:
- Office for Windows – the original and still a powerhouse with all the bells and whistles
- Office for Mac – a very mature product suite that doesn’t lag far behind the Windows offering
- Office Online – any device with a web browser can not only read but also have a rich editing experience
- Office for iOS – native applications for iPhone and iPad
- Office for Android – native applications for Android devices
As you can see in those 10 years a lot had changed, and we don’t even know where our files are physically stored anymore, they are just up there, somewhere, in the Office 365 cloud.
That lead to 2 radical shifts for Office development:
- We have an opportunity we never had before – users data stored in the Office 365 cloud (with a shiny new API to get to it – the Microsoft Graph API)
So when we talk about Office Development we talk about 2 distinct types of development:
- Extending the user experience within the Office applications (i.e. an add-in)
- A standalone application that accesses user data stored in the Office 365 cloud.
Where to from here?
The best starting place within the Microsoft documentation for developing Office add-ins is
and for accessing user data via the Microsoft Graph
Office Dev Center
History of Microsoft Office
History of Visual Studio Tools for Office
History of Office Online
The Insider Dev Tour is such a great event for Microsoft developers, you get the key announcements and latest news that came out of the Build Conference, delivered locally in a more intimate and interactive environment. Best of all it’s a free event put on by Microsoft.
I was very grateful for the opportunity to present two sessions at the Insider Dev Tour in Sydney last week.
- Create Productive Apps with Office 365
- Drive User Engagement Across all your Devices with Microsoft Graph
If you attended I hope you enjoyed the experience as much as I did. The following are links to the resources mentioned during the presentations.