{"id":964,"date":"2020-11-26T17:16:47","date_gmt":"2020-11-26T16:16:47","guid":{"rendered":"http:\/\/daxvisionerp.com\/?p=964"},"modified":"2025-10-22T14:58:03","modified_gmt":"2025-10-22T14:58:03","slug":"icremental-code-upgrade-ax2012-to-d365scm","status":"publish","type":"post","link":"https:\/\/daxvisionerp.com\/home\/icremental-code-upgrade-ax2012-to-d365scm\/","title":{"rendered":"Incremental code upgrade, AX2012 to D365SCM"},"content":{"rendered":"\n<p>We are working on an AX2012 to D365SCM upgrade project. Technical code upgrade happened a long time ago. After that, we worked on the functional redesign, integrations, data migration, automated build and release, functional tests, and so on. It takes time and we are still using AX 2012. We have some fixes and new developments from time to time. We did not have a code freeze as we knew it will take time. So now we need to upgrade the new AX2012 code that we have developed after our technical code upgrade to D365SCM. There are a few things to consider and some tricks that I would like to share. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to find what needs to be upgraded?<\/h2>\n\n\n\n<p>As we used TFS for version control in AX 2012, I can go to history. I can find the last changeset that was included in the last code upgrade and compare it with the current code. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"http:\/\/daxvisionerp.com\/wp-content\/uploads\/2020\/11\/image-1.png\" alt=\"\" class=\"wp-image-965\"\/><figcaption class=\"wp-element-caption\">TFS compare 1<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"http:\/\/daxvisionerp.com\/wp-content\/uploads\/2020\/11\/image-2.png\" alt=\"\" class=\"wp-image-966\"\/><figcaption class=\"wp-element-caption\">TFS compare 2<\/figcaption><\/figure>\n\n\n\n<p>The three options will be handled in a different way.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Items that exist only in the source &#8211; these are the deleted objects<\/li>\n\n\n\n<li>Items that exist only in the target &#8211; these are two different types:\n<ul class=\"wp-block-list\">\n<li>new custom code<\/li>\n\n\n\n<li>newly modified Microsoft code<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Items that are differ &#8211; these are the ones that were already modified when we made the earlier code upgrade, but they were modified again since<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Use LCS Code upgrade service on incremental upgrades too<\/h2>\n\n\n\n<p>To help with the code upgrade, I used the LCS Code upgrade service. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"http:\/\/daxvisionerp.com\/wp-content\/uploads\/2020\/11\/image-3.png\" alt=\"\" class=\"wp-image-967\"\/><figcaption class=\"wp-element-caption\">LCS code upgrade tool<\/figcaption><\/figure>\n\n\n\n<p> Here I uploaded our latest AX 2012 modelstore and used the result to be able to copy-paste XML files and use them in comparison or creation of elements in D365SCM.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Use TF.EXE to help task delegation<\/h2>\n\n\n\n<p>To help the delegation of tasks and the monitoring of the progress, we used an Excel sheet that contains a list of objects that needs to be upgraded. It is not that straight forward, how to get such a list. I used TF.EXE to get the list. The exact command was:<\/p>\n\n\n\n<p><code>tf diff $\/AX2012\/AX6Dev\/JAD \/version:c1772~c1879 \/recursive \/format:Brief &gt; c:\\diffFormatBrief.csv<\/code><\/p>\n\n\n\n<p>The result is grouped by element type and needs some extra columns, for example, an &#8220;Assigned to&#8221; and a &#8220;Status&#8221; column, but that depends on you and takes just a few minutes to finalize the format.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"http:\/\/daxvisionerp.com\/wp-content\/uploads\/2020\/11\/image-4.png\" alt=\"\" class=\"wp-image-968\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<p>This post was about incremental code upgrades which you need to do on many projects where there is no code freeze in the older version of AX until the upgrade is going. My tips for you are <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>use TFS compare on the Visual Studio UI<\/li>\n\n\n\n<li>use LCS Code Upgrade tool<\/li>\n\n\n\n<li>use TF.EXE for task delegation<\/li>\n<\/ul>\n\n\n\n<p>Good luck and enjoy \ud83d\ude09<\/p>\n\n\n\n<p><\/p>\n\n\n<div class=\"taxonomy-post_tag wp-block-post-terms\"><a href=\"https:\/\/daxvisionerp.com\/home\/tag\/msdyn365fo\/\" rel=\"tag\">#MSDyn365FO<\/a><span class=\"wp-block-post-terms__separator\">, <\/span><a href=\"https:\/\/daxvisionerp.com\/home\/tag\/code-upgrade\/\" rel=\"tag\">Code upgrade<\/a><span class=\"wp-block-post-terms__separator\">, <\/span><a href=\"https:\/\/daxvisionerp.com\/home\/tag\/upgrade\/\" rel=\"tag\">upgrade<\/a><\/div>","protected":false},"excerpt":{"rendered":"<p>We are working on an AX2012 to D365SCM upgrade project. Technical code upgrade happened a long time ago. After that, we worked on the functional redesign, integrations, data migration, automated build and release, functional tests, and so on. It takes time and we are still using AX 2012. We have some fixes and new developments [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"1080","footnotes":""},"categories":[23,19],"tags":[25,55,41],"class_list":["post-964","post","type-post","status-publish","format-standard","hentry","category-ax-2012","category-dynamics-365fo","tag-msdyn365fo","tag-code-upgrade","tag-upgrade"],"_links":{"self":[{"href":"https:\/\/daxvisionerp.com\/home\/wp-json\/wp\/v2\/posts\/964","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/daxvisionerp.com\/home\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/daxvisionerp.com\/home\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/daxvisionerp.com\/home\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/daxvisionerp.com\/home\/wp-json\/wp\/v2\/comments?post=964"}],"version-history":[{"count":1,"href":"https:\/\/daxvisionerp.com\/home\/wp-json\/wp\/v2\/posts\/964\/revisions"}],"predecessor-version":[{"id":1367,"href":"https:\/\/daxvisionerp.com\/home\/wp-json\/wp\/v2\/posts\/964\/revisions\/1367"}],"wp:attachment":[{"href":"https:\/\/daxvisionerp.com\/home\/wp-json\/wp\/v2\/media?parent=964"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/daxvisionerp.com\/home\/wp-json\/wp\/v2\/categories?post=964"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/daxvisionerp.com\/home\/wp-json\/wp\/v2\/tags?post=964"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}