{"id":39442,"date":"2020-05-31T09:22:03","date_gmt":"2020-05-31T16:22:03","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/premier-developer\/?p=39442"},"modified":"2020-05-11T09:41:39","modified_gmt":"2020-05-11T16:41:39","slug":"upgrading-to-the-new-work-item-form-in-azure-devops","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/premier-developer\/upgrading-to-the-new-work-item-form-in-azure-devops\/","title":{"rendered":"Upgrading to the New Work Item Form in Azure DevOps"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p id=\"pragma-line-2\">Premier Field Engineer <a title=\"Greg Schunemann's LinkedIn profile\" href=\"https:\/\/www.linkedin.com\/in\/gregory-schunemann-72a893130\/\">Greg Schunemann<\/a> discusses his experience with managing work item form customizations after an upgrade to Azure DevOps Server 2019.<\/p>\n<hr id=\"pragma-line-4\" \/>\n<p id=\"pragma-line-6\">More and more organizations are upgrading their on-premises Team Foundation Server instances, many having the end goal of migrating to Azure DevOps Services in the cloud. If you are upgrading from a <em>pre-2017<\/em> version of Team Foundation Server, you&#8217;ll notice that work items have been <a title=\"New work item form in TFS 2017\" href=\"https:\/\/devblogs.microsoft.com\/devops\/new-work-item-form-in-tfs-2017\/\">given a major facelift.<\/a> If your pre-2017 Team Foundation Server collection or project has a fair number of customizations to the work item forms, there is a good possibility that your work items will look very different after upgrading to Azure DevOps Server. This is due to some changes in the XML which defines how the work items are rendered in the browser.<\/p>\n<p id=\"pragma-line-8\">This blog post will highlight a case from the field to shed some light on what changes are made to the work item form, also known as the <a title=\"Best-effort transformation docs\" href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/reference\/manage-new-form-rollout?view=tfs-2017#best-effort-transformation\">&#8216;Best-effort transformation&#8217;<\/a>. We&#8217;ll walkthrough a case from the field where the custom work item was very different after upgrade.<\/p>\n<h2 id=\"problem-statement\">Problem Statement<\/h2>\n<p id=\"pragma-line-12\">The work item type \u2018Change Request\u2019 form does not display properly in the web UI as a result of upgrading Team Foundation Server 2012 Update 4 to Azure DevOps Server 2019 Update 1. Prior to upgrade, the Change Request work item (WI) form displayed in the web UI as follows:<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-39443\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/01_ChngReqWebUI.png\" alt=\"Image 01 ChngReqWebUI\" width=\"1520\" height=\"824\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/01_ChngReqWebUI.png 1520w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/01_ChngReqWebUI-300x163.png 300w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/01_ChngReqWebUI-1024x555.png 1024w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/01_ChngReqWebUI-768x416.png 768w\" sizes=\"(max-width: 1520px) 100vw, 1520px\" \/><\/p>\n<p id=\"pragma-line-17\">Note that many of the fields shown are custom, and they are placed in what we&#8217;ll call the &#8216;header&#8217; of the form (more on that later). Also, note the grouping of fields under a section titled <strong>BETA<\/strong>; from left to right, the fields \u2018Change Required\u2019, \u2018Properties\u2019, \u2018Status\u2019 and \u2018Change Date\u2019 are shown. This same structure repeats with the subsequent sections titled <strong>Dev<\/strong>, <strong>QC<\/strong>, <strong>QA<\/strong>, and <strong>PROD<\/strong> (not shown). This structure led to a long work item form, which the user needed to scroll downwards to enter\/view all fields.<\/p>\n<p id=\"pragma-line-19\">After upgrade to Azure DevOps Server 2019 Update 1, the CMDB Change Request work item form is displayed in the web UI as follows:<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-39444\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/02_ChngReqWebLayout.png\" alt=\"Image 02 ChngReqWebLayout\" width=\"1857\" height=\"887\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/02_ChngReqWebLayout.png 1857w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/02_ChngReqWebLayout-300x143.png 300w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/02_ChngReqWebLayout-1024x489.png 1024w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/02_ChngReqWebLayout-768x367.png 768w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/02_ChngReqWebLayout-1536x734.png 1536w\" sizes=\"(max-width: 1857px) 100vw, 1857px\" \/><\/p>\n<p id=\"pragma-line-23\">Note that the <strong>Beta<\/strong> section is now pushed to the right of the form, and the fields of \u2018Properties\u2019, \u2018Status\u2019 and \u2018Change Date\u2019 are not shown. The &#8216;Properties&#8217; field is not shown until the value of &#8216;Yes&#8217; is entered for the &#8216;Change Required&#8217; filed. Once &#8216;Yes&#8217; is entered, &#8216;Properties&#8217; appears on the left of the form, under \u2018Risk\u2019. Removing the \u2018Yes\u2019 value causes the \u2018Properties\u2019 field to disappear. These same undesired behaviors and field locations are repeated for each of the <strong>Dev<\/strong>, <strong>QC<\/strong>, <strong>QA<\/strong>, and <strong>PROD<\/strong> field groups defined on the old form.<\/p>\n<h2 id=\"causes-for-incorrect-display\">Causes for incorrect display<\/h2>\n<p id=\"pragma-line-27\">Prior to TFS 2017 Update 2, the .xml tag <code>&lt;Layout&gt;<\/code> was used to render the WI form. <code>&lt;Layout&gt;<\/code> has been deprecated in favor of the new <code>&lt;WebLayout&gt;<\/code> .xml tag (although <code>&lt;Layout&gt;<\/code> is still a required element of the work item form). During the upgrade process from versions of TFS earlier than TFS 2017.2, TFS attempts a <a title=\"Best-effort transformation docs\" href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/reference\/manage-new-form-rollout?view=tfs-2017#best-effort-transformation\">&#8216;Best Effort Transformation of Layout to WebLayout&#8217;<\/a>. Depending on the complexity of the old <code>&lt;Layout&gt;<\/code> tag, there may be unexpected results.<\/p>\n<p id=\"pragma-line-29\">In the upgrade of the Change Request work item form, there were a combination of factors that led to the incorrect rendering of the WI form; these contributing factors are detailed in the following sections.<\/p>\n<h3 id=\"limits-on-customization-to-the-systemcontrols-section\">Limits on customization to the <code>SystemControls<\/code> section<\/h3>\n<p id=\"pragma-line-33\">In <code>&lt;WebLayout&gt;<\/code>, we have a section defined as <code>&lt;SystemControls&gt;<\/code>. This section acts as a WI form header and is highlighted in the screenshot below.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-39445\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/03_SystemControls.png\" alt=\"Image 03 SystemControls\" width=\"1857\" height=\"887\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/03_SystemControls.png 1857w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/03_SystemControls-300x143.png 300w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/03_SystemControls-1024x489.png 1024w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/03_SystemControls-768x367.png 768w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/03_SystemControls-1536x734.png 1536w\" sizes=\"(max-width: 1857px) 100vw, 1857px\" \/><\/p>\n<p id=\"pragma-line-37\">The ability to customize the <code>&lt;SystemControls&gt;<\/code> section is limited in the new <code>&lt;WebLayout&gt;<\/code>. In the old version of the WI Layout, there was much more flexibility around customizations that could be made to this area of the work item; the Change Request form has much of its customization done there, as shown in the areas highlighted below:<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-39446\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/04_SysContHighlight01.png\" alt=\"Image 04 SysContHighlight01\" width=\"1537\" height=\"693\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/04_SysContHighlight01.png 1537w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/04_SysContHighlight01-300x135.png 300w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/04_SysContHighlight01-1024x462.png 1024w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/04_SysContHighlight01-768x346.png 768w\" sizes=\"(max-width: 1537px) 100vw, 1537px\" \/><\/p>\n<p id=\"pragma-line-41\"><strong>As part of the upgrade, Azure DevOps moved these fields out of the <code>&lt;SystemControls&gt;<\/code> section.<\/strong><\/p>\n<blockquote id=\"pragma-line-43\">\n<p id=\"pragma-line-43\">NOTE: There are 3 types of fields that are defined here as part of this form: <code>HtmlFieldControl<\/code>, <code>FieldControl<\/code>, and <code>DateTimeControl<\/code>. An <code>HtmlFieldControl<\/code> is the larger text box which has greater control over text and format; a <code>FieldControl<\/code> is shown as a simple text box and a <code>DateTimeControl<\/code> limits the user to data entry in DateTime format.<\/p>\n<\/blockquote>\n<p id=\"pragma-line-46\">During the upgrade process, Azure DevOps does a \u2018best effort\u2019 guess at where the fields should appear, while conforming to new work item layout structure.<\/p>\n<p id=\"pragma-line-48\">In the out-of-the-box WI templates, the larger <code>HtmlFieldControls<\/code> are displayed on the left side of the form, while <code>FieldControls<\/code> and <code>DateTimeControls<\/code> are displayed on the right side. <strong>Based on this standard, the upgrade process places all <code>HtmlFieldControls<\/code> on the left side of the form; all <code>FieldControls<\/code> were placed on the right side of the WI form, each in their own section or group.<\/strong><\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-39447\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/06_ControlTypes.png\" alt=\"Image 06 ControlTypes\" width=\"1857\" height=\"887\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/06_ControlTypes.png 1857w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/06_ControlTypes-300x143.png 300w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/06_ControlTypes-1024x489.png 1024w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/06_ControlTypes-768x367.png 768w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/06_ControlTypes-1536x734.png 1536w\" sizes=\"(max-width: 1857px) 100vw, 1857px\" \/><\/p>\n<h3 id=\"changes-to-fields-defined-as-readonly\">Changes to fields defined as <code>READONLY<\/code><\/h3>\n<p id=\"pragma-line-54\"><strong>In <code>&lt;WebLayout&gt;<\/code>, fields defined as read-only which have no set value are not displayed on the WI form by default.<\/strong>\nIt was discovered the example work item had a fair amount of custom logic built into the form. Much of this logic involved setting certain fields as read-only based on certain conditions and is valid. However, many of the custom fields were set as read-only when this work item is in the \u2018New\u2019 state and therefore have no value. <strong>Due to this, the fields were not visible on the form after the upgrade.<\/strong><\/p>\n<h2 id=\"steps-taken-to-address-work-item-field-issues\">Steps Taken to Address Work Item Field Issues<\/h2>\n<p id=\"pragma-line-59\">The following sections describe the actions to return the work item form to a usable state.<\/p>\n<h3 id=\"add-the-showemptyreadonlyfields-attribute-to-weblayout\">Add the <code>ShowEmptyReadOnlyFields<\/code> attribute to <code>&lt;WebLayout&gt;<\/code><\/h3>\n<p id=\"pragma-line-63\">To allow for empty, read-only fields to be visible on the work item form the <code>ShowEmptyReadOnlyFields<\/code> attribute must be set to true for the <code>&lt;WebLayout&gt;<\/code>. To set this, locate the opening <code>&lt;WebLayout&gt;<\/code> tag in the work item xml, and add the following text: <code>ShowEmptyReadOnlyFields=\u201dtrue\u201d<\/code><\/p>\n<p id=\"pragma-line-66\">When done, the <code>&lt;WebLayout&gt;<\/code> opening tag should look similar to below:\n<img decoding=\"async\" class=\"alignnone size-full wp-image-39448\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/06.1_ShowEmptyFields.png\" alt=\"Image 06 1 ShowEmptyFields\" width=\"994\" height=\"116\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/06.1_ShowEmptyFields.png 994w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/06.1_ShowEmptyFields-300x35.png 300w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/06.1_ShowEmptyFields-768x90.png 768w\" sizes=\"(max-width: 994px) 100vw, 994px\" \/><\/p>\n<p id=\"pragma-line-70\">&#8230;.<\/p>\n<h3 id=\"create-tabbed-pages-for-each-environment\">Create tabbed pages for each environment<\/h3>\n<p id=\"pragma-line-74\">Recall that in the original work item form, there was a section defined for each environment (<strong>BETA<\/strong>, <strong>DEV<\/strong>, <strong>QA<\/strong>, <strong>QC<\/strong>, <strong>PROD<\/strong>), and each environment had four fields associated (<code>Properties<\/code>, <code>ChangeRequired<\/code>, <code>Status<\/code>, <code>ChangeDate<\/code>). After upgrade, these sections were rearranged and the relationships between the fields became unclear. The next steps will bring the related fields back together and place them in their own tab on the work item form.<\/p>\n<p id=\"pragma-line-76\">In <code>&lt;WebLayout&gt;<\/code>, different areas of the work item form are defined as follows (from top level down): <code>Page<\/code>, <code>Section<\/code>, <code>Group<\/code>, <code>Control<\/code>. The following image highlights these areas:<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-39449\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/07_PageSectGroup.png\" alt=\"Image 07 PageSectGroup\" width=\"1860\" height=\"786\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/07_PageSectGroup.png 1860w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/07_PageSectGroup-300x127.png 300w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/07_PageSectGroup-1024x433.png 1024w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/07_PageSectGroup-768x325.png 768w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/07_PageSectGroup-1536x649.png 1536w\" sizes=\"(max-width: 1860px) 100vw, 1860px\" \/><\/p>\n<p id=\"pragma-line-80\">Notice there is one <strong>Page<\/strong>, titled \u2018Description\u2019, which consists of 3 different <strong>Sections<\/strong>. Each section has its own <strong>Groups<\/strong> defined, which may contain one or more <strong>Controls<\/strong>. The goal for this work item is to gather related fields (<code>Properties<\/code>, <code>ChangeRequired<\/code>, <code>Status<\/code>, <code>ChangeDate<\/code>) and place them in their own environment page (<strong>BETA<\/strong>, <strong>DEV<\/strong>, <strong>QA<\/strong>, <strong>QC<\/strong>, <strong>PROD<\/strong>).<\/p>\n<p id=\"pragma-line-82\">Examine the .xml snippet from the incorrect work item form below. Notice that the related fields for the <strong>DEV<\/strong> and <strong>QA<\/strong> environments have been split across separate sections. Similarly, the related fields for <strong>BETA<\/strong>, <strong>QC<\/strong>, <strong>PROD<\/strong> have also been split across separate sections. These fields (Controls) will need to be gathered and placed in their own page using the subsequent steps. We&#8217;ll examine the steps taken for the <strong>BETA<\/strong> environment fields.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-39450\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/08_SeparateCntrlTypes.png\" alt=\"Image 08 SeparateCntrlTypes\" width=\"1089\" height=\"817\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/08_SeparateCntrlTypes.png 1089w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/08_SeparateCntrlTypes-300x225.png 300w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/08_SeparateCntrlTypes-1024x768.png 1024w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/08_SeparateCntrlTypes-768x576.png 768w\" sizes=\"(max-width: 1089px) 100vw, 1089px\" \/><\/p>\n<h4 id=\"define-the-new-pages-on-the-work-item-form\">Define the new page(s) on the work item form<\/h4>\n<p id=\"pragma-line-88\">Locate the closing tag for the \u2018Description\u2019 page, located near the end of the <code>WebLayout<\/code> section. Insert a new <code>&lt;Page&gt;<\/code> section and set the label to match the environment which will be referenced. Set <code>LayoutMode<\/code> to &#8220;EqualColumns&#8221;. Using this <code>LayoutMode<\/code> will render a page where each column is one-third of the page.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-39451\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/09_LayoutMode.png\" alt=\"Image 09 LayoutMode\" width=\"535\" height=\"148\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/09_LayoutMode.png 535w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/09_LayoutMode-300x83.png 300w\" sizes=\"(max-width: 535px) 100vw, 535px\" \/><\/p>\n<p id=\"pragma-line-92\">Working methodically, build out the work item form. Start with the \u201cChangeRequired\u201d field. Cut the existing \u201cChangeRequired\u201d control and paste it in the new page. Wrap this control with a <code>Group<\/code> tag (providing a title to match the environment), and finally wrap this group with a <code>Section<\/code> tag. When complete, the Page should look as follows:<img decoding=\"async\" class=\"alignnone size-full wp-image-39452\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/10_AddFieldControl.png\" alt=\"Image 10 AddFieldControl\" width=\"1043\" height=\"187\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/10_AddFieldControl.png 1043w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/10_AddFieldControl-300x54.png 300w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/10_AddFieldControl-1024x184.png 1024w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/10_AddFieldControl-768x138.png 768w\" sizes=\"(max-width: 1043px) 100vw, 1043px\" \/><\/p>\n<p id=\"pragma-line-96\">Next, create the center section. Add a new <code>Section<\/code> tag after the previous but inside the <code>Page<\/code> closing tag. Locate the existing &#8220;Properties&#8221; control on the Description page \u2013 cut the control and it\u2019s <code>Group<\/code> wrapper and paste to the new section. When complete, the page should look as follows:<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-39453\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/11_AddHTMLControl.png\" alt=\"Image 11 AddHTMLControl\" width=\"1032\" height=\"271\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/11_AddHTMLControl.png 1032w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/11_AddHTMLControl-300x79.png 300w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/11_AddHTMLControl-1024x269.png 1024w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/11_AddHTMLControl-768x202.png 768w\" sizes=\"(max-width: 1032px) 100vw, 1032px\" \/><\/p>\n<p id=\"pragma-line-100\">The right-side section of the form will consist of 2 controls in a group. Add a new <code>Section<\/code> tag subsequent to the previous. Add a <code>Group<\/code> tag and provide the appropriate label. Cut and paste the fields for &#8220;Status&#8221; and &#8220;ChangeDate&#8221; to the new Group. The completed page should look as follows:<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-39454\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/12_AddFieldDateTimeControls.png\" alt=\"Image 12 AddFieldDateTimeControls\" width=\"1035\" height=\"371\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/12_AddFieldDateTimeControls.png 1035w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/12_AddFieldDateTimeControls-300x108.png 300w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/12_AddFieldDateTimeControls-1024x367.png 1024w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/12_AddFieldDateTimeControls-768x275.png 768w\" sizes=\"(max-width: 1035px) 100vw, 1035px\" \/><\/p>\n<blockquote id=\"pragma-line-104\">\n<p id=\"pragma-line-104\"><strong>NOTE:<\/strong> Be sure to clean up empty <code>Group<\/code> tags as their contents are moved to the new page. Any empty <code>Group<\/code> tags may create errors upon import.<\/p>\n<\/blockquote>\n<p id=\"pragma-line-106\">Repeat the steps for defining new pages for each the remaining environments fields (<strong>DEV<\/strong>, <strong>QA<\/strong>, <strong>QC<\/strong>, <strong>PROD<\/strong>). Push the new .xml definition back to the server using one of the following: <a title=\"TFS Team Project Mangager on GitHub\" href=\"https:\/\/github.com\/jelledruyts\/TfsTeamProjectManager\">TFS Team Project Manager<\/a>, <a title=\"Process Template Editor for Visual Studio 2019\" href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-devlabs.msdevlabs-pte\">Process Template Editor extension for Visual Studio<\/a>, or <a title=\"Witadmin: Microsoft Docs\" href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/reference\/witadmin\/witadmin-customize-and-manage-objects-for-tracking-work?view=azure-devops-2019\">witadmin<\/a>. Navigate to the project and create a new work item of type Change Request. The form should now look as follows, with each environment in its own tab:<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-39455\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/13_TabsAdded.png\" alt=\"Image 13 TabsAdded\" width=\"1859\" height=\"816\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/13_TabsAdded.png 1859w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/13_TabsAdded-300x132.png 300w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/13_TabsAdded-1024x449.png 1024w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/13_TabsAdded-768x337.png 768w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/13_TabsAdded-1536x674.png 1536w\" sizes=\"(max-width: 1859px) 100vw, 1859px\" \/><\/p>\n<p id=\"pragma-line-110\">Notice that environment fields are grouped into tabs, and the layout of each tab should look as seen below:<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-39456\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/14_BetaEnv.png\" alt=\"Image 14 BetaEnv\" width=\"1867\" height=\"818\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/14_BetaEnv.png 1867w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/14_BetaEnv-300x131.png 300w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/14_BetaEnv-1024x449.png 1024w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/14_BetaEnv-768x336.png 768w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/05\/14_BetaEnv-1536x673.png 1536w\" sizes=\"(max-width: 1867px) 100vw, 1867px\" \/><\/p>\n<h2 id=\"conclusion\">Conclusion<\/h2>\n<p id=\"pragma-line-115\">While most organizations will be able to upgrade to Azure DevOps and the new work item form without much pain, we&#8217;ve seen that some of the more-heavily customized work item forms may take some effort to get back to a functional state. Hopefully this blog helped to shed some light on what happens during the upgrade process and will help you on your way to fixing up those forms.<\/p>\n<h2 id=\"links\">Links<\/h2>\n<p id=\"pragma-line-118\"><a title=\"Microsoft Docs\" href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/reference\/xml\/weblayout-xml-elements?view=azure-devops\">WebLayout and Control elements reference<\/a><\/p>\n<p id=\"pragma-line-120\"><a title=\"Microsoft DevBlogs\" href=\"https:\/\/devblogs.microsoft.com\/devops\/handling-a-tfs-2018-upgrade-from-old-form-to-new-form\/\">Handling a TFS 2018 Upgrade from Old form to New form<\/a><\/p>\n<p id=\"pragma-line-122\"><a title=\"Microsoft Docs\" href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/reference\/customize-wit-form?view=azure-devops\">Customize the work tracking web form<\/a><\/p>\n<p id=\"pragma-line-124\"><a title=\"Microsoft Docs\" href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/reference\/process\/new-work-item-experience?view=tfs-2017\">New work item tracking experience<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This blog post will highlight a case from the field to shed some light on what changes are made to the work item form, also known as the &#8216;Best-effort transformation&#8217;. We&#8217;ll walkthrough a case from the field where the custom work item was very different after upgrade.<\/p>\n","protected":false},"author":582,"featured_media":39458,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[22],"tags":[2571,21,10243],"class_list":["post-39442","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops","tag-azure-devops","tag-devops","tag-work-items"],"acf":[],"blog_post_summary":"<p>This blog post will highlight a case from the field to shed some light on what changes are made to the work item form, also known as the &#8216;Best-effort transformation&#8217;. We&#8217;ll walkthrough a case from the field where the custom work item was very different after upgrade.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/posts\/39442","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/users\/582"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/comments?post=39442"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/posts\/39442\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/media\/39458"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/media?parent=39442"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/categories?post=39442"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/tags?post=39442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}