Elementos WebLayout y Control

Azure DevOps Services | | de Azure DevOps Server 2022 Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018

El elemento WebLayout se usa para definir el diseño y los controles que aparecen en los formularios de elementos de trabajo que se muestran a través del portal web. Admite la nueva experiencia de elemento de trabajo. Además del elemento Layout, que define los elementos de formulario que aparecen cuando se ven a través de Visual Studio y otros clientes que no son web.

Importante

Este artículo se aplica a la personalización del proyecto para los modelos de proceso XML hospedado y XML local (TFS 2017 y versiones posteriores). Para TFS 2015 y versiones anteriores, vea Referencia de elementos XML de diseño.

Para el modelo de proceso de herencia, consulte Personalización de un proceso. Para obtener información general sobre los modelos de proceso, consulte Personalización de la experiencia de seguimiento del trabajo.

El elemento WebLayout es un elemento secundario necesario del elemento FORM . En este tema se documenta el elemento WebLayout y sus elementos secundarios. Úselo como guía para personalizar aún más una definición wit que contiene la nueva sección WebLayout . Para obtener más información sobre estos cambios, consulte la entrada de blog Anuncio del desuso del antiguo formulario de elemento de trabajo en TFS.

Para modificar el diseño web, use la información proporcionada en este tema para modificar el archivo de definición XML para un tipo de elemento de trabajo específico. Para importar y exportar los cambios, consulte Personalización del formulario web de seguimiento del trabajo.

Para personalizar el diseño de cliente de Windows, vea Elemento XML de diseño.

Habilitación del nuevo formulario y la sección WebLayout

Cuando se habilita la nueva implementación de formularios, las definiciones XML de todos los tipos de elementos de trabajo (WIT) de la colección se actualizan para incluir una sección WebLayout dentro de la sección FORM .

El nuevo formulario pone a disposición varias características nuevas, como se describe en Nueva experiencia de elemento de trabajo. El administrador de la cuenta o la colección de proyectos administra el cambio al nuevo formulario.

Resumen de elementos y atributos

Los elementos WebLayout y Control actualizados presentan varios elementos nuevos y desusan varios elementos y atributos. En general, es una estructura de sintaxis mucho más sencilla que su predecesor.

Nuevos elementos Elementos mantenidos Elementos en desuso Atributos en desuso
- ControlContribution
- GroupContribution
- Input (Entrada)
- Entradas
- Página
- PageContribution
- Sección
- SystemControls
- WebLayout
- FORMULARIO
- Diseño
- Grupo
- Control
- Columna
- Divisor
- Pestaña
- TabGroup
- ControlSpacing
- FixedWidth
- LabelPosition
- LabelSpacing
- Margen
- MinimumSize
- Relleno
- PercentWidth

Sugerencia

El elemento Page es similar al elemento Tab en desuso. Sin embargo, un elemento Page no se puede agrupar ni anidar. Una página define una pestaña dentro del formulario web.

Personalización de encabezados

En el nuevo diseño de formulario web, el sistema administra varios elementos de encabezado dentro del elemento SystemControls . Se incluyen los siguientes:

  • Campos: Id. de elemento de trabajo, Título, Asignado a, Estado, Motivo, Ruta de acceso del área, Ruta de acceso de iteración y etiquetas
  • Páginas: icono de página historial Historial , icono de página vínculos Vínculos y icono de página Datos adjuntos .

Elemento Header dentro del formulario web

Al exportar una definición de WIT, verá una sección SystemControls al principio de la sección WebLayout , similar a la siguiente:

