Использование пользовательских расширений для рабочих элементов TFS - Использование пользовательских элементов

ОГЛАВЛЕНИЕ

Использование пользовательских элементов

Не всегда использование встроенных элементов пользовательского интерфейса удовлетворяют необходимым условиям их использования. Для расширения возможностей и более гибкой работы с данными рекомендуется применять пользовательские расширения для интерфейса. Вот некоторые причины, которые могут подтолкнуть к использованию пользовательских элементов для динамических списков:

  • Стандартные конструкторы правил не удовлетворяют все необходимые условия;
  • Используются очень большие объемы данных;
  • Данные используются из внешнего источника;
  • Значение поля будет храниться в другом месте, а не в стандартом хранилище данных рабочих элементов;

Подготовка проекта

Для создания и редактирования пользовательских расширений интерфейса используется среда разработки MS Visual Studio 2005 или 2008, причем, использование одного и того же расширения допускается в обоих версиях MS Visual Studio.

Для нового пользовательского элемента необходимо создавать проект как «Windows Control Library» (см. Рисунок 8).

 

Рисунок 8. Создание нового проекта

Кроме того, класс, который создается, должен реализовывать интерфейс «IWorkItemControl». Этот интерфейс определен в сборке «Microsoft.TeamFoundation.WorkItemTracking.Controls.dll», которая обычно находится в каталоге «<Диск>:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies». Также необходим доступ к сборке «Microsoft.TeamFoundation.WorkItemTracking.Client.dll», в которой находится описание основных классов, которые необходимы для работы с рабочим элементом. Для того, чтоб получить доступ к интерфейсу и к основным классам рабочего элемента, необходимо добавить ссылку на сборки «Microsoft.TeamFoundation.WorkItemTracking.Controls.dll» и «Microsoft.TeamFoundation.WorkItemTracking.Client.dll» (см. Рисунок 9) и добавить в исходный код строки:

using Microsoft.TeamFoundation.WorkItemTracking.Client;
using Microsoft.TeamFoundation.WorkItemTracking.Controls;
 
 

Рисунок 9. Ссылки на сборки

Интерфейс «IWorkItemControl» имеет следующие важные составляющие (см. Таблица 1):

Таблица 1.  Элементы интерфейса «IWorkItemControl»

Наименование
Тип
Описание
 WorkItemDatasource  Свойство Определяет доступ к объекту рабочего элемента. Для использования этого свойства, его необходимо приводить к типу WorkItem (определение этого типа описано в сборке «Microsoft.TeamFoundation.WorkItemTracking.Controls.dll»)
 WorkItemFieldName  Свойство Свойство определяет наименование поля, с которым ассоциирован пользовательский элемент. Пользовательский элемент может быть ассоциирован с одним полем или не ассоциирован вовсе.
 InvalidateDatasource  Метод Этот метод используется для перерисовки пользовательского элемента.
 SetSite  Метод Передает указатель на интерфейс IServiceProvider. Используется если необходимо получить доступ сервисам VS Services.
 Clear  Метод Используется для сброса содержимого пользовательского элемента.
 Properties  Свойство Дает доступ ко всем атрибутам, которые были установлены для этого пользовательского элемента при описании рабочего элемента.
 BeforeUpdateDatasource  Обработчик события События вызываются перед и после обновления значений объекта WorkItem соответственно. Когда значение, которое установлено в пользовательском элементе, изменяется, форма рабочего элемента выполняет для всех элементов (через вызов метода InvalidateDatasource) для обновления их значений.
 AfterUpdateDatasource  Обработчик события
 ReadOnly  Свойство  Определяет доступ только для чтения к пользовательскому элементу.
 FlushToDatasource  Метод Пользовательский элемент запрашивается для сброса значения в объект рабочего элемента. Обычно вызывается при операции сохранения или когда вышли из формы рабочего элемента. Этот метод можно не использовать, если значение пользовательского элемента устанавливается в объект рабочего элемента сразу после его изменения.

В результате для нового пользовательского элемента должен получиться листинг, который приведен ниже.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Collections.Specialized;
using Microsoft.TeamFoundation.WorkItemTracking.Client;
using Microsoft.TeamFoundation.WorkItemTracking.Controls;

namespace DependentComboBox
{
    public partial class DependentComboBoxControl : UserControl, IWorkItemControl
    {
        public DependentComboBoxControl()
        {
            InitializeComponent();            
        }

        #region IWorkItemControl Members
    }
}

Регистрация пользовательского элемента

Перед началом использования пользовательского расширения и его отладкой, dll-файл, который содержит расширение, необходимо разместить в определенном месте. Все пользовательские элементы для MS Visual Studio 2005 находятся в специальной папке «Microsoft\Team Foundation\Work Item Tracking\Custom Controls», местонахождение которой система определяет в следующей последовательности:

  1. В первую очередь поиск папки производится по пути «Environment.SpecialFolder.CommonApplicationData»;
  2. Далее по пути «Environment.SpecialFolder.LocalApplicationData».

Если Вы используете MS Visual Studio 2008, то пользовательские элементы размещаются в подкаталоге «9.0» вышеприведенного каталога. Такой подход сделан для тех случаев, если на одном рабочем месте используются MS Visual Studio 2005 и MS Visual Studio 2008.

Примечание: Если на одном рабочем месте используются MS Visual Studio 2005 и MS Visual Studio 2008, то важно помнить, что пользовательское расширение необходимо перекомпилировать под каждую среду, в которой оно будет использоваться. Это связано с различными dll-зависимостями для каждой среды.

Кроме этого необходимо определить для каждого пользовательского расширения специальный (.wicc) файл, в котором находится описание элемента. Этот файл должен находиться вместе с dll-файлом пользовательского элемента и иметь наименование как «<имя_элемента>.wicc». Файл описания расширения представляет собой xml-файл и имеет следующую структуру:

<?xml version="1.0"?>
<CustomControl xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Assembly>DependentComboBox.dll</Assembly>
  <FullClassName> DependentComboBox.DependentComboBoxControl</FullClassName>
</CustomControl>


Как видно из структуры, файл описания определяет следующее:

  • Наименование сборки (элемент <Assembly>) пользовательского расширения;
  • Полное наименование класса (элемент <FullClassName>), в котором это расширение реализован. 

Отладка проекта

Для отладки пользовательского расширения можно использовать другую запущенную копию MS Visual Studio, в которой это расширение будет использоваться. Для этого необходимо сконфигурировать опцию отладки проекта, как это изображено на рисунке ниже (см. Рисунок 10) для MS Visual Studio 2005.

 
Рисунок 10. Конфигурирование отладки для MS Visual Studio 2005

Размещение элемента на форме

Для редактирования форм, состава полей и состояний рабочего элемента используются два подхода:

  1. С помощью специального xml-файла, который используется для описания рабочих элементов, и утилит импорта (witimport) и экспорта (witexport) рабочих элементов из шаблона процесса на сервере. С правилами редактирования и составом xml-файла можно ознакомиться по адресу http://msdn.microsoft.com/en-us/library/ms243849.aspx ;
  2. С помощью графического редактора шаблона процесса, который входит в состав утилит Team Foundation Server Power Tools. Скачать и просмотреть полную информацию об этом продукте можно:
    • Для MS Visual Studio 2005 - http://msdn2.microsoft.com/en-us/teamsystem/aa718351.aspx ;
    • Для MS Visual Studio 2008 - http://msdn.microsoft.com/tfs2008/bb980963.aspx .