Este artículo proviene de un motor de traducción automática.

Team System

Personalizar elementos de trabajo

Brian A.Randell

Descargar el código de ejemplo

Elemento de trabajo Team Foundation Server ’s sistema de seguimiento proporciona una serie de opciones de personalización avanzada.Si ’re nuevo para trabajar de personalización del elemento y el modelo de objeto de elemento de trabajo, puede revisar mis artículos anteriores (consulte msdn.microsoft.com/magazine/cc301186.aspx de), así como la documentación.El área de que ’ll trataré en este artículo es la compatibilidad con controles personalizados.Para iniciar, ¿por qué se desea utilizar un control personalizado en los elementos de trabajo?Bueno, quizás desee una mejor experiencia de usuario, que desee vincular datos desde otro sistema externo (como una aplicación de Ayuda de asistencia al cliente) o quizás desee presentar datos de elemento de trabajo existentes en formato de gráfico.Sea cual sea la razón, pueden ayudar a los controles personalizados.

Controles personalizados

En el lanzamiento de 2005 SP1 de Team System, Microsoft había agregado compatibilidad con controles personalizados cuando se utiliza el representador de elemento de trabajo estándar dentro de Visual Studio o aplicaciones de Windows personalizadas.En el lanzamiento de 2008, Microsoft agregó compatibilidad con los controles personalizados basados en Web para Team System Web Access.Escribir un control personalizado como una combinación de interfaz de usuario y la lógica que interactúa con el elemento de trabajo API.Controles personalizados alojados dentro el representador de elemento de trabajo estándar son clases que heredan de System.Windows.Forms.control e implementan la interfaz IWorkItemControl.Para Team System Web Access, cree una clase que hereda de System.Web.UI.control e implementa IWorkItemWebControl.

Para empezar, necesitará Visual Studio 2008 Professional o posterior, la Visual Studio Team System 2008 Team Explorer y el acceso a un servidor Team Foundation server.Como mencioné en columnas anteriores, le animo a utilizar un entorno de prueba como una de las imágenes de máquina virtual proporcionadas por Microsoft.Dentro de Visual Studio, cree un proyecto de biblioteca de clases y, a continuación, cambie el nombre la clase predeterminada agregada la plantilla para clasificar.Este control personalizado proporcionan una interfaz de cuadro combinado para el campo Rank integrado que se utiliza en el tipo de elemento de trabajo integrado de tarea.Los estados de instrucciones de proceso proporcionada por Microsoft: “ Requerido.El Rango es una escala de importancia subjetiva.Si el campo rango se establece en 1, la tarea es una tarea debe tener y se debe completar tan pronto como sea posible.Si el rango se establece en 2, la tarea es una tarea que debe, completar siguientes todas las tareas clasificadas 1.Si el rango se establece en 3, lo ’s una tarea que podría, en completarse después de clasificación de las tareas 1 y 2. ” Sin embargo, el campo Rank cuando procesa utiliza un campo de texto abierto que permite al usuario que introduzca datos aleatorios.Un cuadro combinado permite restringir los valores escritos por un usuario.

Tiene que agregar referencias a un número de ensamblados antes de escribir ningún código.En primer lugar, necesita una referencia a System.Windows.Forms.En segundo lugar, deberá hacer referencia a un par de Team System ensamblados.Para empezar, agregue una referencia a Microsoft.TeamFoundation.WorkItemTracking.Controls.dll, ubicado en % 9.0\Common7\IDE\PrivateAssemblies de programa%\Microsoft Visual Studio.

En la parte superior del archivo de clase, agregue las instrucciones Imports siguientes:

Imports System.Windows.Forms
Imports Microsoft.TeamFoundation.WorkItemTracking.Controls

Puesto que va a reemplazar el control de cuadro de texto existente con un cuadro combinado, desea la clase Rank para heredar de ComboBox. A continuación, en orden para el representador de elemento de trabajo para el host el control, deberá implementar la interfaz IWorkItemControl. La interfaz, que se muestra en figura 1 consta de dos eventos, cuatro métodos y propiedades de cuatro. Figura 2 proporciona un desglose de cada miembro y su propósito.

Figura 1 La interfaz IWorkItemControl