<WebLayout ShowEmptyReadOnlyFields="true"> 
    <SystemControls>
      <Control Type="FieldControl" FieldName="System.Title" EmptyText="Enter title" />
      <Control Label="Assi&amp;gned To" Type="FieldControl" FieldName="System.AssignedTo" />
      <Control Label="Stat&amp;e" Type="FieldControl" FieldName="System.State" />
      <Control Label="Reason" Type="FieldControl" FieldName="System.Reason" />
      <Control Label="&amp;Area" Type="WorkItemClassificationControl" FieldName="System.AreaPath" />
      <Control Label="Ite&amp;ration" Type="WorkItemClassificationControl" FieldName="System.IterationPath" />
      <Control Label="History" Type="WorkItemLogControl" FieldName="System.History" />
      <Control Label="Links" Type="LinksControl" Name="Links" />
      <Control Label="Attachments" Type="AttachmentsControl" Name="Attachments" />
    </SystemControls>
...

Nota

El elemento Link no es un elemento permitido dentro de la sección SystemControls.

Para TFS 2017, modelo de proceso XML local: puede modificar los elementos seleccionados dentro de la sección SystemControls , como cambiar el valor del atributo EmptyText para el campo System.Title . En general, se recomienda no personalizar esta sección mucho más que eso. Por ejemplo, no puede quitar campos de ni agregar otros campos dentro de esta sección.

Para TFS 2018, XML local y Azure DevOps Services, modelos de procesos XML hospedados: puede especificar el atributo ShowEmptyReadOnlyFields o seleccionar ocultar o reemplazar los campos seleccionados definidos en la sección SystemControls.

Por ejemplo, para ocultar el campo Reason, se modifica el elemento Control con el Visible atributo .

<Control Label="Reason" Type="FieldControl" FieldName="System.Reason" Visible="false" />

Para reemplazar el campo Motivo por otro campo, use el Replaces atributo . Además, quite la entrada del campo Motivo de la sección.

<Control Label="Milestone" Type="FieldControl" FieldName="Fabrikam.Milestone" Replaces="System.Reason" />

Puede ocultar o reemplazar los campos Motivo, Ruta de acceso del área e Ruta de acceso de iteración. Puede agregar estos campos, si lo desea, a la página Detalles u otra página personalizada. No se pueden ocultar ni reemplazar los campos Título, Asignado a o Estado.

Ejemplo de WebLayout

En el ejemplo siguiente se muestra la estructura general de la sección WebLayout dentro de la sección FORM . WebLayout especifica un elemento Control para cada campo que desea que aparezca en el formulario.

Los elementos se agrupan para que aparezcan dentro de una página mediante los elementos Section y Group . Use un elemento Control para definir cada campo o control que desee que aparezca en el formulario.

En el ejemplo siguiente se especifica la sintaxis de la página Detalles mostrada anteriormente en este tema.

