<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Configuration Data Mover - Alexander Development]]></title><description><![CDATA[Configuration Data Mover - Alexander Development]]></description><link>https://alexanderdevelopment.net/</link><image><url>https://alexanderdevelopment.net/favicon.png</url><title>Configuration Data Mover - Alexander Development</title><link>https://alexanderdevelopment.net/</link></image><generator>Ghost 1.20</generator><lastBuildDate>Thu, 23 Apr 2026 06:16:11 GMT</lastBuildDate><atom:link href="https://alexanderdevelopment.net/tag/configuration-data-mover/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Dynamics 365 Configuration Data Mover v2.4]]></title><description><![CDATA[<div class="kg-card-markdown"><p>I've released an <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases/tag/v2.4.6587.18905">updated version</a> of my popular Dynamics 365 Configuration Data Mover utility that was built with .Net 4.7 to address the new requirement to use TLS 1.2 (or better) for connections to Dynamics 365 online instances as described in this entry on the Microsoft Dynamics 365</p></div>]]></description><link>https://alexanderdevelopment.net/post/2018/01/16/dynamics-365-configuration-data-mover-v2-4/</link><guid isPermaLink="false">5a5e85dae2df920001a88f85</guid><category><![CDATA[Microsoft Dynamics CRM]]></category><category><![CDATA[Dynamics 365]]></category><category><![CDATA[Configuration Data Mover]]></category><category><![CDATA[integration]]></category><category><![CDATA[utilities]]></category><dc:creator><![CDATA[Lucas Alexander]]></dc:creator><pubDate>Tue, 16 Jan 2018 23:12:00 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>I've released an <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases/tag/v2.4.6587.18905">updated version</a> of my popular Dynamics 365 Configuration Data Mover utility that was built with .Net 4.7 to address the new requirement to use TLS 1.2 (or better) for connections to Dynamics 365 online instances as described in this entry on the Microsoft Dynamics 365 team blog: <a href="https://blogs.msdn.microsoft.com/crm/2017/09/28/updates-coming-to-dynamics-365-customer-engagement-connection-security">https://blogs.msdn.microsoft.com/crm/2017/09/28/updates-coming-to-dynamics-365-customer-engagement-connection-security</a>.</p>
<p>This upgrade is fully compatible with existing job files.</p>
<h4 id="gettingthedynamics365configurationdatamover">Getting the Dynamics 365 Configuration Data Mover</h4>
<p>The source code is available in my GitHub repository <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover">here</a>.</p>
<p>A compiled version can be downloaded <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases/tag/v2.4.6587.18905">here</a>.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Using proxy connections with the Dynamics 365 Configuration Data Mover]]></title><description><![CDATA[<div class="kg-card-markdown"><p>I was recently asked to add a feature to my Dynamics 365 Configuration Data Mover to enable connections through a proxy server. Because the tool is a .Net application, proxy server connections can be configured directly in the AlexanderDevelopmentConfigDataMover.exe.config file. For example, if you want to use the</p></div>]]></description><link>https://alexanderdevelopment.net/post/2018/01/08/using-proxy-connections-with-the-dynamics-365-configuration-data-mover/</link><guid isPermaLink="false">5a5837246636a30001b978f1</guid><category><![CDATA[Microsoft Dynamics CRM]]></category><category><![CDATA[Dynamics 365]]></category><category><![CDATA[Configuration Data Mover]]></category><category><![CDATA[integration]]></category><category><![CDATA[utilities]]></category><dc:creator><![CDATA[Lucas Alexander]]></dc:creator><pubDate>Mon, 08 Jan 2018 15:16:49 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>I was recently asked to add a feature to my Dynamics 365 Configuration Data Mover to enable connections through a proxy server. Because the tool is a .Net application, proxy server connections can be configured directly in the AlexanderDevelopmentConfigDataMover.exe.config file. For example, if you want to use the default Internet Explorer proxy settings, just add the following values inside the <configuration> element:</configuration></p>
<pre><code>&lt;system.net&gt;
  &lt;defaultproxy enabled=&quot;true&quot;&gt; 
    &lt;proxy usesystemdefault=&quot;true&quot;/&gt; 
  &lt;/defaultproxy&gt; 
