Build and Deploy Microsoft Dynamics 365 projects using VSTS – part II

This is the second article of three telling the tale of our own DevOps for Microsoft Dynamics 365, and the technology behind it.

Part I – Background and how our DevOps tools evolved before we knew about it
Part II – Automation of the build and deploy process using custom VSTS Build Tasks
Part III – Demo of complete build and release definitions taking you from A to Z In the previous article I described the background of our struggles with moving configuration data and later scripted export and import of solutions and the CRM Deployer tool. This article takes these features to the next level by packing those and some other missing features into custom VSTS Build Tasks.

Automating the Build Process

We now had the tools we needed to automate the central parts of the build/deploy process. But it still involved lots of manual or script based steps. To describe it simply, the following steps were required to produce a full deploy of a Customer Solution (CS) that has a prerequisite in one of our Product Solutions (PS), assuming we wanted the latest available code and customizations for both PS and CS.

  1. Build PS
    1. Define new PS version number
    2. Set version number for assemblies
    3. Compile assemblies
    4. Use Plugin Registration to update PS DEV assemblies
    5. Minify webresources (scripted post build event)
    6. Use Web Resource Utility to update webresources in PS DEV
      (scripted post build event using modified version from SDK, that allows command line execution w/o user interaction)
    7. Run Shuffle scripts that export PS solutions and data from PS DEV
  2. Build CS
    1. Run scripts that import PS to CS DEV
    2. Define new CS version number
    3. Set version number for assemblies
    4. Compile assemblies
    5. Use Plugin Registration to update CS DEV assemblies
    6. Minify webresources
    7. Use Web Resource Utility to update webresources in CS DEV
    8. Run Shuffle scripts that export CS solutions and data from CS DEV
  3. Create package (by running a script)
    1. Collect all required definitions, solutions and data files from PS and CS exports
    2. Execute CRM Deployer with cdpkg file and a flag to create cdzip archive

The missing pieces

Some of the steps above would be possible to encapsulate a bit more with scripting or tailored tools, and some of them possible to perform using Microsoft’s Developer Toolkit, Jason Lattimer’s CRM Developer Extensions or Wael Hamze’s CI FrameWork. But with the legacy of our Shuffle and later the CRM Deployer, that both have well proven technology and still save us literally hundreds of hours every month, we decided to add the few missing pieces in our puzzle ourselves. Continue reading “Build and Deploy Microsoft Dynamics 365 projects using VSTS – part II”

Build and Deploy Microsoft Dynamics 365 projects using VSTS – part I

During my eight years as a Microsoft Dynamics CRM / 365 developer, I have felt a strong pain every time it was time to package and distribute a customer or product implementation.

Over the years our tools have evolved to now support a complete automated process; from source repository via compilation, updating dev environment, exporting solutions and configuration, collecting the artifacts and compose deployment packages to be installed manually or by VSTS release management.

This is the first article of three telling the tale of our own DevOps for Microsoft Dynamics 365, and the technology behind it.

Part I – Background and how our DevOps tools evolved before we knew about it
Part II – Automation of the build and deploy process using custom VSTS Build Tasks
Part III – Demo of complete build and release definitions taking you from A to Z   My hope is that these articles will inspire you to take your delivery process to the next stage by implementing automation through CI and what is usually called DevOps. If you are already there, these articles should provide an alternative solution, which may or may not suit your needs today, but might be worth considering.

It started with the data

Back in the days of CRM 4.0 we started delivering systems that were based more and more on generic configurable functionality. The benefit of having an automated way of delivering and moving configuration data between CRM environments was becoming increasingly obvious. This was long before utilities like the Configuration Migration Tool, so we started to draw the blueprints to develop the functionality we needed. Basically, what we needed was to grab a bunch of data from a source environment to persist it in a file, and later push it into another CRM organization.

Continue reading “Build and Deploy Microsoft Dynamics 365 projects using VSTS – part I”

Developing plugins for analysis – part IV

At the eXtreme365 conference in Lisbon, Portugal I did a session on plugin development with focus on adapting your code to empower the tracing and investigation features available in the Microsoft Dynamics 365 platform.
In this final article from that session I will dig deeper into how use the Correlation Id to trace plugin execution chains.

Continue reading “Developing plugins for analysis – part IV”

Developing plugins for analysis – part III

At the eXtreme365 conference in Lisbon, Portugal I did a session on plugin development with focus on adapting your code to empower the tracing and investigation features available in the Microsoft Dynamics 365 platform.
This is the third article from that session where the Plugin Trace Viewer is explained.

Continue reading “Developing plugins for analysis – part III”

Developing plugins for analysis – part I

At the eXtreme365 conference in Lisbon, Portugal I did a session on plugin development with focus on adapting your code to empower the tracing and investigation features available in the Microsoft Dynamics 365 platform.
ICYMI: This article is the first in a series to describe the essence of that session.

Continue reading “Developing plugins for analysis – part I”

Developing plugins for analysis – part II

At the eXtreme365 conference in Lisbon, Portugal I did a session on plugin development with focus on adapting your code to empower the tracing and investigation features available in the Microsoft Dynamics 365 platform.
This is the second article in a series to describe the essence of that session.

Continue reading “Developing plugins for analysis – part II”

I get by with a little help from my [base class]