<FORM>
. . .
  <WebLayout>
       <SystemControls>
          <Control Type="FieldControl" FieldName="System.Title" EmptyText="Enter title" />
          <Control Label="Assi&amp;gned To" Type="FieldControl" FieldName="System.AssignedTo" />
          <Control Label="Stat&amp;e" Type="FieldControl" FieldName="System.State" />
          <Control Label="Reason" Type="FieldControl" FieldName="System.Reason" />
          <Control Label="&amp;Area" Type="WorkItemClassificationControl" FieldName="System.AreaPath" />
          <Control Label="Ite&amp;ration" Type="WorkItemClassificationControl" FieldName="System.IterationPath" />
          <Control Label="History" Type="WorkItemLogControl" FieldName="System.History" />
          <Control Label="Links" Type="LinksControl" Name="Links" />
          <Control Label="Attachments" Type="AttachmentsControl" Name="Attachments" />
        </SystemControls>
    <Page Label="Details" LayoutMode="FirstColumnWide">
        <Section>
          <Group Label="Description">
             <Control Label="Description" Type="HtmlFieldControl" FieldName="System.Description" />
          </Group>
        </Section>
        <Section>
      <Group Label="Planning">
          <Control Label="Story Points" Type="FieldControl" FieldName="Microsoft.VSTS.Scheduling.StoryPoints" />
          <Control Label="Priority" Type="FieldControl" FieldName="Microsoft.VSTS.Common.Priority" />
        </Group>
        <Group Label="Classification">
          <Control Label="Value area" Type="FieldControl" FieldName="Microsoft.VSTS.Common.ValueArea" />
        </Group>
      </Section>
      <Section>
        <Group Label="Development">
          <Control Type="LinksControl" Name="Development">
            <LinksControlOptions ViewMode="Dynamic" ZeroDataExperience="Development" ShowCallToAction="true">
              <ListViewOptions GroupLinks="false">
              </ListViewOptions>
              <LinkFilters>
                <ExternalLinkFilter Type="Build" />
                <ExternalLinkFilter Type="Pull Request" />
                <ExternalLinkFilter Type="Branch" />
                <ExternalLinkFilter Type="Fixed in Commit" />
                <ExternalLinkFilter Type="Fixed in Changeset" />
                <ExternalLinkFilter Type="Source Code File" />
              </LinkFilters>
            </LinksControlOptions>
          </Control>
        </Group>
       <Group Label="Related Work">
          <Control Type="LinksControl" Name="Related Work">
            <LinksControlOptions>
              <LinkFilters>
                <WorkItemLinkFilter Type="System.LinkTypes.Hierarchy-Reverse" />
                <WorkItemLinkFilter Type="System.LinkTypes.Hierarchy-Forward" />
                <WorkItemLinkFilter Type="System.LinkTypes.Related" />
              </LinkFilters>
              <Columns>
                <Column Name="System.State" />
                <Column Name="System.ChangedDate" />
                <Column Name="System.Links.Comment" />
              </Columns>
            </LinksControlOptions>
          </Control>
        </Group>
      </Section>
    </Page>
  </WebLayout>
</FORM>

Sintaxis del elemento WebLayout

Puede especificar cómo se agrupan la información y los campos de elemento de trabajo y cómo aparecen en un formulario de elemento de trabajo si utiliza los elementos que se describen en la siguiente tabla.

<WebLayout ShowEmptyReadOnlyFields="true | false">
   ...
</WebLayout>

Atributos

Atributo Descripción
ShowEmptyReadOnlyFields Atributo WebLayout opcional. Especifique un valor de true para mostrar campos de solo lectura y vacíos (valor predeterminado) y false ocultar estos campos.

Sugerencia

La definición de esquema para el seguimiento de elementos de trabajo define todos los elementos secundarios FORM como mayúsculas y minúsculas y todos los demás elementos. Si se producen errores al validar los archivos de definición de tipos, compruebe la estructura del uso de mayúsculas y minúsculas en sus elementos. También, la estructura del uso de mayúsculas y minúsculas en las etiquetas de apertura y cierre deben ajustarse a las reglas sintácticas de XML. Para obtener más información, vea Referencia de elementos XML de control.

Element

Descripción


Control

Elemento secundario opcional para un grupo dentro de WebLayout. Define un campo, texto, hipervínculo u otro elemento de control que aparecerá en el formulario de elemento de trabajo.

<Control FieldName="FieldName" Type="DateTimeControl | ExtensionsControl |  
FieldControl | HtmlFieldControl | LabelControl | WebpageControl"  
Label="LabelText" EmptyText="TextString" 
ReadOnly="True | False" Name="InstanceName" />

Vea Control de atributos de elemento y tipo de controlpara obtener información sobre cada atributo.

ControlContribution

Elemento secundario opcional de Group dentro de WebLayout usado para especificar una extensión de elemento de trabajo de nivel de campo para que aparezca en el formulario.

<ControlContribution Id="ContributionId" Label="Name">  
<Inputs>  
<Input Id="FieldName" Value="Value" />  
</Inputs>  
</ControlContribution>  

El valor de ContributionId que especifique debe estar instalado en la cuenta o colección de proyectos. Los archivos de definición de WIT que exporta contienen una lista de contribuciones instaladas.

Extensión