Public Interface IWorkItemControl
    Event AfterUpdateDatasource As EventHandler
    Event BeforeUpdateDatasource As EventHandler
    Sub Clear()
    Sub FlushToDatasource()
    Sub InvalidateDatasource()
    Sub SetSite(ByVal serviceProvider As IServiceProvider)
    Property Properties As StringDictionary
    Property [ReadOnly] As Boolean
    Property WorkItemDatasource As Object
    Property WorkItemFieldName As String
End Interface
Miembro Descripción
AfterUpdateDatasource Provoca este evento después de realizar cambios en el valor del elemento de trabajo.
BeforeUpdateDatasource Provoca este evento antes de realizar cambios en el valor del elemento de trabajo.
Borrar Borra los elementos de presentación de los datos.
FlushToDatasource Guarda los datos mostrados en el control para el elemento de trabajo;Normalmente se produce como parte de un elemento de trabajo de operación de guardar.
InvalidateDatasource Vuelve a cargar y muestra los datos actuales desde el elemento de trabajo.
SetSite Proporciona una referencia al IServiceProvider si necesita tener acceso a servicios dentro de Visual Studio;su valor puede ser null.
Propiedades Bolsa de propiedades que contiene atributos relevantes para el campo concreto de la definición XML del tipo de elemento de trabajo que aloja.
ReadOnly Indica que el control debe mostrarse en modo de sólo lectura.
WorkItemDatasource Una referencia a la instancia de elemento de trabajo activos;tiene que convertirlo a una instancia de elementos de trabajo.
WorkItemFieldName El nombre del campo al que está enlazado el control.

Figura a 2 miembros IWorkItemControl

Para cada una de las propiedades de interfaz, deberá crear un campo de respaldo correspondiente. Para almacenar el WorkItemDatasource como una referencia con establecimiento inflexible de tipos, deberá agregar una referencia al ensamblado Microsoft.TeamFoundation.WorkItemTracking.Client.dll almacenado en % 9.0\Common7\IDE\PrivateAssemblies de programa%\Microsoft Visual Studio. Una vez agregado esta referencia, también debe importar el espacio de nombres Microsoft.TeamFoundation.WorkItemTracking.Client. Después de vinculado las propiedades con sus campos de copia de seguridad, puede implementar los métodos de interfaz.

Sin embargo, antes de hacerlo, deberá definir los elementos de datos para el cuadro combinado y la dirección de la pregunta si desea ajustar los valores utilizados con facilidad. Si es así, debe implementar un mecanismo como un servicio Web que permite el control para recuperar los valores más actuales. Además, si va a mostrar los valores de cadena, deberá los problemas de localización. Para este ejemplo, sin embargo, nos sólo agregue un constructor predeterminado que hardcodes los valores, que se muestra a continuación. Tenga en cuenta que el tiempo de ejecución elemento de trabajo admite sólo controles que tienen un valor predeterminado, ningún constructor de argumentos.

Public Sub New()
  MyBase.New()

  Me.Items.Add("1 - Must Have")
  Me.Items.Add("2 - Should Have")
  Me.Items.Add("3 - Could Have")
End Sub

También debe proporcionar una implementación para el método Clear. De forma predeterminada, cuando el tiempo de ejecución elemento de trabajo carga el control, el valor mostrado está en blanco. Para volver a este estado, deberá establecer la propiedad SelectedIndex en -1 en el método Clear. Los dos últimos métodos que necesita implementar se refieren a cargar el valor del campo de elemento de trabajo enlazado a y desde la instancia de elemento de trabajo y a continuación, almacenar el valor si el usuario guarda el elemento de trabajo. Utilice el método de InvalidateDataSource para actualizar datos de presentación de su control ’s del elemento de trabajo actual o borrar los datos cargados previamente. El tiempo de ejecución elemento de trabajo llama a FlushToDataSource cuando lo guardar el elemento de trabajo activo. Figura 3 proporciona una implementación para ambos métodos para el rango control personalizado.

Figura 3 implementación de FlushToDatasource y InvalidateDataSource

Public Sub FlushToDatasource() _
  Implements IWorkItemControl.FlushToDatasource
 
  If SelectedIndex > -1 And workItemDS IsNot Nothing Then
    RaiseEvent BeforeUpdateDatasource(Me, EventArgs.Empty)
    workItemDS.Fields(fieldName).Value = CStr(SelectedIndex + 1)
    RaiseEvent AfterUpdateDatasource(Me, EventArgs.Empty)
  End If
End Sub