Developing plugins for Microsoft Dynamics 365 (CRM) only using bare SDK libraries make you do the same stuff over and over.
This is why one of the first things I did when starting to work with the platform was to create a helping hand in the form of a plugin base class, implementing IPlugin.

Continue reading “I get by with a little help from my [base class]”

CRM Saturday – XrmToolBox with Jonas Rapp

CRM Saturday is a recurring event where Microsoft Dynamics CRM/365 experts and MVPs gather for a day filled with sessions from both strategic and technical perspectives on everything from user adoption to plugin unit testing to IoT and intelligent analysis.

On Saturday January 28 the event was held in London, UK at the Microsoft offices in Paddington. As a “senior contributor” to the world famous XrmToolBox by MVP Tanguy Touzard I was invited to do a session on simplifying development using XrmToolBox. image My session covered a brief XrmToolBox background, examples of my own favorite tools, and deep dive demos of FetchXML Builder and Plugin Trace Viewer. Of course you cannot do a demo with some customizations and plugins without using a few other XrmToolBox tools, so I did not only cover my own block busters… The presentation from the event is now available here: CRM Saturday – XrmToolBox with Jonas Rapp This contains the full presentation, and also step by step details on the demos performed, as well as some bonus demos that did not fit the tight session schedule. Note that the presentation also contains reference to a free to use GitHub repository with a simple plugin base class, that can be inherited instead of simply implementing the SDK interface IPlugin to greatly simplify plugin development and logging to the Tracing Service. The repository is available here: https://github.com/rappen/JonasPluginBase

If you would like to dig even deeper into the tracing service, XrmToolBox and the Plugin Trace Viewer – join me on my session on this topic during eXtreme365 for Partners in Lisbon, Portugal that takes place March 13-15 2017 !

  If you have any questions regarding the presentation, demo or the plugin base class, don’t hesitate to contact me!   More information on CRM Saturday: http://crmsaturday.com
More information on eXtreme365: http://extremecrm.com

CRM, xRM, 365, CDS – are we chasing ghosts?

Business Solutions MVP Jukka Niiranen recently wrote yet another in-depth analysis of the path Microsoft is taking from Dynamics CRM, via xRM to Dynamics 365 and the greater ecosystem including CDS, Logic Apps, Power Apps etc.

The article led to a brief but interesting Twitter-discussion between Jukka and a Swedish colleague of mine, Peter Björkmarker. The discussion ended up in another article posted on LinkedIn.

So I dug into the 140+ character reply (a bit of an understatement, indeed) to try to get a grasp of what lies ahead. I had hopes that I could come to my own personal conclusion and my own view on the future based on the new products available and the indications from Microsoft, combined with my own experience in the field. And of course trying to decode what may be hidden between the lines from this NDA-bound MVP…

Ghosts

Reading these articles definitely gives you a lot of insights. But the lingering feeling I really cannot let go of is that we are chasing ghosts. We “on the outside” try to understand where Microsoft is heading. And even an MVP for many years, who happens to be one of the most well known and respected in the field, is literally guessing what the company that dubbed him is up to. zorro1I am trying to find a valid reason for keeping secrets this way, where is the business value in keeping us in the dark? Is it to keep the interest alive? Like that tall dark stranger with the mask is the most interesting man at the party? Is it to avoid leaking secrets to competitors? All of a sudden your hottest new features are released by someone else before it has passed your own UAT? Or are they simply putting new platforms and features out there to see what happens, and take it from there? Add some whispers in the dark, throw in a few new buzz words… Have us googling, analyzing, blogging and discussing, maintain the hype for a bit longer…

Cynical

Some may call me cynical. 135000053But I have to ask myself (since there is no point asking “them”) Do they really have that Master Plan we are all trying to figure out?
Or is the secrecy simply a sales stunt?
I honestly think I would prefer it being a sales stunt.
Hiding existing information of this kind from the developer community in general and the MVP group in particular seems a bit too arrogant. And probably even counter productive. They have a large community of dedicated partners, resellers, developers and MVPs that depend on Microsoft, as well as Microsoft depend on us.
Having us waste time on speculations and ISVs following the wrong guesses is neither an efficient nor a respectful way to do business.

New dimensions

Well, regardless of Microsoft’s possibly hidden agenda – of course I have some thoughts on the actual technical aspects too. I think the xRM platform is really great for a certain type of systems to support processes and information in a business. I do not think xRM will die easily, and I hope Microsoft does not have plans to kill it soon. The new possibilities opening up with CDS, Power Apps, Logical Apps, Dynamics 365 and the gigantic Azure ecosystem of services adds the means to add a few more dimensions to existing systems. Our current systems usually have two dimensions – store information and support processes.
Adding tools from the new service flora can add dimensions to open them up and really becoming alive.

Show hierarchically related activities in subgrid

In this article I will demonstrate how to implement a plugin to extend the possibilities for showing activities that are related through account hierarchy in a subgrid on a Microsoft Dynamics CRM form.

In my previous article I showed how to create a simple plugin to show all directly related activities in a subgrid, and not just activities related through the Regarding field.

Objective

The goal is to be able to display all activities (yellow boxes) anywhere below any account (blue box) that is opened in CRM. Some of you may recognize this model – it is respectfully borrowed from MVP Jukka Niiranen’s blog post on this problem: CRM 2011 subgrids ain’t what associated views used to be. As this article indicates, this has been a problem ever since we left CRM 4.0 behind. Continue reading “Show hierarchically related activities in subgrid”