Elemento secundario necesario para Extensions. Use para especificar un identificador de extensión de una extensión de control de elemento de trabajo que se mostrará en el formulario del elemento de trabajo. Debe especificar cada extensión que se usa en el diseño de un elemento ControlContribution, GroupContribution o PageContribution .

<Extension Id="ExtensionId" />  

ExtensionId que especifique debe estar instalado en la cuenta o colección de proyectos. Los archivos de definición de WIT que exporta contienen una lista de extensiones instaladas.

Extensiones

Elemento secundario contenedor opcional de WebLayout usado para admitir la especificación de uno o varios elementos Extension . Si se usan extensiones en el formulario, especifíquelas antes de un elemento Page .

<WebLayout >  
<Extensions >  
<Extension Id="ExtensionId" />  
. . .   
</Extensions>   
. . .
</WebLayout>  

FORMA

Elemento secundario obligatorio de WITD usado para especificar el diseño y los controles que se van a mostrar en el formulario del elemento de trabajo. Elemento primario para los elementos Layout (diseño de formulario de cliente) y WebLayout (diseño de formulario web).

<FORM>  
<Layout> . . . </Layout>  
<WebLayout> . . . </WebLayout>  
</FORM>  

Grupo

Elemento secundario obligatorio de Section. Proporciona una agrupación visual de elementos dentro de una sección que se puede etiquetar.

<Group Label="LabelText"   
<Control> . . . </Control>  
</Group>  

GroupContribution

Elemento secundario opcional de Section< dentro de WebLayout usado para especificar una extensión de elemento de trabajo de nivel de grupo para que aparezca en el formulario. La extensión aparecerá como un grupo dentro del formulario.

<GroupContribution Id="ContributionId" Label="Name" />  

El valor de ContributionId que especifique debe estar instalado en la cuenta o colección de proyectos. Los archivos de definición de WIT que exporta contienen una lista de contribuciones instaladas.

Entrada

Elemento secundario obligatorio para Inputs que especifica los datos de entrada de una extensión.

<Input Id="FieldName" Value="Value" />  

Entradas

Elemento secundario contenedor opcional para ControlContribution usado para admitir la especificación de datos de entrada para una extensión.

<Inputs>
<Input Id="FieldName" Value="Value" />  
</Inputs>

Page

Elemento secundario obligatorio de WebLayout. Define el diseño de una página dentro del formulario web.
Especifique el nombre de la página y el diseño que se va a usar.

<Page Label="PageName" LayoutMode="FirstColumnWide | EqualColumns ">  
<Section>    
<Group> . . .   
<Control> . . . </Control>  
<Control> . . . </Control>  
</Group>  
</Section>  
</Page>  

PageContribution

Elemento secundario opcional de WebLayout usado para especificar una extensión de elemento de trabajo de nivel de página para que aparezca en el formulario. La extensión aparecerá como una página dentro del formulario.

<PageContribution Id="ContributionId" Label="Name"  />  

El valor de ContributionId que especifique debe estar instalado en la cuenta o colección de proyectos. Los archivos de definición de WIT que exporta contienen una lista de contribuciones instaladas.

Sección

Elemento secundario obligatorio de Page. Define el diseño de una sección dentro de una página del formulario web. Secciones de grupos de formularios que admiten el cambio de tamaño de las variables. Se puede definir un límite de cuatro secciones dentro de una página.

<Page>  
<Section>    
<Group> . . .   
<Control> . . . </Control>  
<Control> . . . </Control>  
</Group>  
</Section>  
</Page>  

SystemControls

Elemento secundario necesario para WebLayout. Define las etiquetas y los valores de texto vacíos para los controles presentes en el encabezado del formulario web . Esto también incluye las etiquetas de las páginas Historial, Vínculos y Datos adjuntos .