Public Sub InvalidateDatasource() _
  Implements IWorkItemControl.InvalidateDatasource
  If workItemDS IsNot Nothing AndAlso _
    Not String.IsNullOrEmpty(workItemDS.Fields(fieldName).Value) Then

    Dim current As Integer = CInt(workItemDS.Fields(fieldName).Value)
    ' Make sure the value returned does not exceed our valid range
    ' If it does, set it to our most important value
    If current > Me.Items.Count Then
      current = 1
    End If
    SelectedIndex = (current - 1)
  Else
    Clear()
  End If
End Sub

FlushToDataSource comprueba si el usuario ha seleccionado un valor y que la referencia al elemento activo de trabajo sigue siendo válida. Si es así, desencadena el evento BeforeUpdateDataSource, escribe el valor actual en el elemento de trabajo y esto sigue mediante una llamada a AfterUpdateDataSource. InvalidateDataSource comprueba si hay una referencia válida a un elemento de trabajo activo. Si es así, comprueba si hay un valor almacenado actualmente en el campo dependiente, recupera el valor si hay y convierte en un entero porque almacenado como una cadena. Por último, realiza una comprobación de intervalo para asegurarse de que el valor doesn’t exceden el intervalo admitido del control, en este ejemplo, 1 a 3. Aquí, el código simplemente establece el valor a 1 si ’s fuera del intervalo admitido. Como alternativa, podría proporcionar alguna interfaz de usuario para permitir al usuario seleccionar un valor compatible o alguna otra experiencia. Por último, si hay ningún elemento de trabajo activos o si el usuario no ha realizado una opción, el código llama al método Clear para restablecer el control. Figura 4 proporciona la implementación completa del control Rank.

Figura 4 el Control Rank

Imports System.Windows.Forms
Imports Microsoft.TeamFoundation.WorkItemTracking.Controls
Imports Microsoft.TeamFoundation.WorkItemTracking.Client
Imports System.Collections.Specialized

Public Class Rank
  Inherits ComboBox
  Implements IWorkItemControl
  ' Backing fields
  Private fieldName As String
  Private fReadOnly As Boolean
  Private serviceProvider As IServiceProvider
  Private workItemDS As WorkItem
  Private workItemProperties As StringDictionary

  Public Event AfterUpdateDatasource( _
    ByVal sender As Object, ByVal e As System.EventArgs) _
    Implements IWorkItemControl.AfterUpdateDatasource

  Public Event BeforeUpdateDatasource( _
    ByVal sender As Object, ByVal e As System.EventArgs) _
    Implements IWorkItemControl.BeforeUpdateDatasource

  Public Sub New()
    MyBase.New()
 
    Me.Items.Add("1 - Must Have")
    Me.Items.Add("2 - Should Have")
    Me.Items.Add("3 - Could Have")
  End Sub

  Public Sub Clear() Implements IWorkItemControl.Clear
    SelectedIndex = -1
  End Sub

  Public Sub FlushToDatasource() _
    Implements IWorkItemControl.FlushToDatasource

    If SelectedIndex > -1 And workItemDS IsNot Nothing Then
      RaiseEvent BeforeUpdateDatasource(Me, EventArgs.Empty)
      workItemDS.Fields(fieldName).Value = CStr(SelectedIndex + 1)
      RaiseEvent AfterUpdateDatasource(Me, EventArgs.Empty)
    End If
  End Sub

  Public Sub InvalidateDatasource() _
    Implements IWorkItemControl.InvalidateDatasource
    If workItemDS IsNot Nothing AndAlso _
      Not String.IsNullOrEmpty(workItemDS.Fields(fieldName).Value) Then
 
      Dim current As Integer = CInt(workItemDS.Fields(fieldName).Value)
      ' Make sure the value returned does not exceed our valid range
      ' If it does, set it to our most important value
      If current > Me.Items.Count Then
        current = 1
      End If
      SelectedIndex = (current - 1)
    Else
      Clear()
    End If
  End Sub

  Public Property Properties() As StringDictionary _
    Implements IWorkItemControl.Properties
    Get
      Return workItemProperties
    End Get
    Set(ByVal value As System.Collections.Specialized.StringDictionary)
      workItemProperties = value
    End Set
  End Property

  Public Property IsReadOnly() As Boolean _
    Implements IWorkItemControl.ReadOnly
    Get
      Return fReadOnly
    End Get
    Set(ByVal value As Boolean)
      fReadOnly = value
      Enabled = (Not fReadOnly)
    End Set
  End Property

  Public Sub SetSite(ByVal serviceProvider As IServiceProvider) _
    Implements IWorkItemControl.SetSite
    Me.serviceProvider = serviceProvider
  End Sub

  Public Property WorkItemDatasource() As Object _
    Implements IWorkItemControl.WorkItemDatasource
    Get
      Return workItemDS
    End Get
    Set(ByVal value As Object)
      workItemDS = TryCast(value, WorkItem)
    End Set
  End Property

  Public Property WorkItemFieldName() As String _
    Implements IWorkItemControl.WorkItemFieldName
    Get
      Return fieldName
    End Get
    Set(ByVal value As String)
      fieldName = value
    End Set
  End Property
