Dynamics 365: Settings in SolutionsCraig SeymourMay 30th 2019
When you are exporting a solution in Dynamics 365, you can choose to include organization settings, but there’s no documentation - how do you know exactly what it is you are exporting? Craig, our Dynamics practice lead has the answers you seek...
At cloudThing, we follow the guiding principle that the deployment of D365 solutions should be automated where possible. And if it’s not possible, figure out a way to make it possible - hence the birth of our buildThing tools.
One exception to this has been organization settings: when you are exporting a solution, you can choose to include organization settings, but there’s no documentation - how do you know exactly what it is you are exporting?
With that uncertainly, and as these settings are generally a one-off change, we’ve covered them by documenting the necessary steps in the release note. But I’d really rather we didn’t have manual steps in the process, so when I had a bit of spare time recently I decided to take a bit of a goosey gander…
So, if you've ever wondered what's included with each checkbox, read on!
So, how do you find out what settings are actually going to get transferred with your solution?
The first thing I tried was simply exporting the solution twice, once with the settings checked and once without. This gave the output below, but I was left a bit unsure about what each setting was and where it had come from. For example, there seemed to be a lot of settings from the UI which were missing. Perhaps it doesn't export ones which are set to the default?
<TimeBlock EntityType="4214" StatusCode="1" CssClass="ganttBlockServiceActivityStatus1" />
<TimeBlock EntityType="4214" StatusCode="2" CssClass="ganttBlockServiceActivityStatus2" />
<TimeBlock EntityType="4214" StatusCode="3" CssClass="ganttBlockServiceActivityStatus3" />
<TimeBlock EntityType="4214" StatusCode="4" CssClass="ganttBlockServiceActivityStatus4" />
<TimeBlock EntityType="4214" StatusCode="6" CssClass="ganttBlockServiceActivityStatus6" />
<TimeBlock EntityType="4214" StatusCode="7" CssClass="ganttBlockServiceActivityStatus7" />
<TimeBlock EntityType="4214" StatusCode="8" CssClass="ganttBlockServiceActivityStatus8" />
<TimeBlock EntityType="4214" StatusCode="9" CssClass="ganttBlockServiceActivityStatus9" />
<TimeBlock EntityType="4214" StatusCode="10" CssClass="ganttBlockServiceActivityStatus10" />
<TimeBlock EntityType="4201" StatusCode="1" CssClass="ganttBlockAppointmentStatus1" />
<TimeBlock EntityType="4201" StatusCode="2" CssClass="ganttBlockAppointmentStatus2" />
<TimeBlock EntityType="4201" StatusCode="3" CssClass="ganttBlockAppointmentStatus3" />
<TimeBlock EntityType="4201" StatusCode="4" CssClass="ganttBlockAppointmentStatus4" />
<TimeBlock EntityType="4201" StatusCode="5" CssClass="ganttBlockAppointmentStatus5" />
<TimeBlock EntityType="4201" StatusCode="6" CssClass="ganttBlockAppointmentStatus6" />
However, when I looked online for references to the XML attributes, I found the SDK documentation for the Request classes which can be called when you are generating a Solution programmatically; They're a bit hard to digest, but they do help to understand what exactly you're going to get.
And the answer is?
The short answer is, exactly the same list as above; the longer answer is as below:
You're not still using these, right? :-)
If you're exporting this, you know much more about it than I do...
If you bothered to read all the detail above, you'll have noticed that there's a few incomplete bits, and my intended next steps were to go through and track down the missing items or uncertain items, but actually I think that I'd be wasting my time.
We can see that:
All of which makes me reticent to use this functionality - without careful checking, there's no certainty about which settings are actually going to make it through. And with the dynamic nature of Dynamics 365 CE updates, it could change tomorrow...
So where next? I think that cloudThing needs to write a buildThing which iterates through the the whole list of Organization Settings (not just those exposed as specific Request classes), and allows you to set them programmatically in your ALM pipeline. Watch this space ;-)