Seit langer Zeit steht der Wunsch nach einem Multivalue Control auf der Liste der gewünschten Features für den TFS auf der Visual Studio User Voice Webseite. Mit TFS “15” kommt Microsoft diesem Wunsch in Form einer Marketplace-Extension nach und löst damit den bisherigen Workaround in Form des Custom Work Item Controls von CodePlex ab. In diesem Blogpost stellen wir Ihnen vor, wie die Extension installiert werden kann, wie das Multivalue Control in Teamprojekten verwendet werden kann und was es sonst noch darüber zu wissen gibt.
Über die Suche im Marketplace kann die Extension gefunden und installiert werden. Wie bisher auch für die Legacy Extensions üblich, wird die Extension auf Collection-Ebene installiert (vgl. Abb. 1). Möchte man darüber hinaus im Nachhinein für weitere Collections das Multivalue Control verfügbar machen, kann dies über die Seite ‘Manage Extensions’ (http://<server>/tfs/_gallery/manage) erreicht werden.
Abb. 1: Installation der Multivalue Control-Extension
Nach der Installation der Extension kann das Multivalue Control dann in Teamprojekten der Collection verwendet werden. Dabei gilt es zu beachten, dass dies nur für Teamprojekte gilt, welche die neue Work Item Web Form aktiviert haben und damit in den Work Item Definitionen des Prozess Templates den neuen Knoten WebLayout besitzen. Ist dies gegeben, so kann das Prozess Template entsprechend angepasst werden, um das Multivalue Control zu verwenden.
Dazu exportiert man wie gewohnt die Work Item Type Definition des zu bearbeitenden Work Items aus dem Team Projekt (per Witadmin oder Visual Studio). Dieses enthält nun im Bereich WebLayout alle, für die weiteren Schritte notwendige Informationen der Extension, wie z.B. die ID der Extension (vgl. Abb. 2 (1)) und die ID des ControlContributionElements (vgl. Abb. 2 (2)).
Abb. 2: Extension-Informationen
Mit diesen Informationen kann nun die Work Item Type Definition angepasst werden, um die Multivalue Control zu verwenden. Im ersten Schritt wird ein neuer Extension-Knoten im Bereich WebLayout/Extensions eingeführt, um die Extension in der Work Item Form verfügbar zu machen (vgl. Abb. 3). Die angegebene ID muss dabei wie in den Extension-Informationen spezifiziert angegeben werden (vgl. Abb. 2 (1)).
Abb. 2: Extension-Knoten
Im zweiten Schritt kann dann das neu einzufügende Feld im Bereich FIELDS definiert werden . Die Werte, welche im Multivalue Control zur Verfügung stehen sollen, werden als SUGGESTEDVALUES angeführt, wobei das Attribute expanditems den Wert true besitzen muss (vgl. Abb. 3).
Abb. 3: Feld-Definition
Schlussendlich wird dann das zuvor neu definierte Feld im WebLayout an gewünschter Stelle platziert. Hierzu wird ein ControlContribution-Element verwendet, welches dazu dient eine Work Item Extension auf Feld-Ebene in einem Work Item darzustellen (vgl. Abb. 4). Dabei gilt es zu beachten, dass das Attribut Value des Elements Input mit dem Refname des definierten Feldes übereinstimmen muss und die ID des ControlContributon-Elements der in den Extension-Informationen spezifizierten entsprechen muss (vgl. Abb. 2 (1)).
Abb. 4: Definition des ControlContribution-Elements
Nach den Anpassungen wird die Work Item Type Definition wieder in das Teamprojekt importiert und das lang ersehnte Multivalue-Control erscheint in dem entsprechenden Work Item an definierter Stelle (vgl. Abb. 5). Ist die Liste der Optionen eingeklappt, so werden alle ausgewählten Optionen als Kacheln dargestellt.
Abb. 5: Multivalue-Control
Ist das Feld nun also in Verwendung so kann es auch über Queries abgefragt werden. Dabei wird der Contains-Operator verwendet. Sollen mehrere Optionen abgefragt werden, so können mehrere Contains-Klauseln verkettet werden. Diese Abfragelogik basiert darauf, dass die ausgewählten Werte im Hintergrund als Semikolon-separierte Liste abgespeichert sind (vgl. Abb. 6).
Abb. 6: Abfragen eines Multivalue-Feldes
Nicht zuletzt sei darauf hingewiesen, dass der Source Code für die Multivalue-Extension auf GitHub zur Verfügung steht.