{"id":43047,"date":"2025-12-10T15:53:08","date_gmt":"2025-12-10T10:23:08","guid":{"rendered":"https:\/\/www.inogic.com\/blog\/?p=43047"},"modified":"2025-12-10T15:53:08","modified_gmt":"2025-12-10T10:23:08","slug":"dynamics-365-solution-consolidation-how-to-use-cloneassolutionrequest-to-merge-patches-and-clean-up-your-environment","status":"publish","type":"post","link":"https:\/\/www.inogic.com\/blog\/2025\/12\/dynamics-365-solution-consolidation-how-to-use-cloneassolutionrequest-to-merge-patches-and-clean-up-your-environment\/","title":{"rendered":"Dynamics 365 Solution Consolidation: How to Use CloneAsSolutionRequest to Merge Patches and Clean Up Your Environment"},"content":{"rendered":"<p><img decoding=\"async\" class=\"alignnone size-full wp-image-43055\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/Dynamics-365-Solution-Consolidation-How-to-Use-CloneAsSolutionRequest-to-Merge-Patches-and-Clean-Up-Your-Environment.png\" alt=\"Dynamics 365 Solution Consolidation How to Use CloneAsSolutionRequest to Merge Patches and Clean Up Your Environment\" width=\"2100\" height=\"1200\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/Dynamics-365-Solution-Consolidation-How-to-Use-CloneAsSolutionRequest-to-Merge-Patches-and-Clean-Up-Your-Environment.png 2100w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/Dynamics-365-Solution-Consolidation-How-to-Use-CloneAsSolutionRequest-to-Merge-Patches-and-Clean-Up-Your-Environment-300x171.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/Dynamics-365-Solution-Consolidation-How-to-Use-CloneAsSolutionRequest-to-Merge-Patches-and-Clean-Up-Your-Environment-1024x585.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/Dynamics-365-Solution-Consolidation-How-to-Use-CloneAsSolutionRequest-to-Merge-Patches-and-Clean-Up-Your-Environment-768x439.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/Dynamics-365-Solution-Consolidation-How-to-Use-CloneAsSolutionRequest-to-Merge-Patches-and-Clean-Up-Your-Environment-1536x878.png 1536w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/Dynamics-365-Solution-Consolidation-How-to-Use-CloneAsSolutionRequest-to-Merge-Patches-and-Clean-Up-Your-Environment-2048x1170.png 2048w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/Dynamics-365-Solution-Consolidation-How-to-Use-CloneAsSolutionRequest-to-Merge-Patches-and-Clean-Up-Your-Environment-660x377.png 660w\" sizes=\"(max-width: 2100px) 100vw, 2100px\" \/><\/p>\n<p><strong>Introduction<\/strong><\/p>\n<p>In Dynamics 365 and the Power Platform, solutions are the primary vehicle for application lifecycle management (ALM). As a best practice, direct changes to the base (parent) solution in production or UAT environments should be avoided. Instead, every hotfix or small enhancement should be applied via patches.<\/p>\n<p>Each patch adds a separate layer on top of the original solution. However, active projects often generate dozens of patches over time. While this is technically correct, it leads to:<\/p>\n<ul>\n<li>A cluttered solution list<\/li>\n<li>Increased ALM complexity<\/li>\n<li>Confusion during audits or troubleshooting<\/li>\n<li>Difficulty preparing for future managed exports<\/li>\n<\/ul>\n<p>A common challenge arises when developers forget to periodically clone the main solution. This process can be automated by scheduling a job, every six months, for example &#8211; to trigger the CloneAsSolutionRequest.<\/p>\n<p>This operation merges all existing patches into a single consolidated unmanaged solution and removes the old patches, resulting in a clean, streamlined baseline ready for future development or managed solution export.<\/p>\n<p>In this blog post, we\u2019ll walk through a real-world scenario, share the exact code, and explore the outcomes of this approach.<\/p>\n<h3><strong>Real-World Use Case: Consolidating Multiple Patches<\/strong><\/h3>\n<p>Imagine we have a solution called CustomerPortaIEnhancements that contains the core entities for our customer portal, including the Portal Support Ticket entity (as shown in the image below).<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-43048\" style=\"border: 1px solid #000000; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/1Dynamics-365-Solution-Consolidation.png\" alt=\"Dynamics 365 Solution Consolidation\" width=\"1920\" height=\"859\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/1Dynamics-365-Solution-Consolidation.png 1920w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/1Dynamics-365-Solution-Consolidation-300x134.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/1Dynamics-365-Solution-Consolidation-1024x458.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/1Dynamics-365-Solution-Consolidation-768x344.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/1Dynamics-365-Solution-Consolidation-1536x687.png 1536w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/1Dynamics-365-Solution-Consolidation-660x295.png 660w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/p>\n<p><strong>Scenario:<\/strong><\/p>\n<p>After go-live, the business requests two quick enhancements in production, one after a few months, and another later:<\/p>\n<p>1. Add a new field &#8220;<strong>Priority<\/strong>&#8221; to the Portal Support Ticket entity<\/p>\n<ul>\n<li>Create a patch for the base solution and add the Priority field inside that patch<\/li>\n<\/ul>\n<p>(The below screenshot shows where the Priority field is added via the patch).<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-43049\" style=\"border: 1px solid #000000; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/2Dynamics-365-Solution-Consolidation.png\" alt=\"Dynamics 365 Solution Consolidation\" width=\"1920\" height=\"889\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/2Dynamics-365-Solution-Consolidation.png 1920w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/2Dynamics-365-Solution-Consolidation-300x139.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/2Dynamics-365-Solution-Consolidation-1024x474.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/2Dynamics-365-Solution-Consolidation-768x356.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/2Dynamics-365-Solution-Consolidation-1536x711.png 1536w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/2Dynamics-365-Solution-Consolidation-660x306.png 660w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/p>\n<p>2. Add a new custom entity called &#8220;<strong>Domain<\/strong>&#8221;<\/p>\n<ul>\n<li>A few months later, a second <strong>patch<\/strong> is created, this time containing the Domain entity. (see screenshot below where the Domain entity is created in the second patch).<\/li>\n<\/ul>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-43050\" style=\"border: 1px solid #000000; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/3Dynamics-365-Solution-Consolidation.png\" alt=\"Dynamics 365 Solution Consolidation\" width=\"1917\" height=\"587\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/3Dynamics-365-Solution-Consolidation.png 1917w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/3Dynamics-365-Solution-Consolidation-300x92.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/3Dynamics-365-Solution-Consolidation-1024x314.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/3Dynamics-365-Solution-Consolidation-768x235.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/3Dynamics-365-Solution-Consolidation-1536x470.png 1536w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/3Dynamics-365-Solution-Consolidation-660x202.png 660w\" sizes=\"(max-width: 1917px) 100vw, 1917px\" \/><\/p>\n<p>Both patches work perfectly, but the <strong>solution layers start stacking up<\/strong> and the environment becomes cluttered.<\/p>\n<p>This is where <strong>CloneAsSolutionRequest<\/strong> provides the clean-up we need.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-43051\" style=\"border: 1px solid #000000; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/4Dynamics-365-Solution-Consolidation.png\" alt=\"Dynamics 365 Solution Consolidation\" width=\"1888\" height=\"765\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/4Dynamics-365-Solution-Consolidation.png 1888w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/4Dynamics-365-Solution-Consolidation-300x122.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/4Dynamics-365-Solution-Consolidation-1024x415.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/4Dynamics-365-Solution-Consolidation-768x311.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/4Dynamics-365-Solution-Consolidation-1536x622.png 1536w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/4Dynamics-365-Solution-Consolidation-660x267.png 660w\" sizes=\"(max-width: 1888px) 100vw, 1888px\" \/><br \/>\n<strong>The Solution: CloneAsSoIutionRequest<\/strong><\/p>\n<p>To clean this up, we execute <strong>CloneAsSoIutionRequest<\/strong> on the parent (base) solution.<\/p>\n<p>This automatically performs three key actions:<\/p>\n<ol>\n<li>Creates a brand-new unmanaged solution.<\/li>\n<li>Merges all patches into this new solution (including entities, fields, forms, views, etc.).<\/li>\n<li>Deletes the old base solution and all its patches from the environment.<\/li>\n<\/ol>\n<p><strong>Code Example (using Organization Service)<\/strong><\/p>\n<pre class=\"lang:css gutter:true start:1\">CloneAsSolutionRequest request = new CloneAsSolutionRequest<\/pre>\n<p>{<\/p>\n<p>ParentSolutionUniqueName = &#8220;CustomerPortalEnhancements&#8221;,<\/p>\n<p>VersionNumber = &#8220;4.0.0.0&#8221;,<\/p>\n<p>DisplayName = &#8220;CustomerPortalEnhancements-Version 4&#8221;<\/p>\n<p>};<\/p>\n<p>&nbsp;<\/p>\n<p>CloneAsSolutionResponse response = (CloneAsSolutionResponse)service.Execute(request);<\/p>\n<p><strong>Outcome: A Clean, Merged Solution<\/strong><\/p>\n<p>After the request is executed:<\/p>\n<ul>\n<li>A new solution CustomerPortaIEnhancements &#8211; Version 4 appears (as shown in the screenshot below).<\/li>\n<\/ul>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-43052\" style=\"border: 1px solid #000000; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/5Dynamics-365-Solution-Consolidation.png\" alt=\"Dynamics 365 Solution Consolidation\" width=\"1909\" height=\"683\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/5Dynamics-365-Solution-Consolidation.png 1909w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/5Dynamics-365-Solution-Consolidation-300x107.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/5Dynamics-365-Solution-Consolidation-1024x366.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/5Dynamics-365-Solution-Consolidation-768x275.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/5Dynamics-365-Solution-Consolidation-1536x550.png 1536w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/5Dynamics-365-Solution-Consolidation-660x236.png 660w\" sizes=\"(max-width: 1909px) 100vw, 1909px\" \/><\/p>\n<ul>\n<li>The Priority field is now directly part of the Portal Support Ticket entity in the new solution.<\/li>\n<\/ul>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-43053\" style=\"border: 1px solid #000000; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/6Dynamics-365-Solution-Consolidation.png\" alt=\"Dynamics 365 Solution Consolidation\" width=\"1900\" height=\"827\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/6Dynamics-365-Solution-Consolidation.png 1900w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/6Dynamics-365-Solution-Consolidation-300x131.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/6Dynamics-365-Solution-Consolidation-1024x446.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/6Dynamics-365-Solution-Consolidation-768x334.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/6Dynamics-365-Solution-Consolidation-1536x669.png 1536w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/6Dynamics-365-Solution-Consolidation-660x287.png 660w\" sizes=\"(max-width: 1900px) 100vw, 1900px\" \/><\/p>\n<ul>\n<li>The Domain entity from the second patch is also present.<\/li>\n<\/ul>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-43054\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/7Dynamics-365-Solution-Consolidation.png\" alt=\"Dynamics 365 Solution Consolidation\" width=\"1916\" height=\"726\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/7Dynamics-365-Solution-Consolidation.png 1916w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/7Dynamics-365-Solution-Consolidation-300x114.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/7Dynamics-365-Solution-Consolidation-1024x388.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/7Dynamics-365-Solution-Consolidation-768x291.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/7Dynamics-365-Solution-Consolidation-1536x582.png 1536w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/7Dynamics-365-Solution-Consolidation-660x250.png 660w\" sizes=\"(max-width: 1916px) 100vw, 1916px\" \/><\/p>\n<ul>\n<li>The original base solution and all patches are automatically deleted, leaving the environment clean.<\/li>\n<\/ul>\n<p>You now have a single, consolidated unmanaged solution ready for future changes or deployment.<\/p>\n<p><strong>FAQs<\/strong><\/p>\n<p><strong>1. What problem does CloneAsSolutionRequest solve in Dynamics 365?<\/strong><\/p>\n<p>CloneAsSolutionRequest helps clean up environments that have accumulated multiple patches over time. It merges all existing patches into a single unmanaged solution and removes the old layers, reducing clutter and ALM complexity.<\/p>\n<p><strong>2. Why do Dynamics 365 environments end up with many patches?<\/strong><\/p>\n<p>Environments get multiple layers when every hotfix or enhancement is added through a patch instead of modifying the base solution. Over time, this creates many patch versions that can confuse audits and complicate solution management.<\/p>\n<p><strong>3. How does CloneAsSolutionRequest consolidate patches?<\/strong><\/p>\n<p>It creates a new unmanaged solution, merges all components from every patch into it, and then automatically deletes the old parent solution and its patches, leaving behind one clean consolidated solution.<\/p>\n<p><strong>4. When should I run CloneAsSolutionRequest?<\/strong><\/p>\n<p>You should run it periodically, such as every six months, or whenever your solution list becomes cluttered with patch layers. Many teams automate this process using a scheduled job.<\/p>\n<p><strong>5. What happens to entities and fields added in patches after cloning?<\/strong><\/p>\n<p>All components added in patches such as new entities, fields, forms, or views, are merged into the new consolidated solution. For example, fields like <em>Priority<\/em> or entities like <em>Domain<\/em> become part of the final merged solution.<\/p>\n<p><strong>6. Does CloneAsSolutionRequest delete old patches automatically?<\/strong><\/p>\n<p>Yes. After merging, it removes the original base solution and all associated patches, ensuring a clean and simplified solution list.<\/p>\n<p><strong>7. Do I need to rewrite or re-add components after merging patches?<\/strong><\/p>\n<p>No. Nothing is lost. The cloned solution contains every component from every patch exactly as it existed before consolidation.<\/p>\n<p><strong>8. Can CloneAsSolutionRequest help prepare solutions for managed export?<\/strong><\/p>\n<p>Yes. A consolidated solution ensures that all changes are merged into a single baseline, making it easier to export a clean managed solution without patch dependencies.<\/p>\n<p><strong>9. Does CloneAsSolutionRequest require any manual cleanup afterward?<\/strong><\/p>\n<p>No manual cleanup is required. Once the request runs, the cloned consolidated solution becomes your new baseline, and all old layers are removed automatically.<\/p>\n<p><strong>Conclusion<\/strong><\/p>\n<p>CloneAsSolutionRequest is a simple yet powerful operation that helps:<\/p>\n<ul>\n<li>Maintain a clean ALM structure<\/li>\n<li>Avoid patch clutter<\/li>\n<li>Simplify managed solution exports<\/li>\n<li>Reduce confusion during upgrades and audits<\/li>\n<\/ul>\n<p>Next time your environment is filled with patch layers, just run <strong>CloneAsSoIutionRequest<\/strong> and get a fresh, merged solution in seconds.<\/p>\n<pre class=\"lang:css gutter:true start:1\"><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Introduction In Dynamics 365 and the Power Platform, solutions are the primary vehicle for application lifecycle management (ALM). As a best practice, direct changes to the base (parent) solution in production or UAT environments should be avoided. Instead, every hotfix or small enhancement should be applied via patches. Each patch adds a separate layer on\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.inogic.com\/blog\/2025\/12\/dynamics-365-solution-consolidation-how-to-use-cloneassolutionrequest-to-merge-patches-and-clean-up-your-environment\/\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":15,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[16,2361],"tags":[3276],"class_list":["post-43047","post","type-post","status-publish","format-standard","hentry","category-dynamics-365","category-technical","tag-dynamics-365-solution-consolidation"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts\/43047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/comments?post=43047"}],"version-history":[{"count":0,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts\/43047\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/media?parent=43047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/categories?post=43047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/tags?post=43047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}