&lt;/system.net&gt;
</code></pre>
<p>For more information on proxy settings, take a look at this Microsoft overview on .Net <a href="https://docs.microsoft.com/en-us/dotnet/framework/network-programming/proxy-configuration">proxy configuration</a>.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Creating many-to-many associations with the Dynamics 365 Configuration Data Mover]]></title><description><![CDATA[<div class="kg-card-markdown"><p>I've released an updated version of my popular Dynamics 365 Configuration Data Mover utility that includes the ability to create many-to-many associations in the target system. This upgrade is fully compatible with existing job files.</p>
<p>To create a many-to-many job step in the GUI, select the new &quot;many to</p></div>]]></description><link>https://alexanderdevelopment.net/post/2017/11/28/creating-many-to-many-associations-with-the-dynamics-365-configuration-data-mover/</link><guid isPermaLink="false">5a5837246636a30001b978e6</guid><category><![CDATA[Microsoft Dynamics CRM]]></category><category><![CDATA[Dynamics 365]]></category><category><![CDATA[Configuration Data Mover]]></category><category><![CDATA[integration]]></category><category><![CDATA[utilities]]></category><dc:creator><![CDATA[Lucas Alexander]]></dc:creator><pubDate>Tue, 28 Nov 2017 20:00:00 GMT</pubDate><media:content url="https://alexanderdevelopment.net/content/images/2017/11/AlexanderDevelopment-ConfigDataMover_2017-11-28_10-28-59.png" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://alexanderdevelopment.net/content/images/2017/11/AlexanderDevelopment-ConfigDataMover_2017-11-28_10-28-59.png" alt="Creating many-to-many associations with the Dynamics 365 Configuration Data Mover"><p>I've released an updated version of my popular Dynamics 365 Configuration Data Mover utility that includes the ability to create many-to-many associations in the target system. This upgrade is fully compatible with existing job files.</p>
<p>To create a many-to-many job step in the GUI, select the new &quot;many to many&quot; step type and input a FetchXML query for the relationship entity (relationship entity name on the many-to-many relationship form) that includes the GUID fields for each entity. The relationship entities cannot be queried in the advanced find builder, so you must write the FetchXML manually or use a separate query builder.</p>
<p><img src="https://alexanderdevelopment.net/content/images/2017/11/AlexanderDevelopment-ConfigDataMover_2017-11-28_10-28-59-1.png#img-thumbnail" alt="Creating many-to-many associations with the Dynamics 365 Configuration Data Mover"></p>
<p>One thing to keep in mind is that a many-to-many job step will create many-to-many record associations in the target system, but it will not delete any existing N:N associations that have been removed in the source.</p>
<h4 id="gettingthedynamics365configurationdatamover">Getting the Dynamics 365 Configuration Data Mover</h4>
<p>The source code is available in my GitHub repository <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover">here</a>.</p>
<p>A compiled version can be downloaded <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases">here</a>.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Running Dynamics 365 Configuration Data Mover jobs in VSTS builds]]></title><description><![CDATA[<div class="kg-card-markdown"><p>In today's post I will show how to use my <a href="https://alexanderdevelopment.net/tag/configuration-data-mover/">Dynamics 365 Configuration Data Mover</a> utility for synchronizing configuration data between CRM orgs as part of a <a href="https://www.visualstudio.com/team-services/">Visual Studio Team Services</a> build.</p>
<ol>
<li>Download the latest version of the Configuration Data Mover utility's CLI tool from my repository on GitHub here:</li></ol></div>]]></description><link>https://alexanderdevelopment.net/post/2017/09/12/running-dynamics-365-configuration-data-mover-jobs-in-vsts-builds/</link><guid isPermaLink="false">5a5837246636a30001b978e1</guid><category><![CDATA[Microsoft Dynamics CRM]]></category><category><![CDATA[Dynamics 365]]></category><category><![CDATA[Configuration Data Mover]]></category><category><![CDATA[continuous integration]]></category><dc:creator><![CDATA[Lucas Alexander]]></dc:creator><pubDate>Tue, 12 Sep 2017 12:00:00 GMT</pubDate><media:content url="https://alexanderdevelopment.net/content/images/2017/09/chrome_2017-09-11_12-49-49-1.png" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://alexanderdevelopment.net/content/images/2017/09/chrome_2017-09-11_12-49-49-1.png" alt="Running Dynamics 365 Configuration Data Mover jobs in VSTS builds"><p>In today's post I will show how to use my <a href="https://alexanderdevelopment.net/tag/configuration-data-mover/">Dynamics 365 Configuration Data Mover</a> utility for synchronizing configuration data between CRM orgs as part of a <a href="https://www.visualstudio.com/team-services/">Visual Studio Team Services</a> build.</p>
<ol>
<li>Download the latest version of the Configuration Data Mover utility's CLI tool from my repository on GitHub here: <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases">https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases</a>.<br>
Any version from 2.2 onward should work, and make sure you get the &quot;AlexanderDevelopment.ConfigDataMover.Cli.zip&quot; file.</li>
<li>Extract everything from the zip archive and add the entire directory to your source code repository. I have historically used a &quot;tools&quot; directory that contains various utilities, so I keep the Data Mover CLI tool in its own subdirectory there.</li>
<li>Add a directory to your source code repository to hold configuration data mover job files and JSON data extracts. I call mine &quot;data.&quot;</li>
<li>Set up a data mover job using the GUI tool. You can create a job that syncs data between two CRM orgs or a job that reads from a file source. I prefer to use file sources for deployments because then I don't have a dependency on the development org, and also the configuration data can be kept under source control. You can also save your connection parameters in the job file or pass them to the Data Mover at run time.</li>
<li>After you create and test your data mover job, save a copy of the XML job file to your source control &quot;data&quot; directory.</li>
<li><em>(This step is only required for file sources when you are saving the connection parameters in the job file.)</em> Open the XML file in a text editor and find the &lt;ConnectionDetails&gt; node toward the bottom. There will be a &quot;source&quot; attribute that you need to make sure is set to a relative path to the JSON data file from the location of your AlexanderDevelopment.ConfigDataMover.Cli.exe assembly. Because of how I have my directory structure set up in source control, the a JSON file named &quot;alm-test.json&quot; has &quot;....\data\alm-test.json&quot; as its relative path. Here's a screenshot of my directory structure for reference:<br>
<img src="https://alexanderdevelopment.net/content/images/2017/09/chrome_2017-09-11_12-48-14.png#img-thumbnail" alt="Running Dynamics 365 Configuration Data Mover jobs in VSTS builds"></li>
<li>Commit your changes to your VSTS instance. I am using Git, but this should work for TFS, too.</li>
<li>Create a new build and add a batch script step.</li>
<li>Configure the batch script step to run the AlexanderDevelopment.ConfigDataMover.Cli.exe assembly you pushed to source control in step #7.<br>
<img src="https://alexanderdevelopment.net/content/images/2017/09/chrome_2017-09-11_13-24-50.png#img-thumbnail" alt="Running Dynamics 365 Configuration Data Mover jobs in VSTS builds"></li>
<li>Set the arguments to include the relative path to your job configuration file. For this example, it is <em>-c ....\data\alm-test-import.xml</em><br>
<img src="https://alexanderdevelopment.net/content/images/2017/09/chrome_2017-09-11_12-46-23.png#img-thumbnail" alt="Running Dynamics 365 Configuration Data Mover jobs in VSTS builds"></li>
<li><em>(This step is only required if you are not saving the connection parameters in the job file.)</em> Add source and target arguments, too. The source argument is -s, and the target argument is -t. The values will look just like the source/target attributes from a job configuration file where you have saved the values.</li>
<li>Set the working folder value to the directory that contains the AlexanderDevelopment.ConfigDataMover.Cli.exe assembly. You can see that setting in the screenshot above.</li>
</ol>
<p>At this point you should be able to save and queue the build. Assuming everything is set up properly, you should get a nice result like this:<br>
<img src="https://alexanderdevelopment.net/content/images/2017/09/chrome_2017-09-11_12-49-49.png#img-thumbnail" alt="Running Dynamics 365 Configuration Data Mover jobs in VSTS builds"></p>
<p>If you do get an error, it's probably something simple like the paths not being set correctly, and a quick review of the output logs should point to the solution.</p>
<p>That's all there is to it. Are you using automated builds in VSTS for your Dynamics 365 projects? Do see value in managing configuration data like this? Share your thoughts in the comments!</p>
</div>]]></content:encoded></item><item><title><![CDATA[Dynamics 365 Configuration Data Mover v2.2]]></title><description><![CDATA[<div class="kg-card-markdown"><p>I've released an updated version of my popular Dynamics 365 Configuration Data Mover utility that includes the following features:</p>
<ul>
<li>Path to source and target JSON data files can now be absolute or relative to current working directory. This is particularly useful for running the CLI tool in an automated fashion.</li></ul></div>]]></description><link>https://alexanderdevelopment.net/post/2017/09/11/dynamics-365-configuration-data-mover-v2-2/</link><guid isPermaLink="false">5a5837246636a30001b978db</guid><category><![CDATA[Microsoft Dynamics CRM]]></category><category><![CDATA[Dynamics 365]]></category><category><![CDATA[Configuration Data Mover]]></category><category><![CDATA[integration]]></category><category><![CDATA[utilities]]></category><dc:creator><![CDATA[Lucas Alexander]]></dc:creator><pubDate>Mon, 11 Sep 2017 17:17:17 GMT</pubDate><media:content url="https://alexanderdevelopment.net/content/images/2017/09/cmd_2017-09-11_12-15-24.png" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://alexanderdevelopment.net/content/images/2017/09/cmd_2017-09-11_12-15-24.png" alt="Dynamics 365 Configuration Data Mover v2.2"><p>I've released an updated version of my popular Dynamics 365 Configuration Data Mover utility that includes the following features:</p>
<ul>
<li>Path to source and target JSON data files can now be absolute or relative to current working directory. This is particularly useful for running the CLI tool in an automated fashion.</li>
<li>Location of job configuration file can be passed to CLI tool as absolution or relative path.</li>
<li>Import tool can now read configuration data directly as a JSON string instead of having to read it from a file. The syntax for supplying the the data to the CLI tool (or importer library DLL) is <em>RAWJSON={YOUR_EXPORT_JSON_HERE}</em></li>
</ul>
<p>This upgrade is fully compatible with existing job files.</p>
<h4 id="gettingthedynamics365configurationdatamover">Getting the Dynamics 365 Configuration Data Mover</h4>
<p>The source code is available in my GitHub repository <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover">here</a>.</p>
<p>A compiled version can be downloaded <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases">here</a>.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Running Dynamics 365 Configuration Data Mover jobs in Azure Functions]]></title><description><![CDATA[<div class="kg-card-markdown"><p>My <a href="https://alexanderdevelopment.net/tag/configuration-data-mover/">Dynamics 365 Configuration Data Mover</a> utility allows you to run synchronization jobs from an interactive GUI tool or the command line, but the actual data synchronization logic is contained in a separate AlexanderDevelopment.ConfigDataMover.Lib.dll file that can be included in other applications. In today's post I will</p></div>]]></description><link>https://alexanderdevelopment.net/post/2017/08/09/running-dynamics-365-configuration-data-mover-jobs-in-azure-functions/</link><guid isPermaLink="false">5a5837246636a30001b978d4</guid><category><![CDATA[Microsoft Dynamics CRM]]></category><category><![CDATA[Dynamics 365]]></category><category><![CDATA[integration]]></category><category><![CDATA[utilities]]></category><category><![CDATA[Configuration Data Mover]]></category><category><![CDATA[Azure]]></category><dc:creator><![CDATA[Lucas Alexander]]></dc:creator><pubDate>Wed, 09 Aug 2017 19:13:58 GMT</pubDate><media:content url="https://alexanderdevelopment.net/content/images/2017/08/chrome_2017-08-09_12-44-48-1.png" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://alexanderdevelopment.net/content/images/2017/08/chrome_2017-08-09_12-44-48-1.png" alt="Running Dynamics 365 Configuration Data Mover jobs in Azure Functions"><p>My <a href="https://alexanderdevelopment.net/tag/configuration-data-mover/">Dynamics 365 Configuration Data Mover</a> utility allows you to run synchronization jobs from an interactive GUI tool or the command line, but the actual data synchronization logic is contained in a separate AlexanderDevelopment.ConfigDataMover.Lib.dll file that can be included in other applications. In today's post I will show how you can set up an Azure Function to execute a Configuration Data Mover job file to sync data between two Dynamics 365 organizations.</p>
<h4 id="settingupyourazurefunction">Setting up your Azure Function</h4>
<p>First create a new Azure Function. I created an HTTP trigger function with the default &quot;function&quot; authorization level so that I could post parameters to it, but if you could modify the code sample later in this post to use it with a different type of trigger. <img src="https://alexanderdevelopment.net/content/images/2017/08/chrome_2017-08-09_12-37-17.png#img-thumbnail" alt="Running Dynamics 365 Configuration Data Mover jobs in Azure Functions"></p>
<p>Next open your function's <a href="https://blogs.msdn.microsoft.com/benjaminperkins/2017/04/13/how-to-add-assembly-references-to-an-azure-function-app/">Kudu console</a> so you can create a &quot;bin&quot; directory to upload the AlexanderDevelopment.ConfigDataMover.Lib.dll file. <img src="https://alexanderdevelopment.net/content/images/2017/08/chrome_2017-08-09_12-38-26.png#img-thumbnail" alt="Running Dynamics 365 Configuration Data Mover jobs in Azure Functions"></p>
<p>Navigate to the correct directory and create a &quot;bin&quot; directory inside it. <img src="https://alexanderdevelopment.net/content/images/2017/08/chrome_2017-08-09_12-38-56.png#img-thumbnail" alt="Running Dynamics 365 Configuration Data Mover jobs in Azure Functions"></p>
<p>After that, go back to the main function editor interface to see the newly created &quot;bin&quot; directory in the &quot;view files&quot; area. <img src="https://alexanderdevelopment.net/content/images/2017/08/chrome_2017-08-09_12-39-17.png" alt="Running Dynamics 365 Configuration Data Mover jobs in Azure Functions"></p>
<p>Look in the local directory where you have installed the Configuration Data Mover and find the &quot;AlexanderDevelopment.ConfigDataMover.Lib.dll&quot; file. Upload it to the &quot;bin&quot; directory you just created. <img src="https://alexanderdevelopment.net/content/images/2017/08/chrome_2017-08-09_12-39-35.png#img-thumbnail" alt="Running Dynamics 365 Configuration Data Mover jobs in Azure Functions"></p>
<p>Navigate back to the main function directory and create a project.json file to pull in dependencies via NuGet. <img src="https://alexanderdevelopment.net/content/images/2017/08/chrome_2017-08-09_12-40-10.png#img-thumbnail" alt="Running Dynamics 365 Configuration Data Mover jobs in Azure Functions"></p>
<p>Here is the content of the file so you can copy and paste:</p>
<pre><code>{
  &quot;frameworks&quot;: {
    &quot;net46&quot;:{
      &quot;dependencies&quot;: {
        &quot;Microsoft.CrmSdk.CoreAssemblies&quot;: &quot;8.2.0&quot;,
        &quot;Microsoft.CrmSdk.XrmTooling.CoreAssembly&quot;: &quot;8.2.0&quot;,
        &quot;log4net&quot;: &quot;2.0.8&quot;
      }
    }
  }
}
</code></pre>
<p>Finally, you need to update the function code in the run.csx file. <img src="https://alexanderdevelopment.net/content/images/2017/08/chrome_2017-08-09_13-10-11.png#img-thumbnail" alt="Running Dynamics 365 Configuration Data Mover jobs in Azure Functions"></p>
<p>Here's the code you can use:</p>
<pre><code>#r &quot;NewtonSoft.Json&quot;
#r &quot;AlexanderDevelopment.ConfigDataMover.Lib.dll&quot;
using System.Net;
using System.Collections.Generic;
using AlexanderDevelopment.ConfigDataMover.Lib;
using System.Xml;