<SystemControls>    
<Control Type="FieldControl" FieldName="System.Title" EmptyText="Enter title" />   
<Control Label="Assi&gned To" Type="FieldControl" FieldName="System.AssignedTo" />  
<Control Label="Stat&e" Type="FieldControl" FieldName="System.State" />  
<Control Label="Reason" Type="FieldControl" FieldName="System.Reason" />  
<Control Label="&Area" Type="WorkItemClassificationControl" FieldName="System.AreaPath" />  
<Control Label="Ite&ration" Type="WorkItemClassificationControl" FieldName="System.IterationPath" />  
<Control Label="History" Type="WorkItemLogControl" FieldName="System.History" />  
<Control Label="Links" Type="LinksControl" Name="Links" />  
<Control Label="Attachments" Type="AttachmentsControl" Name="Attachments" />  
</SystemControls>  

WebLayout

Elemento secundario obligatorio de FORM. Define el diseño del formulario de elemento de trabajo que se muestra en el portal web. Incluye uno o varios elementos Page .

<WebLayout>  
<Page>  
<Section>  
<Group> . . . 
<Control> . . . </Control>  
<Control> . . . </Control>  
</Group>  
</Section>  
</Page>  
. . .
</WebLayout>

Sintaxis de elemento de control

El elemento Control se usa para definir un campo de elemento de trabajo, texto, hipervínculo u otro tipo de formulario para mostrarlo en un formulario de elemento de trabajo. El elemento Control que especifique en la sección WebLayout debe cumplir la sintaxis siguiente:

<Control FieldName="FieldRefName" Type="DateTimeControl | FieldControl | 
HtmlFieldControl | LabelControl | WebpageControl Label="LabelText" 
LabelPosition="Top | Bottom | Left | Right" EmptyText="TextString" 
ReadOnly="True | False" Name="InstanceName" [Visible="false" | 
FieldName="ReplacementFieldRefName" Replaces="FieldRefName"] />

Sintaxis de atributo de elemento de control

Atributo

Descripción

Fieldname

Opcional. Especifica el campo de elemento de trabajo al que está asociado el control. Especifique el nombre de referencia del campo que debe estar entre 1 y 70 caracteres.

Tipo

Necesario. Especifica el tipo de datos del control. Especifique una cadena de uno de estos tipos integrados:

  • DateTimeControl: use para mostrar campos de fecha con formato con un tipo de campo DateTime.
  • FieldControl: se usa para mostrar listas booleanas, texto sin formato, campos numéricos, campos de nombre de persona y listas de selección. Admite campos con un tipo de datos de tipo Boolean, Double, Identity, Integer, PlainText y String.

Nota

Disponibilidad de características: El campo de tipo de datos booleano es compatible con TFS 2017 y versiones posteriores.

  • HtmlFieldControl: se usa para mostrar el formato de texto enriquecido de varias líneas de los campos con un tipo de campo HTML.
  • LabelControl: se usa para mostrar texto que no está asociado a un campo. El texto puede ser sin formato o hipervinculado. Puede especificar controles adicionales mediante los elementos LabelText, Link y Text .
  • WebControl: se usa para mostrar el contenido basado en HTML definido por un URI o incrustado dentro de una etiqueta CDATA. Este control no tiene asociado ningún campo o tipo de campo. Especifique el contenido y los vínculos que se mostrarán mediante el elemento WebpageControlOptions .

EmptyText

Opcional. Especifica una cadena de texto que contiene entre 1 y 255 caracteres y que aparece cuando un campo está vacío.

Label

Opcional. Especifica el texto visible en el formulario que identifica el control. Escriba una cadena que no supere los 80 caracteres. Si no se especifica, se usa el nombre descriptivo de .FieldName

ReadOnly

Opcional. Especifica que el campo es de solo lectura:

  • True: el campo de control es de solo lectura.
  • False: el campo de control no es de solo lectura.

Nombre

Opcional. Identifica un control de forma exclusiva. El nombre es importante si hay más de un control en el formulario asociado al mismo campo de elemento de trabajo.

Nota

