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.
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
Very handy tool that developers and admins can add to their toolbag. Similar to the SharePoint Manager 2010/2013 tool that has been a great resource for many years now. SharePoint Client Browser has the added benefit of supporting different credentials modes, remote SharePoint Sites and handy PowerShell integration.
Finally after 2 months I decided to build the 1.0 version of SharePoint Client Browser and released it to the community! Although the preview (beta) status did not prevent people from downloading it. The counter is currently set at 555 downloads since start of the project on the 2nd of July (only 2 months ago).
CodePlex project and download at https://spcb.codeplex.com/.
So what got changed? I guess almost everything changed from authentication support for default (username and password), SharePoint Online, anonymous and forms based all the way to almost complete coverage of the Client Side Object Model (CSOM). That’s a bit over the top, but the basics for Foundation are in the tool. New capabilities for future releases will focus on Server components like taxonomy.
Remote PowerShell for SharePoint Online and on-premise
A hidden gem is the PowerShell support. It’s very easy to start a PowerShell session and use…
View original post 167 more words
In this article you will learn how to create a custom list definition (not a list instance) using the Visual Studio 2012 visual designer with step-by-step with screenshots.
In Visual Studio 2012 select File | New Project
Select Templates | Visual C# | Office/SharePoint | SharePoint 2013 – Empty Project
If you don’t see this type of project available then you may need to download and install the Microsoft Office Developer Tools for Visual Studio 2012
Provide a name and location for the project/solution and OK
In the SharePoint Customization Wizard Prompt, configure the server to use for developing/debugging. If possible you will want to try and achieve a Sandboxed solution over a Farm Solution due to it’s ability to be able to be reused in more scenarios requiring less permission is the SharePoint environment.
Once the new solution has been created, we can use the new Visual Designer to create the List Definition. Right click the project in the solution explorer and select Add | New Item
Select Visual C# Items | Office/SharePoint | List, provide a name and click OK
Provide a display name for the list. We just want to create a list definition, not an instance of the list; This isn’t an option so what we do instead is go with the “Create a customizable list template and a list instance of it” and we will make some mods to the generated project files to remove the list instance so we are just left with the definition.
You should now see the list instance and definition files in solution explorer.
If you select the SettingsProfile in the solution explorer you will get the new List Visual Designer. Notice the “List” tab, this represents the instance of the list.
Since we only want the list definition, we are going to delete the list instance files from solution explorer. Select SettingProfileInstance, right-click and Delete.
You should now be left with just the list definition, the “List” tab will now be greyed out.
We can now get on with creating the list definition and there are plenty of articles out there on the finer points of doing this. Here are some for reference:
Just for completeness if you are following this through I’ve added a couple of columns to my definition.
Now lets deploy it to SharePoint to make sure it works
Double click the Feature in solution explorer to bring up the feature visual designer and package explorer
Here you can set options such as how the feature appears and it’s scope. For our purposes just confirm the items in the feature include just the list definition files.
Now select the project, right-click and Deploy
Once the solution has been deployed I’m going to navigate to my site in a browser and verify that the new solution has been deployed and the feature activated (by default the solution is deployed and activated, and the feature is scoped at a web level and activated). You should see messages in the Visual Studio status bar to this effect during the deployment.
Everything is now is place for us to create an instance of the list from the definition, so I’ll create a new app and select our Widget Settings Profile app (list definition).
Provide a name for the new list instance based on our custom list definition.
We can now create items in the list and we see our columns coming through that were defined in the custom list definition.
Job complete, in this article we went through creating a list definition using the Visual Studio 2012 SharePoint 2013 List project template. We manually deleted the default list instance files so that we were just left with the list definition in our solution.
How to install a DLL to the GAC on Windows Server 2012 using only PowerShell (without having to install SDK or Visual Studio)
Prior to Windows Server 2012 I had been use to installing DLL files in the Windows Global Assembly Cache (GAC) by either opening the Windows/Assembly folder in Explorer and simply dragging and dropping the file, or by using GacUtil.exe
With Windows Server 2012 unfortunately it’s not quite so easy. Being able to simply open the GAC in Explorer and drag/drop is gone. Also GacUtil.exe is not present on the server by default.
PowerShell to the rescue. Here’s how to register a DLL called “MyDLL.dll” to the GAC (and also how to remove it.
For this example assume we have the “MyDLL.dll” file stored at c:\temp\MyDLL.dll
To add a DLL to the GAC
1. Run the SharePoint PowerShell console as Administrator
2. Enter the following PowerShell
Set-location "c:\temp" [System.Reflection.Assembly]::Load("System.EnterpriseServices, Version=22.214.171.124, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") $publish = New-Object System.EnterpriseServices.Internal.Publish $publish.GacInstall("c:\temp\MyDLL.dll") iisreset
To remove a DLL from the GAC
1. Run the SharePoint PowerShell console as Administrator
2. Enter the following PowerShell
Set-location "c:\temp" [System.Reflection.Assembly]::Load("System.EnterpriseServices, Version=126.96.36.199, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") $publish = New-Object System.EnterpriseServices.Internal.Publish $publish.GacRemove("c:\temp\MyDLL.dll") iisreset
To view information for a DLL
Please refer to this article for how to retrieve more information for a assembly (DLL) using PowerShell including the assembly name, version, culture and public key token.
The following information appeared in an article written by Tom Warren on The Verge:
Microsoft is planning to allow developers to create “Agaves” web extensions to bring third-party functionality to Office clients. Web developers will be able to create an area within an Office application that lets webpages interact with documents and augment content with extra features. The Agaves will be provided through Microsoft’s Office Marketplace, or from private stand-alone Agaves at organizations.
Microsoft’s next-generation of its Office productivity suite, will support the new web extensions throughout a number of its core client apps. Excel 15, Word 15, Outlook 15, and Project Professional 15 will all support Agaves, and Microsoft will also allow Agaves to run on the Excel, Outlook, and Mobile Outlook Web Apps. The software giant is creating three different ways that Agaves can be integrated into Office applications: Task Pane, Content, and Contextual.
A Task Pane Agave will enable Office users to see an extension side-by-side with an Office document, allowing users to look up information from a web service based on a product name highlighted in a document. Content Agaves will allow webpages to become part of a document as embedded content that can be shown in line with documents. Developers could use this functionality to integrate a YouTube video clip or a picture gallery. Contextual Agaves will work on the Outlook side of Office and allow developers to display content with a particular mail or calendar item.
From a development perspective we were able to achieve some really nice integration with Outlook UI as part of this release. One of the highlights was the Recent Locations tracking and exposing this in the Outlook navigation pane. As you save emails/attachments using OnePlaceMail those locations are exposed as Recent Locations in the Outlook as shown below:
Clicking on these Recent Locations then provides you to see the SharePoint Location content directly within Outlook.
The challenge we faced in the development of this functionality was in determining the sort order of folders in Outlook 2010. For the Recent Locations functionality we would need the most recent folder at the top and for the folders to be in the order of when they were last used. Folders sort alphabetically in Outlook and in previous releases it has been possible to customize the sort order of the folders (MAPI code). Outlook 2010 removed the ability to customize the sort order using the old techniques. At the time of development we were not aware of anyone who has been able to achieve this and found several posts and articles stating it wasn’t possible in Outlook 2010. As you can see from the screenshots above, we have managed to achieve it in OnePlaceMail Release 6.1.