static string _sourceString = null;
static string _targetString = null;
static bool _mapBaseBu = false;
static bool _mapBaseCurrency = false;
static List&lt;GuidMapping&gt; _guidMappings = new List&lt;GuidMapping&gt;();
static List&lt;JobStep&gt; _jobSteps = new List&lt;JobStep&gt;();

public static async Task&lt;HttpResponseMessage&gt; Run(HttpRequestMessage req, TraceWriter log)
{
    log.Info(&quot;C# HTTP trigger function processed a request.&quot;);

    // parse query parameters
    string jobdata = req.GetQueryNameValuePairs()
        .FirstOrDefault(q =&gt; string.Compare(q.Key, &quot;jobdata&quot;, true) == 0)
        .Value;
    string sourceparam = req.GetQueryNameValuePairs()
        .FirstOrDefault(q =&gt; string.Compare(q.Key, &quot;source&quot;, true) == 0)
        .Value;
    string targetparam = req.GetQueryNameValuePairs()
        .FirstOrDefault(q =&gt; string.Compare(q.Key, &quot;target&quot;, true) == 0)
        .Value;

    if(jobdata == null)
    {
        return req.CreateResponse(HttpStatusCode.BadRequest, &quot;Please post jobdata&quot;);
    }
    else
    {
        ParseConfig(jobdata);
		
		//use source and target values if provided in the POST
		if(!string.IsNullOrEmpty(targetparam))
		{
			_targetString = targetparam;
		}
		if(!string.IsNullOrEmpty(sourceparam))
		{
			_sourceString = sourceparam;
		}
		
		//do some basic validations
		if (string.IsNullOrEmpty(_sourceString))
		{
			return req.CreateResponse(HttpStatusCode.BadRequest,&quot;no source connection specified - exiting&quot;);
		}
		if (string.IsNullOrEmpty(_targetString))
		{
			return req.CreateResponse(HttpStatusCode.BadRequest,&quot;no target connection specified - exiting&quot;);
		}
		if (!(_jobSteps.Count &gt; 0))
		{
			return req.CreateResponse(HttpStatusCode.BadRequest,&quot;no steps in job - exiting&quot;);
		}

		Importer importer = new Importer();
		importer.GuidMappings = _guidMappings;
		importer.JobSteps = _jobSteps;
		importer.SourceString = _sourceString; 
		importer.TargetString = _targetString; 
		importer.MapBaseBu = _mapBaseBu;
		importer.MapBaseCurrency = _mapBaseCurrency;
		importer.Process();

		int errorCount = importer.ErrorCount;

		importer = null;
		
		//show a message to the user
		if (errorCount == 0)
		{
			return req.CreateResponse(HttpStatusCode.OK,&quot;Job finished with no errors.&quot;);
		}
		else
		{
			return req.CreateResponse(HttpStatusCode.BadRequest,&quot;Job finished with errors.&quot;);
		}
    }
}

public static void ParseConfig(string jobdata)
{
    XmlDocument xml = new XmlDocument();
	xml.LoadXml(jobdata);
	_jobSteps.Clear();
	_guidMappings.Clear();

	XmlNodeList stepList = xml.GetElementsByTagName(&quot;Step&quot;);
	foreach (XmlNode xn in stepList)
	{
		JobStep step = new JobStep();
		step.StepName = xn.SelectSingleNode(&quot;Name&quot;).InnerText;
		step.StepFetch = xn.SelectSingleNode(&quot;Fetch&quot;).InnerText;
		step.UpdateOnly = false;
		if(xn.Attributes[&quot;updateOnly&quot;]!=null)
			step.UpdateOnly = Convert.ToBoolean(xn.Attributes[&quot;updateOnly&quot;].Value);

		step.CreateOnly = false;
		if (xn.Attributes[&quot;createOnly&quot;] != null)
			step.CreateOnly = Convert.ToBoolean(xn.Attributes[&quot;createOnly&quot;].Value);

		_jobSteps.Add(step);
	}

	XmlNodeList configData = xml.GetElementsByTagName(&quot;JobConfig&quot;);
	_mapBaseBu = Convert.ToBoolean(configData[0].Attributes[&quot;mapBuGuid&quot;].Value);
	_mapBaseCurrency = Convert.ToBoolean(configData[0].Attributes[&quot;mapCurrencyGuid&quot;].Value);

	XmlNodeList mappingList = xml.GetElementsByTagName(&quot;GuidMapping&quot;);
	foreach (XmlNode xn in mappingList)
	{
		Guid sourceGuid = new Guid(xn.Attributes[&quot;source&quot;].Value);
		Guid targetGuid = new Guid(xn.Attributes[&quot;target&quot;].Value);
		_guidMappings.Add(new GuidMapping { sourceId = sourceGuid, targetId = targetGuid });
	}
	XmlNodeList connectionNodes = xml.GetElementsByTagName(&quot;ConnectionDetails&quot;);
	if (connectionNodes.Count &gt; 0)
	{
		_sourceString = connectionNodes[0].Attributes[&quot;source&quot;].Value;
		_targetString = connectionNodes[0].Attributes[&quot;target&quot;].Value;
	}
}
</code></pre>
<h4 id="executingyourazurefunction">Executing your Azure Function</h4>
<p>To execute the function, you'll need to copy the function key so that you can send it as a POST parameter.<br>
<img src="https://alexanderdevelopment.net/content/images/2017/08/chrome_2017-08-09_12-43-21.png#img-thumbnail" alt="Running Dynamics 365 Configuration Data Mover jobs in Azure Functions"></p>
<p>Once you have that, you can build a POST request. Here's what it looks like in Postman:<br>
<img src="https://alexanderdevelopment.net/content/images/2017/08/Postman_2017-08-09_12-44-19-redacted.png#img-thumbnail" alt="Running Dynamics 365 Configuration Data Mover jobs in Azure Functions"></p>
<p>The only required parameters are &quot;code&quot; and &quot;jobdata.&quot; &quot;Code&quot; is the function key you copied earlier. &quot;Jobdata&quot; is the content of a Configuration Data Mover job XML file. If you do not have the source/target connection details saved in your &quot;jobdata&quot; XML, you will need to also include &quot;source&quot; and &quot;target&quot; connection string parameters in your request. If you do have connection details saved in the &quot;jobdata&quot; XML and you also supply &quot;source&quot; and &quot;target&quot; connection string parameters, they will be used instead of what is in the &quot;jobdata&quot; XML.</p>
<p>Assuming everything goes as expected, you should get a &quot;job finished with no errors&quot; response like this:<br>
<img src="https://alexanderdevelopment.net/content/images/2017/08/Postman_2017-08-09_12-45-11.png#img-thumbnail" alt="Running Dynamics 365 Configuration Data Mover jobs in Azure Functions"></p>
<p>If you still have the function editor interface open, you'll see new log entries like this:<br>
<img src="https://alexanderdevelopment.net/content/images/2017/08/chrome_2017-08-09_12-44-48.png#img-thumbnail" alt="Running Dynamics 365 Configuration Data Mover jobs in Azure Functions"></p>
<h4 id="caveats">Caveats</h4>
<ol>
<li>I originally built the Configuration Data Mover to use Apache log4net for detailed logging. The AlexanderDevelopment.ConfigDataMover.Lib library here is still trying to use log4net, but those log entries aren't going anywhere. I'll probably look into modifying the logging approach in the library so that it works better in situations where the library used like this. The upshot is that what I've outlined here will give you only a basic success/failure message.</li>
<li>Currently the AlexanderDevelopment.ConfigDataMover.Lib library can either connect to a live CRM instance or read configuration data from a JSON file that it can open. I have a future enhancement in mind that would allow for configuration data to be passed to the library to make it more flexible.</li>
</ol>
</div>]]></content:encoded></item><item><title><![CDATA[Updated Dynamics 365 Configuration Data Mover to support new online regions]]></title><description><![CDATA[<div class="kg-card-markdown"><p>About two weeks ago a commenter mentioned that my Configuration Data Mover wasn't working with UK Dynamics 365 online organizations that had been created since the change to the <em>orgname.crm11.dynamics.com</em> URL structure. I've released a new version with an updated SDK reference that has resolved the issue.</p></div>]]></description><link>https://alexanderdevelopment.net/post/2017/07/12/updated-dynamics-365-configuration-data-mover-to-support-new-online-regions/</link><guid isPermaLink="false">5a5837246636a30001b978c7</guid><category><![CDATA[Microsoft Dynamics CRM]]></category><category><![CDATA[Dynamics 365]]></category><category><![CDATA[Configuration Data Mover]]></category><category><![CDATA[integration]]></category><category><![CDATA[utilities]]></category><dc:creator><![CDATA[Lucas Alexander]]></dc:creator><pubDate>Wed, 12 Jul 2017 15:17:30 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>About two weeks ago a commenter mentioned that my Configuration Data Mover wasn't working with UK Dynamics 365 online organizations that had been created since the change to the <em>orgname.crm11.dynamics.com</em> URL structure. I've released a new version with an updated SDK reference that has resolved the issue.</p>
<p>If you are using an older version of the data mover and you are working with online orgs in a <a href="https://technet.microsoft.com/en-us/library/dn956534.aspx">new region</a>, you may want to go ahead and upgrade to the latest version <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases/tag/v2.1.6393.21981">here</a>.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Dynamics 365 Configuration Data Mover v2.1]]></title><description><![CDATA[<div class="kg-card-markdown"><p>I've released an updated version of my popular CRM Configuration Data Mover utility that includes the following features:</p>
<ul>
<li>Steps can now be set as create-only, update-only or create+update.</li>
<li>You can browse to data files using a standard file open dialog window.</li>
</ul>
<p>This upgrade is fully compatible with existing job</p></div>]]></description><link>https://alexanderdevelopment.net/post/2017/03/17/dynamics-365-configuration-data-mover-v2-1/</link><guid isPermaLink="false">5a5837246636a30001b9789f</guid><category><![CDATA[Microsoft Dynamics CRM]]></category><category><![CDATA[Dynamics 365]]></category><category><![CDATA[Configuration Data Mover]]></category><category><![CDATA[integration]]></category><category><![CDATA[utilities]]></category><dc:creator><![CDATA[Lucas Alexander]]></dc:creator><pubDate>Fri, 17 Mar 2017 21:33:47 GMT</pubDate><media:content url="https://alexanderdevelopment.net/content/images/2017/03/AlexanderDevelopment-ConfigDataMover_2017-03-17_16-27-57.png" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://alexanderdevelopment.net/content/images/2017/03/AlexanderDevelopment-ConfigDataMover_2017-03-17_16-27-57.png" alt="Dynamics 365 Configuration Data Mover v2.1"><p>I've released an updated version of my popular CRM Configuration Data Mover utility that includes the following features:</p>
<ul>
<li>Steps can now be set as create-only, update-only or create+update.</li>
<li>You can browse to data files using a standard file open dialog window.</li>
</ul>
<p>This upgrade is fully compatible with existing job files.</p>
<h4 id="gettingthedynamics365configurationdatamover">Getting the Dynamics 365 Configuration Data Mover</h4>
<p>The source code is available in my GitHub repository <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover">here</a>.</p>
<p>A compiled version can be downloaded <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases">here</a>.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Dynamics 365 Configuration Data Mover v2.0.1.2]]></title><description><![CDATA[<div class="kg-card-markdown"><p>I've released an updated version of my popular CRM Configuration Data Mover utility that fixes a small annoyance in the previous version where you could open multiple instances of the set connection, about and check for upgrade windows. This upgrade is fully compatible with existing job files.</p>
<h4 id="gettingthedynamics365configurationdatamover">Getting the Dynamics</h4></div>]]></description><link>https://alexanderdevelopment.net/post/2017/02/27/dynamics-crm-configuration-data-mover-v2-0-1-2/</link><guid isPermaLink="false">5a5837246636a30001b97899</guid><category><![CDATA[Microsoft Dynamics CRM]]></category><category><![CDATA[Dynamics 365]]></category><category><![CDATA[Configuration Data Mover]]></category><category><![CDATA[integration]]></category><category><![CDATA[utilities]]></category><dc:creator><![CDATA[Lucas Alexander]]></dc:creator><pubDate>Mon, 27 Feb 2017 22:35:20 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>I've released an updated version of my popular CRM Configuration Data Mover utility that fixes a small annoyance in the previous version where you could open multiple instances of the set connection, about and check for upgrade windows. This upgrade is fully compatible with existing job files.</p>
<h4 id="gettingthedynamics365configurationdatamover">Getting the Dynamics 365 Configuration Data Mover</h4>
<p>The source code is available in my GitHub repository <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover">here</a>.</p>
<p>A compiled version can be downloaded <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases">here</a>.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Dynamics 365 Configuration Data Mover v2.0]]></title><description><![CDATA[<div class="kg-card-markdown"><p>I've released an updated version of my popular CRM Configuration Data Mover utility. This version now supports Dynamics 365 and has an updated GUI built with Windows Presentation Foundation that replaces the previous Windows Forms GUI.</p>
<p>Jobs that were created with earlier versions of the tool will work with this</p></div>]]></description><link>https://alexanderdevelopment.net/post/2017/02/04/dynamics-365-configuration-data-mover-v2-0/</link><guid isPermaLink="false">5a5837246636a30001b97883</guid><category><![CDATA[Microsoft Dynamics CRM]]></category><category><![CDATA[Dynamics 365]]></category><category><![CDATA[integration]]></category><category><![CDATA[utilities]]></category><category><![CDATA[Configuration Data Mover]]></category><dc:creator><![CDATA[Lucas Alexander]]></dc:creator><pubDate>Sun, 05 Feb 2017 04:31:37 GMT</pubDate><media:content url="https://alexanderdevelopment.net/content/images/2017/02/AlexanderDevelopment-ConfigDataMover_2017-02-04_22-16-33.png" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://alexanderdevelopment.net/content/images/2017/02/AlexanderDevelopment-ConfigDataMover_2017-02-04_22-16-33.png" alt="Dynamics 365 Configuration Data Mover v2.0"><p>I've released an updated version of my popular CRM Configuration Data Mover utility. This version now supports Dynamics 365 and has an updated GUI built with Windows Presentation Foundation that replaces the previous Windows Forms GUI.</p>
<p>Jobs that were created with earlier versions of the tool will work with this version, but you will have to update your CRM connection parameters to specify the authorization type - Active Directory, IFD or Office 365.<br>
<img src="https://alexanderdevelopment.net/content/images/2017/02/AlexanderDevelopment-ConfigDataMover_2017-02-04_22-00-56.png#img-thumbnail" alt="Dynamics 365 Configuration Data Mover v2.0"></p>
<p>The other main change in the client is the way GUID mappings are entered. GUIDs are now entered in a text box with each mapping on a separate line. A &quot;-&gt;&quot; is used to separate source and target. The screenshot below shows the new UI.<br>
<img src="https://alexanderdevelopment.net/content/images/2017/02/AlexanderDevelopment-ConfigDataMover_2017-02-04_22-09-14.png#img-thumbnail" alt="Dynamics 365 Configuration Data Mover v2.0"></p>
<h4 id="gettingthedynamicscrmconfigurationdatamover">Getting the Dynamics CRM Configuration Data Mover</h4>
<p>The source code is available in my GitHub repository <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover">here</a>.</p>
<p>A compiled version can be downloaded <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases">here</a>.</p>
<p>Please let me know what you think of this new version in the comments section below.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Dynamics CRM Configuration Data Mover v1.11]]></title><description><![CDATA[<div class="kg-card-markdown"><p>I've released an updated version of my <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases/latest">Dynamics CRM Configuration Data Mover</a> tool that includes the following enhancements:</p>
<ul>
<li>Validation for FetchXML queries against the Dynamics CRM 2016 FetchXML XSD when jobs are saved through the GUI client and at the start of a job before any data is processed</li>
<li>Better</li></ul></div>]]></description><link>https://alexanderdevelopment.net/post/2016/06/29/dynamics-crm-configuration-data-mover-v1-11/</link><guid isPermaLink="false">5a5837236636a30001b97835</guid><category><![CDATA[Microsoft Dynamics CRM]]></category><category><![CDATA[Configuration Data Mover]]></category><category><![CDATA[utilities]]></category><category><![CDATA[integration]]></category><dc:creator><![CDATA[Lucas Alexander]]></dc:creator><pubDate>Wed, 29 Jun 2016 22:08:03 GMT</pubDate><media:content url="https://alexanderdevelopment.net/content/images/2016/06/2016-06-29_17-04-56-1.png" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://alexanderdevelopment.net/content/images/2016/06/2016-06-29_17-04-56-1.png" alt="Dynamics CRM Configuration Data Mover v1.11"><p>I've released an updated version of my <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases/latest">Dynamics CRM Configuration Data Mover</a> tool that includes the following enhancements:</p>
<ul>
<li>Validation for FetchXML queries against the Dynamics CRM 2016 FetchXML XSD when jobs are saved through the GUI client and at the start of a job before any data is processed</li>
<li>Better error reporting in the GUI client</li>
<li>GUID mapping for the root business unit's default team when the option to map the root business unit is selected</li>
</ul>
<h4 id="gettingthedynamicscrmconfigurationdatamover">Getting the Dynamics CRM Configuration Data Mover</h4>
<p>The source code is available in my GitHub repository <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover">here</a>.</p>
<p>A compiled version can be downloaded <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases">here</a>.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Dynamics CRM Configuration Data Mover v1.10]]></title><description><![CDATA[<div class="kg-card-markdown"><p>I've released an updated version of my <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases/latest">Dynamics CRM Configuration Data Mover</a> tool that adds the ability to synchronize entityimage attributes stored in flat-file extracts. Previous versions of the tool already allowed for entityimage synchronization when running a job directly between source and target CRM systems.</p>
<h4 id="gettingthedynamicscrmconfigurationdatamover">Getting the Dynamics CRM</h4></div>]]></description><link>https://alexanderdevelopment.net/post/2016/05/06/dynamics-crm-configuration-data-mover-v1-10/</link><guid isPermaLink="false">5a5837236636a30001b97828</guid><category><![CDATA[Microsoft Dynamics CRM]]></category><category><![CDATA[Configuration Data Mover]]></category><category><![CDATA[utilities]]></category><category><![CDATA[integration]]></category><dc:creator><![CDATA[Lucas Alexander]]></dc:creator><pubDate>Fri, 06 May 2016 22:31:12 GMT</pubDate><media:content url="https://alexanderdevelopment.net/content/images/2016/05/2016-05-06_17-28-49.png" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://alexanderdevelopment.net/content/images/2016/05/2016-05-06_17-28-49.png" alt="Dynamics CRM Configuration Data Mover v1.10"><p>I've released an updated version of my <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases/latest">Dynamics CRM Configuration Data Mover</a> tool that adds the ability to synchronize entityimage attributes stored in flat-file extracts. Previous versions of the tool already allowed for entityimage synchronization when running a job directly between source and target CRM systems.</p>
<h4 id="gettingthedynamicscrmconfigurationdatamover">Getting the Dynamics CRM Configuration Data Mover</h4>
<p>The source code is available in my GitHub repository <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover">here</a>.</p>
<p>A compiled version can be downloaded <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases">here</a>.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Dynamics CRM Configuration Data Mover v1.9]]></title><description><![CDATA[<div class="kg-card-markdown"><p>I've released an updated version of my <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases/latest">Dynamics CRM Configuration Data Mover</a> tool that includes the following enhancements:</p>
<ul>
<li>Setting statecode and statuscode values on create or update is now supported. The tool will not set statuscode unless statecode is also specified.</li>
<li>Record ownership can now be changed on updates.</li>
</ul>
<h4 id="gettingthedynamicscrmconfigurationdatamover">Getting</h4></div>]]></description><link>https://alexanderdevelopment.net/post/2016/04/24/dynamics-crm-configuration-data-mover-v1-9/</link><guid isPermaLink="false">5a5837236636a30001b9781f</guid><category><![CDATA[Configuration Data Mover]]></category><category><![CDATA[utilities]]></category><category><![CDATA[integration]]></category><category><![CDATA[Microsoft Dynamics CRM]]></category><dc:creator><![CDATA[Lucas Alexander]]></dc:creator><pubDate>Mon, 25 Apr 2016 02:41:15 GMT</pubDate><media:content url="https://alexanderdevelopment.net/content/images/2016/04/diesel-bandana-crop-1.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://alexanderdevelopment.net/content/images/2016/04/diesel-bandana-crop-1.jpg" alt="Dynamics CRM Configuration Data Mover v1.9"><p>I've released an updated version of my <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases/latest">Dynamics CRM Configuration Data Mover</a> tool that includes the following enhancements:</p>
<ul>
<li>Setting statecode and statuscode values on create or update is now supported. The tool will not set statuscode unless statecode is also specified.</li>
<li>Record ownership can now be changed on updates.</li>
</ul>
<h4 id="gettingthedynamicscrmconfigurationdatamover">Getting the Dynamics CRM Configuration Data Mover</h4>
<p>The source code is available in my GitHub repository <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover">here</a>.</p>
<p>A compiled version can be downloaded <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases">here</a>.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Moving Dynamics CRM service and holiday calendars with the Configuration Data Mover]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Last month a colleague of mine asked if it would be possible to synchronize Dynamics CRM service calendars and holiday calendars using my <a href="https://alexanderdevelopment.net/tag/configuration-data-mover/">Configuration Data Mover tool</a>. At first it looked like it would be complicated, but after trying a few different approaches, it turned out to be incredibly simple.</p></div>]]></description><link>https://alexanderdevelopment.net/post/2016/03/04/moving-dynamics-crm-calendar-records-with-the-configuration-data-mover/</link><guid isPermaLink="false">5a5837236636a30001b97814</guid><category><![CDATA[Microsoft Dynamics CRM]]></category><category><![CDATA[Configuration Data Mover]]></category><category><![CDATA[integration]]></category><category><![CDATA[utilities]]></category><dc:creator><![CDATA[Lucas Alexander]]></dc:creator><pubDate>Fri, 04 Mar 2016 14:54:24 GMT</pubDate><media:content url="https://alexanderdevelopment.net/content/images/2016/03/iexplore_2016-03-04_08-46-54.png" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://alexanderdevelopment.net/content/images/2016/03/iexplore_2016-03-04_08-46-54.png" alt="Moving Dynamics CRM service and holiday calendars with the Configuration Data Mover"><p>Last month a colleague of mine asked if it would be possible to synchronize Dynamics CRM service calendars and holiday calendars using my <a href="https://alexanderdevelopment.net/tag/configuration-data-mover/">Configuration Data Mover tool</a>. At first it looked like it would be complicated, but after trying a few different approaches, it turned out to be incredibly simple. Before getting to the solution, let's look at how Dynamics CRM stores calendar data.</p>
<p><em>(If you don't care about the details of how it all works, <a href="#download">skip to the end of this post</a> for a link to download a sample job file.)</em></p>
<h4 id="dynamicscrmcalendarentities">Dynamics CRM calendar entities</h4>
<p>There are only two types of <a href="https://msdn.microsoft.com/en-us/library/gg328538.aspx">calendar entities</a> in Dynamics CRM - calendars and calendarrules.</p>
<blockquote>
<p>A calendar describes the availability of a service or a resource. Calendars are related to calendarrule records, which include details about the duration, start and end times, and recurring patterns of events included in the calendar.</p>
</blockquote>
<p>Although there's only one calendar entity in Dynamics CRM, there are <a href="https://msdn.microsoft.com/en-us/library/dn689038.aspx">four types of calendars</a> that are differentiated by their &quot;type&quot; attribute:</p>
<ol>
<li><strong>Default (type 0)</strong> - All calendars that are not customer service, holiday schedule, or inner calendars.</li>
<li><strong>Customer Service (type 1)</strong> - Service calendars for customer service.</li>
<li><strong>Holiday Schedule (type 2)</strong> - Holiday schedule calendars for customer service.</li>
<li><strong>Inner Calendar type (type -1)</strong> - Inner Calendars are used by other calendars to build a graph of time slots available for customer service or service scheduling to be performed.</li>
</ol>
<p>Calendar records also have a self-referencing relationship. This is how a customer service calendar can have a linked holiday schedule calendar.</p>
<p>Here's a FetchXML query to retrieve all the customer service calendars in an organization:</p>
<pre><code>&lt;fetch distinct=&quot;false&quot; mapping=&quot;logical&quot; output-format=&quot;xml-platform&quot; version=&quot;1.0&quot; &gt;
    &lt;entity name=&quot;calendar&quot; &gt;
        &lt;attribute name=&quot;name&quot; /&gt;
        &lt;attribute name=&quot;typename&quot; /&gt;
        &lt;attribute name=&quot;type&quot; /&gt;
        &lt;attribute name=&quot;primaryuserid&quot; /&gt;
        &lt;attribute name=&quot;isshared&quot; /&gt;
        &lt;attribute name=&quot;holidayschedulecalendaridname&quot; /&gt;
        &lt;attribute name=&quot;holidayschedulecalendarid&quot; /&gt;
        &lt;attribute name=&quot;description&quot; /&gt;
        &lt;attribute name=&quot;businessunitid&quot; /&gt;
        &lt;order descending=&quot;true&quot; attribute=&quot;type&quot; /&gt;
		&lt;filter type=&quot;and&quot;&gt;
			&lt;condition attribute=&quot;type&quot; operator=&quot;in&quot;&gt;
				&lt;value&gt;1&lt;/value&gt;
			&lt;/condition&gt;
		&lt;/filter&gt;
    &lt;/entity&gt;
&lt;/fetch&gt;
</code></pre>
<p>As for the calendarrule records, they <a href="https://msdn.microsoft.com/en-us/library/gg327912.aspx">cannot be directly modified using the SDK</a>, but you can access them through their parent calendar records. Although the query above does not explicitly request the calendarrules, CRM does return them in the response. This allows the Configuration Data Mover to copy the calendars with their associated rules and closures to a destination organization relatively easily.</p>
<h4 id="copyingthedata">Copying the data</h4>
<p>Copying service and holiday calendars from one CRM organization to another with the Configuration Data Mover requires three steps:</p>
<ol>
<li>Copy inner calendars</li>
<li>Copy holiday calendars</li>
<li>Copy customer service calendars</li>
</ol>
<p><a name="download"></a>Here's a link to a sample job file that is already set up to do that: <a href="https://raw.githubusercontent.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/master/samplefiles/calendars-closures-noconnection.xml">calendars-closures-noconnection.xml</a>.</p>
<p>One thing to keep in mind is that the schema I was using to serialize output data to a flat-file destination up to version 1.7.1.1 does not support a nested entity structure like CRM uses to store calendar rules, so you need to make sure you are using that version or later if you want to use a flat-file source/target jobs. Otherwise you will get an error when attempting to import the calendar data from a flat-file source.</p>
<h4 id="gettingthedynamicscrmconfigurationdatamover">Getting the Dynamics CRM Configuration Data Mover</h4>
<p>The source code is available in my GitHub repository <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover">here</a>.</p>
<p>A compiled version can be downloaded <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases">here</a>.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Dynamics CRM Configuration Data Mover v1.7]]></title><description><![CDATA[<div class="kg-card-markdown"><p>I've released an updated version of my <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases/latest">Dynamics CRM Configuration Data Mover</a> tool that includes the following GUI enhancements:</p>
<ul>
<li>Password masking in connection form (saved passwords are still stored as plain text)</li>
<li>Improved record error logging to show reason for import failure</li>
<li>Improved connection error handling for import jobs</li>
</ul>
<p>Thanks</p></div>]]></description><link>https://alexanderdevelopment.net/post/2016/02/11/dynamics-crm-configuration-data-mover-v1-7/</link><guid isPermaLink="false">5a5837236636a30001b9780f</guid><category><![CDATA[Microsoft Dynamics CRM]]></category><category><![CDATA[Configuration Data Mover]]></category><category><![CDATA[integration]]></category><category><![CDATA[utilities]]></category><dc:creator><![CDATA[Lucas Alexander]]></dc:creator><pubDate>Fri, 12 Feb 2016 03:00:00 GMT</pubDate><media:content url="https://alexanderdevelopment.net/content/images/2016/02/AlexanderDevelopment-ConfigDataMover_2016-02-11_20-50-20.png" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://alexanderdevelopment.net/content/images/2016/02/AlexanderDevelopment-ConfigDataMover_2016-02-11_20-50-20.png" alt="Dynamics CRM Configuration Data Mover v1.7"><p>I've released an updated version of my <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases/latest">Dynamics CRM Configuration Data Mover</a> tool that includes the following GUI enhancements:</p>
<ul>
<li>Password masking in connection form (saved passwords are still stored as plain text)</li>
<li>Improved record error logging to show reason for import failure</li>
<li>Improved connection error handling for import jobs</li>
</ul>
<p>Thanks to GitHub user <a href="https://github.com/btull89">btull89</a> for suggesting the first two items and submitting some code for them. I'm always looking for feedback and contributions, so if anyone else would like to suggest a feature or write some code, please let me know!</p>
<h4 id="gettingthedynamicscrmconfigurationdatamover">Getting the Dynamics CRM Configuration Data Mover</h4>
<p>The source code is available in my GitHub repository <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover">here</a>.</p>
<p>A compiled version can be downloaded <a href="https://github.com/lucasalexander/AlexanderDevelopment.ConfigDataMover/releases">here</a>.</p>
</div>]]></content:encoded></item></channel></rss>