Use el atributo Name cuando desee que se muestre el mismo campo en más de una página del formulario. Especifique un valor único para el atributo Name para ambas entradas de control para que el sistema identifique cada control de forma única.

Visible

Opcional. Especifique Visible="false" cuándo desea ocultar un campo incluido normalmente en el área de encabezado. Solo puede especificar este atributo junto con los campos System.Reason, System.AreaPath o System.IterationPath. Si especifica este atributo, no puede especificar el Replaces atributo .

Reemplaza

Opcional. Especifique FieldName="ReplacementFieldRefName" Replaces="FieldRefName" cuándo desea reemplazar un campo dentro del área de encabezado por otro campo. Solo puede especificar este atributo junto con los campos System.Reason, System.AreaPath o System.IterationPath. Si especifica este atributo, no puede especificar el Visible atributo . Además, debe quitar la entrada del campo que va a reemplazar desde dentro de la sección.

Sintaxis de atributo Type de elemento de control

Tipo

Descripción

DateTimeControl

Use para mostrar campos de fecha con formato con un tipo de datos de DateTime. Use FieldControl para proporcionar un campo de texto para la entrada o presentación de un campo DateTime.

<Control FieldName=" MyCompany.Group1.StartDate " Type="FieldControl" 
Label="Start Date" LabelPosition="Left" />

Use DateTimeControl para proporcionar un selector de calendario para seleccionar una fecha para un campo, como se muestra en la ilustración siguiente.

Control Fecha y hora, campo Calendario

<Control Type="DateTimeControl" FieldName="FabrikamFiber.Schedule.SubmittedDate" 
Label="Submitted Date:" LabelPosition="Left"  Format="Short" />

Nota

El formato de fecha y hora mostrado coincide con el perfil de usuario del perfil de usuario. La sección WebLayout no acepta la propiedad del elemento CustomFormat Layout.

FieldControl

Use para mostrar campos con un tipo de datos booleano, string, identity, integer, double y plaintext. Por ejemplo:

<Control Type="FieldControl" FieldName="FabrikamFiber.Milestone" 
Label="Milestone" Name="Milestone" LabelPosition="Left" />

Disponibilidad de características: El campo de tipo de datos booleano solo se admite para TFS 2017 y versiones posteriores. Dentro de un formulario de elemento de trabajo de cliente, como Visual Studio o Eclipse, se mostrará un valor de True o False.

Un campo booleano se muestra como una casilla dentro del formulario de elemento de trabajo web.

Presentación de campo booleano en el formulario de elemento de trabajo web

HTMLFieldControl

Use para mostrar el control con formato de texto enriquecido de varias líneas. Especifique este tipo de control para los campos de Type=HTML.
Campo HTML mostrado en el formulario del elemento de trabajo
Por ejemplo:

<Control Type="HtmlFieldControl" FieldName="FabrikamFiber.ReleaseNotes" 
Label="Release Notes" Dock="Fill" />

LabelControl

Use para mostrar texto que no está asociado a un campo. El texto puede ser sin formato o hipervinculado. Puede especificar controles adicionales mediante los elementos LabelText, Link y Text . Consulta Referencia de elementos LabelText y Text XML y Referencia de elementos XML Link y Param.

WebpageControlOptions

Use para mostrar el contenido basado en HTML definido por un URI o incrustado dentro de una etiqueta CDATA. Este control no tiene asociado ningún campo o tipo de campo. Especifique el contenido y los vínculos que se mostrarán mediante el elemento WebpageControlOptions .

El elemento WebpageControlOptions y sus elementos secundarios tienen la siguiente estructura de sintaxis:

<WebpageControlOptions AllowScript="true | false" ReloadOnParamChange="true | false" >  
<Link UrlRoot="UrlRoot" UrlPath ="UrlPathWithParameters" >  
<Param index="IndexValue" value="ParamValue" type ="Original | Current">  
</Link>  
<Content>  
<![CDATA[Contents of HTML]]/>  
<Content/>  
<WebpageControlOptions/>