End Class

Antes de que puede probar el control, debe realizar tres pasos adicionales. En primer lugar, deberá proporcionar un archivo de configuración XML simple que define el control para el tiempo de ejecución elemento de trabajo. En segundo lugar, necesita implementar ensamblado ’s control y configuración de archivo (así como la PDB) si desea depurar en una de las ubicaciones válidas admite el motor en tiempo de ejecución. Por último, deberá actualizar la definición de tipo para un elemento de trabajo que utiliza el campo Rank y agregar la información correcta para cargar el control.

Implementar y depurar

Cada control personalizado que cree debe tener un archivo WICC. Necesita crear un archivo XML simple, como el que se muestra aquí, que define el ensamblado de host y el nombre de clase del control.

<?xml version="1.0" encoding="utf-8" ?>
<CustomControl xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Assembly>BrianRandell.MSDNMag.WICC.Winforms.dll</Assembly>
  <FullClassName>BrianRandell.MSDNMag.WICC.Winforms.Rank</FullClassName>
</CustomControl>

Una vez creado este archivo, debe copiar el archivo WICC, el archivo DLL y su PDB a uno de dos ubicaciones. Si desea que el control sea visible sólo para su cuenta, cópielo en % local aplicación Data%\Microsoft\Team Foundation\Work elemento Tracking\Custom Controls\9.0. Para que el control sea visible para todos los usuarios de una estación de trabajo determinado, copie los archivos a % Common Application Data%\Microsoft\Team Foundation\Work elemento Tracking\Custom Controls\9.0. Probablemente debe crear la estructura de carpeta en la carpeta de Microsoft. Puede utilizar System.Environment.GetFolderPath con el valor de Environment.SpecialFolder.LocalApplicationData o Environment.SpecialFolder.CommonApplicationData para averiguar las rutas de acceso en su estación de trabajo local. Una vez que copiado los archivos a uno de estos directorios, tiene que modificar la definición de tipo para un elemento de trabajo, en este ejemplo, la tarea de elemento de trabajo de la plantilla MSF Agile, utilizar el control. (Consulte mi artículo en msdn.microsoft.com/magazine/dd221363.aspx para obtener más información.)

Puede modificar la información de diseño del formulario para el campo Rank como se muestra en el código siguiente. En tiempo de ejecución, el establecimiento de elemento de trabajo pasa todos los atributos, aparece como parte de definición de diseño el campo ’s, al control mediante la propiedad IWorkItemControl.Properties. El cambio sólo que tiene que hacer es cambiar el atributo Type de la predeterminada FieldControl para clasificar, el nombre del control recién creado. Una vez realizó el cambio e importar la nueva definición de tipo de elemento de trabajo en un proyecto de equipo, puede probar cosas.

<Control Type="Rank" FieldName="Microsoft.VSTS.Common.Rank" 
Label="Ran&amp;k:" LabelPosition="Left" 
NumberFormat="WholeNumbers" MaxLength="10"/>

Para depurar, tiene que ha copiado los bits más recientes en la carpeta de implementación correcta y importar la definición de tipo modificado en un proyecto de equipo. A continuación, debe modificar la configuración Debug para el proyecto que utilice la opción “ programa externo de inicio ” y apuntar a devenv.exe (consulte de figura 5). Ahora puede establecer algunos puntos de interrupción y empezar a depurar.


Figura 5 elija la opción de programa externo de conjunto.

Implantación de producción

