Skip to main content

Using the Work Item Multivalue control in TFS 2017 (On premise)

Today one of my colleagues in our ALM team asked for help. For a customer we upgraded their TFS environment to TFS 2017. One of the changes we had to do along the way was replacing the existing MultiValue control by a newer version(https://github.com/Microsoft/vsts-extension-multivalue-control).

Multivaluecontrol

We followed the steps as mentioned here(https://github.com/Microsoft/vsts-extension-multivalue-control/blob/master/xmldetails.md) but the control didn’t appear.

Here is the template XML that we were using(I removed some content):

<?xml version="1.0" encoding="IBM437"?>
<witd:WITD application="Work item type editor" version="1.0" xmlns:witd="http://schemas.microsoft.com/VisualStudio/2008/workitemtracking/typedef">
<WORKITEMTYPE name="Product Backlog Item">
<DESCRIPTION>Tracks an activity the user will be able to perform with the product.</DESCRIPTION>
<FIELDS>
</FIELDS>
<WORKFLOW>
</WORKFLOW>
<FORM>
<Layout HideControlBorders="true" HideReadOnlyEmptyFields="true">
<Group Margin="(4,0,0,0)">
</Group>
</Layout>
<WebLayout>
<!--**********************************Work Item Extensions***************************
...
Extension:
Name: vsts-extensions-multivalue-control
Id: ms-devlabs.vsts-extensions-multivalue-control
Control contribution:
Id: ms-devlabs.vsts-extensions-multivalue-control.multivalue-form-control
Description: A work item form control which allows selection of multiple values.
Inputs:
Id: FieldName
Description:
Type: WorkItemField
Field Type: String; PlainText; HTML
Data Type: String
IsRequired: true
Id: Values
Description: Values can be user provided or from suggested values of the backing field
Data Type: String
IsRequired: false
Note: For more information on work item extensions use the following topic: http://go.microsoft.com/fwlink/?LinkId=816513
-->
<Extensions>
<Extension Id="ms-devlabs.vsts-extensions-multivalue-control" />
</Extensions>
<!--**********************************Work Item Extensions*************************** -->
<SystemControls>
<Control Type="FieldControl" FieldName="System.Title" EmptyText="&lt;Enter title here&gt;" />
<Control Label="Area" Type="WorkItemClassificationControl" FieldName="System.AreaPath" />
<Control Label="Iteration" Type="WorkItemClassificationControl" FieldName="System.IterationPath" />
<Control Label="Stat&amp;e" Type="FieldControl" FieldName="System.State" />
<Control Label="Reason" Type="FieldControl" FieldName="System.Reason" />
<Control Label="Assi&amp;gned To" Type="FieldControl" FieldName="System.AssignedTo" />
<Control Label="Links" Type="LinksControl" Name="Links" />
<Control Label="Comments" Type="WorkItemLogControl" FieldName="System.History" />
<Control Label="Attachments" Type="AttachmentsControl" Name="Attachments" />
</SystemControls>
<Page Label="Details" LayoutMode="FirstColumnWide">
<Section>
<Group Label="Impacted Platforms">
<ControlContribution Label="Label" Id="ms-devlabs.vsts-extensions-multivalue-control.multivalue-form-control">
<Inputs>
<Input Id="FieldName" Value="ImpactedPlatforms" />
</Inputs>
</ControlContribution>
</Group>
</Section>
</Page>
</WebLayout>
</FORM>
</WORKITEMTYPE>
</witd:WITD>

Although we couldn’t see any difference with the steps mentioned above, it didn’t work.

When I had a look I noticed that the extension is only registered in the WebLayout part of the Form.

Remark: In TFS you always had 2 layouts(a layout and a weblayout), the first one applies when opening a work item in Visual Studio or Test Manager, the weblayout applies when opening a workitem in the browser.

We first tried to add the extension to the layout part as well, but this didn’t work and resulted in some errors.

Then I had an idea, TFS 2017 offers a new Work Item experience. As mentioned here(https://www.visualstudio.com/en-us/docs/work/reference/weblayout-xml-elements) the WebLayout element is only applied on the new work item experience! This explains why our changes didn’t show up.

The new Work Item experience is an opt-in experience that should be enabled by a collection administrator. After enabling it, our Multivalue control appeared on the form…

Remark: For TFS 2017, the new form is automatically available when you add team projects to a new collection.

Popular posts from this blog

Kubernetes–Limit your environmental impact

Reducing the carbon footprint and CO2 emission of our (cloud) workloads, is a responsibility of all of us. If you are running a Kubernetes cluster, have a look at Kube-Green . kube-green is a simple Kubernetes operator that automatically shuts down (some of) your pods when you don't need them. A single pod produces about 11 Kg CO2eq per year( here the calculation). Reason enough to give it a try! Installing kube-green in your cluster The easiest way to install the operator in your cluster is through kubectl. We first need to install a cert-manager: kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.5/cert-manager.yaml Remark: Wait a minute before you continue as it can take some time before the cert-manager is up & running inside your cluster. Now we can install the kube-green operator: kubectl apply -f https://github.com/kube-green/kube-green/releases/latest/download/kube-green.yaml Now in the namespace where we want t...

Azure DevOps/ GitHub emoji

I’m really bad at remembering emoji’s. So here is cheat sheet with all emoji’s that can be used in tools that support the github emoji markdown markup: All credits go to rcaviers who created this list.

.NET 9 - Goodbye sln!

Although the csproj file evolved and simplified a lot over time, the Visual Studio solution file (.sln) remained an ugly file format full of magic GUIDs. With the latest .NET 9 SDK(9.0.200), we finally got an alternative; a new XML-based solution file(.slnx) got introduced in preview. So say goodbye to this ugly sln file: And meet his better looking slnx brother instead: To use this feature we first have to enable it: Go to Tools -> Options -> Environment -> Preview Features Check the checkbox next to Use Solution File Persistence Model Now we can migrate an existing sln file to slnx using the following command: dotnet sln migrate AICalculator.sln .slnx file D:\Projects\Test\AICalculator\AICalculator.slnx generated. Or create a new Visual Studio solution using the slnx format: dotnet new sln --format slnx The template "Solution File" was created successfully. The new format is not yet recognized by VSCode but it does work in Jetbr...