Los elementos Content, LabelText y Link se usan para definir etiquetas de texto sin formato o hipervínculos, agregar hipervínculos a un campo o mostrar contenido de página web en un formulario de elemento de trabajo. Consulte Proporcionar texto de ayuda, hipervínculos o contenido web en un formulario de elemento de trabajo para obtener más información sobre la sintaxis.

Si acaba de empezar a trabajar con el nuevo formulario, consulte estos temas adicionales para administrar la implementación o personalizarlo:

Para obtener más información sobre los modelos de proceso y lo que se admite con cada uno, consulte Personalización de la experiencia de seguimiento del trabajo.

Extensiones de Marketplace

Visite Marketplace de Azure DevOps para buscar extensiones que puede empezar a usar.

Extensiones de formulario

Los elementos ControlContribution, GroupContribution y PageContribution hacen referencia a las Id contribuciones de las extensiones que se han instalado para una colección de proyectos o una cuenta. Instale una extensión desde Visual Studio Marketplace. Para crear una extensión, consulte Creación de la primera extensión.

Una vez instaladas las extensiones, agregue el elemento Contribution a la definición XML de un tipo de elemento de trabajo. Estos archivos se exportan mediante la exportación de un proceso o la exportación de un archivo de definición wit.

Al exportar la definición XML, contendrá una sección de comentarios que enumera las extensiones instaladas, sus identificadores y las entradas necesarias. Por ejemplo:

<!--**********************Work Item Extensions**********************
Extension:
    Name: color-control-dev
    Id: mariamclaughlin.color-control-dev
    Control contribution:
        Id: mariamclaughlin.color-control-dev.color-control-contribution
        Description: 
        Inputs:
            Id: FieldName
            Description: The field associated with the control.
            Type: Field
            IsRequired: true
            Id: Labels
            Description: The list of values to select from.
            Type: String
            IsRequired: false
            Id: Colors
            Description: The field associated with the control.
            Type: String
            IsRequired: false  
Extension:
    Name: vsts-workitem-recentlyviewed
    Id: mmanela.vsts-workitem-recentlyviewed  
    Group contribution:
        Id: mmanela.vsts-workitem-recentlyviewed.recently-viewed-form-group
        Description: Recently viewed work item form group  
Extension:
    Name: vsts-extensions-multi-values-control
    Id: ms-devlabs.vsts-extensions-multi-values-control   
    Control contribution:
        Id: ms-devlabs.vsts-extensions-multi-values-control.multi-values-form-control
        Description: Multi Values Selection Control.
        Inputs:
            Id: FieldName
            Description: The field associated with the control.
            Type: Field
            IsRequired: true
            Id: Values
            Description: The list of values to select from.
            Type: String
            IsRequired: false
Extension:
    Name: vsts-extension-workitem-activities
    Id: ms-devlabs.vsts-extension-workitem-activities   
Extension:
    Name: vsts-uservoice-ui
    Id: ms-devlabs.vsts-uservoice-ui   
    Group contribution:
        Id: ms-devlabs.vsts-uservoice-ui.vsts-uservoice-ui-wi-group
        Description: Shows User Voice details on the work item form
-->

Dado el ejemplo anterior, puede agregar el siguiente fragmento de código a la definición de tipo de elemento de trabajo para activar la extensión del grupo vsts-uservoice-ui de voz de usuario especificando el identificador de extensión:

<WebLayout>
... 
 <Extensions>
     <Extension Id="ms-devlabs.vsts-uservoice-ui" />
 </Extensions>
...
</WebLayout> 

Tras la importación de la definición de WIT actualizada, la extensión de grupo aparecerá automáticamente en el formulario de elemento de trabajo.

La próxima vez que exporte la definición de WIT, verá que se ha agregado un GroupContribution elemento. Puede mover este elemento dentro de la WebLayout sección igual que haría con cualquier otro control.