Después de averiguar cualquier magulladuras en el control, tiene que implementar en estaciones de trabajo para todos los usuarios que utilizarán el elemento de trabajo afectado. Puede hacerlo de varias formas. Puede crear un programa de instalación mediante la plantilla Visual Studio integrada o puede crear una secuencia de comandos simple que se ejecuta como parte de un usuario ’s secuencia de comandos de inicio de sesión y xcopy los archivos colocarlo. Por último, si ya implementado la versión de octubre de 2008 de Team Foundation Server Power Tools, puede utilizar la característica de implementación que ofrecen herramientas la energía. Para utilizar esta característica, deberá comprobar en el ensamblado y archivo WICC a una carpeta % Name%/TeamProjectConfig/CustomControls de proyecto de equipo. A continuación, sólo necesita tener acceso a la opción de configuración en el nodo de miembros del equipo y seleccione la opción “ instalación descarga componentes personalizados ”. Tenga en cuenta que ’re aconseja encarecidamente nombre los ensamblados si utiliza esta característica. Microsoft proporciona información sobre esta característica en los archivos de Ayuda Power Tools.

Advertencias

En este momento, visto las ventajas de controles personalizados. Ahora algunas advertencias. La primera cuestión grande es la compatibilidad de host. Creamos un control personalizado que se ejecuta sólo en Visual Studio 2008 o una aplicación que hosts Microsoft proporcionan control personalizado. Si desea compatibilidad con Visual Studio 2005, deberá crear una versión de la versión 2005 de Team Explorer e implementar el ensamblado y WICC archivos por separado. ¿Y qué acerca de Team System Web Access? En teoría, si utiliza sólo Internet Explorer como explorador Web, esto podría funcionar, pero lo doesn’t. Lo que ve es similar a figura 6.


Figura 6Compatibilidad con Visual Studio 2005 requiere pasos adicionales

La buena noticia es que la versión 2008 de Team System Web Access admite su propio modelo de control personalizado. Encontrará documentación con ejemplos bajo % Program Files%\Microsoft Visual Studio 2008 Team System Web Access\Sdk en el equipo donde ha instalado Team System Web Access. Sin embargo, esto sólo funciona si ejecutando la versión de 2008;la versión 2005 doesn’t admite controles personalizados. Además, un producto de terceros como Teamprise doesn’t cualquiera. La mejor solución es definir varios elementos LAYOUT en definición de tipo ’s el elemento de trabajo. A continuación, debe duplicar la definición de cada host incompatible o diferente. Desea decorar el elemento LAYOUT con un atributo de destino. Para Windows, utilice formularios Windows Forms para el valor. Para Team System Web Access, utilice el Web. Para Teamprise, utilice Teamprise. Vea de aspx msdn.microsoft.com/library/aa337635(VS.80).aspx para obtener más información.

Utilizar los diseños personalizados soluciona el problema de representación, pero también destaca una luz en un problema más sutil. Hosts como Microsoft Excel y Microsoft Project don’t admite en todos los controles personalizados. Son no se ve afectadas por los ajustes realizados al elemento LAYOUT de un tipo de elemento de trabajo. Por lo tanto, cualquier host que doesn’t admiten el control personalizado expondrán los datos sin procesar a través de su interfaz estándar. En el caso del campo Rank, que significa que un campo de edición estándar. Cada host aplicará las reglas definidas para el elemento de trabajo. Sin embargo, la lógica personalizada que se implementa en el control personalizado no lo hará. Por lo tanto, si va hacia abajo de la carretera de utilizar controles personalizados, deberá educar a los usuarios en entrada de datos correctos cuando se ejecuta fuera de hosts compatibles y asegúrese de que el control realiza la validación de datos adecuados.

Team System 2010

La próxima versión de 2010 de Team System promete ser lleno de Dios de cliente y servidor. En mayo de 2009, Microsoft publicó la versión Beta 1 para revisión. Mientras escribo esta columna, Microsoft ha prometido una segunda versión beta en otoño de 2009. Aunque todavía hay que realizar algunos cambios, el elemento de trabajo característica de seguimiento es muy maduro. Posiblemente, la característica más solicitada proporcionada por Microsoft es elementos de trabajo jerárquica. Dicho esto, Estoy utilizando la versión Beta 1, por lo que nada y todo lo que trataré aquí es sujeta a cambios entre ahora y la versión final.

Las versiones anteriores de Team Foundation Server admiten la noción de vincular elementos de trabajo. Al vincular un elemento de trabajo a otro elemento de trabajo, se crea una relación bidireccional. Cualquier elemento de trabajo puede vincularse a cualquier elemento de trabajo. Aunque útil, esta característica doesn’t ofrece relaciones primaria-secundaria. Además, es posible que también desea ser capaz de definir la precedencia, algo muy común cuando se utiliza Microsoft Project para administrar tareas. Por suerte, estas dos áreas se tratan en la versión de 2010. Para admitir la semántica de vínculo nuevo, Microsoft ha creado dos tipos de consulta de elemento de trabajo nueva: Elementos de trabajo y vínculos directos (vínculos consulta) y árbol de trabajo elementos (consulta de árbol). Cuando se crea una nueva consulta de elemento de trabajo, puede elegir uno de estos nuevos tipos o elija plano lista de elementos de trabajo, que representa el tipo de consulta disponible antes de la versión de 2010 estándar.

Para empezar, eche un vistazo a los tipos de elemento de trabajo integrado nueva y consultas de elemento de trabajo. Puesto que tiene con versiones anteriores, Microsoft ofrece actualmente dos plantillas de procesos. En esta etapa del ciclo de desarrollo, la mayor parte de su trabajo es visible en MSFT para Agile Software Development v5.0 plantilla. Microsoft promete que la versión basada en CMMI mostrará actualizaciones importantes en la versión Beta 2. Por lo tanto, esté utilizando la plantilla Agile como mi punto de referencia. Una vez crea un nuevo proyecto de equipo y expande el nodo de elementos de trabajo, encontrará los nodos de Mis consultas y de equipo familiares. Dos mejoras sutiles en observa el Team Explorer ventana. En primer lugar, Microsoft cambiado el criterio de ordenación: Mis consultas se ordena antes de consultas del equipo. En segundo lugar, Microsoft personaliza los iconos utilizados para cada nodo. Si abrir el nodo consultas del equipo, encontrará la lista de consultas predefinidas ha cambiado considerablemente (consulte de figura 7). Además, tenga en cuenta que Microsoft ha agregado una nueva carpeta, consultas del libro. Esta carpeta contiene las consultas que admiten la nueva característica de libros de Excel. ’Re libre para ejecutar las consultas, pero no debe modificaren caso contrario, podría interrumpir uno o varios de los libros que dependen de estas consultas determinadas.

TFS 2008 TFS 2010 Beta 1

Errores activos Errores activos

Todos los problemas Mis errores

Todos los requisitos de calidad de servicio Mis tareas

Todos los escenarios Mis casos de prueba

Tarea todo Mis elementos de trabajo

Todos los elementos de trabajo Problemas abiertos

Mis elementos de trabajo para todos los proyectos de equipo Abrir tareas

Lista de comprobación del proyecto Abrir casos de prueba

Errores resueltosAbrir experiencias de usuario

Errores clasificados Abrir elementos de trabajo

 P1 y P2 errores activos

 Errores resueltos

 Experiencias de usuario sin casos de prueba

Figura 7 predefinido consultas en Team System 2010

Verá de los nombres nuevos que Microsoft ha realizado cambios profundos en la plantilla completa. Hay tipos de elemento de trabajo nuevo, como artículo de usuario (vea de figura 8) y mi prueba. Microsoft ha atento a la comunidad y aplica toneladas de comentarios (como se utiliza más habitualmente había adoptado términos), realizado simplificaciones y informes mejorados. Nuevos libros basados en Excel, alusión anteriormente, proporcionar seguimiento de proyecto enriquecido sin necesidad de SQL Server Reporting Services, con mejor estimación y seguimiento de recursos y gráficos nuevos como los gráficos de grabación desplegable. Cuando Microsoft se desplaza más cerca liberar, profundizar más en el lanzamiento de 2010, incluido cómo actualizar las plantillas personalizadas y el código personalizado.

Figura 8 la historia de usuario predefinidas de consulta

Conclusión

Controles personalizados de elemento de trabajo en Team Foundation Server proporcionan un mecanismo útil para mejorar el uso de elementos de trabajo en sus equipos. Aunque esta característica no es perfecta, Microsoft continúa para que sea mejor. De hecho, mientras esperamos a la versión de 2010 de Team System, vea un futuro muy brillante para Team System como un todo y especialmente el seguimiento de elemento de trabajo.