Заметки консультанта

Шамрай Александр Владимирович

Организация управления расписаниями (Timesheet) в TFS

Posted by Шамрай Александр на Март 10, 2016

Если вам необходимо точно отслеживать время и активности, которые происходят при выполнении задач, а также время, которое тратится на различные собрания и другие общие активности, а при этом нет желания покупать и интегрироваться со сторонними решения, то можно воспользоваться стандартными возможностями TFS.

TFS «из коробки» в принципе дает уже некоторые такие функции на основе задач и отчетности, что рассматривалось здесь ранее, но при этом нужно следовать строгим правилам:

  1. Пользователи системы должны по факту событий или ежедневно указывать потраченное на задачи время.
  2. Указание комментариев и новых значений времени должны выполняться одним сохранением.

Но следовать таким установкам не всегда возможно. Поэтому мы рассмотрим другой вариант, который будет не очень сложен для реализации собственными силами и будет отвечать следующим требованиям:

  1. Возможность отслеживать активности связанные или не связанные с конкретными задачами.
  2. Возможность указывать дату для активностей, чтоб их можно было вносить пост фактом.
  3. Автоматизировать калькуляцию времени у задач, для которых существуют активности.
  4. Возможность собрать отчетную информацию.

Основная идея данного решения состоит в следующем:

  1. Ввести новый рабочий элемент, который мы назовем Активность. Он будет использоваться для сохранения времени и при этом он может связываться с задачами либо вводиться отдельно.
  2. Доработать рабочий элемент Задача, чтобы можно было быстро добавлять новые Активности по ней. Новые Активности будут являться дочерними по отношению к задачам, что позволит по необходимости строить запросы со связями, а также использовать существующие отчеты.
  3. Написать решение, которое будет обновлять время у Задач. По всем связанным активностям в родительскую задачу будет суммироваться потраченное время и соответствующе уменьшаться запланированное.
  4. Подготовить отчет, который позволит просматривать Активности по текущим работам. Для примера мы изменим один из существующих отчетов, который позволит построить дерево работ по иерархии Требование->Задача->Активность.

Давайте рассмотрим эти шаги подробнее для TFS 2015 русской версии.

Ввести новый рабочий элемент Активность

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

  • Для редактирования мы воспользуемся TFS Power Tools и пример экспорта отображен на рисунке ниже:

Рисунок 1. Экспорт типа рабочего элемента

  • Далее мы открываем экспортированный файл и для определения типа рабочего элемента меняем его название:

Рисунок 2. Название типа рабочего элемента

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

Рисунок 3. Поле Дисциплина

  • Завершенная работа. Также используем стандартное поле, но устанавливаем ему обязательность для заполнения. Кроме этого, если время могут изменять, поле Исходная оценка можно использовать для хранения предыдущего значения времени.

Рисунок 4. Поле завершенной работы

  • Дата активности. Тут можно использовать новое поле, которое должно попадать в базу для отчетов, и нужно добавить его на форму с возможностью выбора даты.

Рисунок 5. Поле даты активности

Рисунок 6. Размещение даты активности на форме

  • Техническое поле, которое будет использоваться как флаг для приложения обработки времени. Это поле будет сбрасываться при изменениях времени и даты Активности.

Рисунок 7. Отслеживание изменения активности

Состояния можно либо оставить, либо удалить, оставив только Предложено. После всех изменений модифицированный рабочий элемент импортируется в проект TFS.

Рисунок 8. Импорт нового типа рабочего элемента

Пример рабочего элемента Активность можно посмотреть в конце статьи.

Доработать рабочий элемент Задача

Для задачи изменений особых добавлять нет острой необходимости. Мы всего лишь добавим контрол, который позволит пользователю видеть все активности по задаче и быстро добавлять новые активности.

  • В этом случае выполняется изменение определения типа рабочего элемента Задача непосредственно на сервере без операций экспорта и импорта.

Рисунок 9. открыть рабочий элемент с сервера

  • Для контрола мы создаем новую вкладку, в которую уже его и добавляем с типом LinkControlOptionsType, а также конфигурируем на добавление и отображение только дочерних Активностей. Пример контрола и его свойств отображен ниже.

Рисунок 10. Новая вкладка и контрол

Рисунок 11. Настройки контрола

В результате мы получим Задачу приблизительно в следующем виде:

Рисунок 12. Пример формы задачи

Написать решение, которое будет обновлять время у Задач

Решение можно реализовать различными подходами:

  1. Реализовать как серверный плагин. В данном случае выполняется разработка плагина, который «прослушивает» все события по изменению рабочих элементов и срабатывает только, когда выполняется работа с Активностями. Метод позволяет фактически моментально выполнять необходимые изменения, но будет дополнительно нагружать сервер TFS, особенно если происходит какое-то массовое изменение рабочих элементов.
  2. Реализовать как веб-сервис. TFS позволяет двумя различными методами подписываться на события, которые в нем происходят, и отправлять сообщения на SOAP сервисы. В данном случае мы будем получать только нужные для нас сообщения, но нужна дополнительная реализация самого сервиса, обработка входящих сообщений, а в дельнейшем также нужно задуматься, где его развернуть.
  3. Отдельное консольное приложение. В данном случае приложение работает на основе запроса по рабочим элементам, который будет получать необходимую информацию и выполнять операции по обновлению данных. В этом методе будет использоваться минимум кода, а развернуть его можно в виде периодической задачи на любом рабочем месте, включая сам сервер TFS, с предустановленными клиентскими библиотеками. Этот вариант проще для реализации, поэтому его мы и рассмотрим.

Основные шаги приложения будут следующими:

  • Подключение к хранилищу рабочих элементов и выполнения запроса. В нашем случае запрос отбирает информацию о ссылках активностей, которые связаны с задачами и были созданы или обновлены. Пример подключения и выполнения запроса:

WorkItemStore wiStore = new WorkItemStore(«http://tfs-srv:8080/tfs/DefaultCollection»);

Query query = new Query(wiStore, QueryStr);

var result = query.RunLinkQuery();

  • Перебор результата запроса и получение связанных задач и активностей. Пример получения задач и активности:

WorkItem activity = wiStore.GetWorkItem(wilink.SourceId);

WorkItem task = wiStore.GetWorkItem(wilink.TargetId);

  • Получение информации о времени и обновление полей с временем у задачи. Пример операции:

Double work = (Double)activity.Fields[«Microsoft.VSTS.Scheduling.CompletedWork»].Value;

Field taskRemaining = task.Fields[«Microsoft.VSTS.Scheduling.RemainingWork»];

if (taskCompleted.Value == null) taskCompleted.Value = work;

else taskCompleted.Value = (Double)taskCompleted.Value + work;

task.Save();

  • Обновление информации в Активности о том, что из нее данные получены, а также блокировка ссылки с задачей для того, чтоб ее случайно или намеренно эта связь не потерялась. Пример блокировки связи:

foreach (WorkItemLink activityLink in activity.WorkItemLinks)

{
if (activityLink.LinkTypeEnd.Id == parentLink.Id)

{

if (activityLink.IsLocked) break;

activityLink.IsLocked = true;

break;

}

}

Пример приложения можно посмотреть в конце статьи.

Подготовить отчет

Для отчета, как и в случае с рабочими элементами, мы воспользуемся существующим, который называется «Ход реализации требований». Данный отчет уже хорошо подготовлен, он выстраивает дерево требований и работ, собирает по ним информацию о трудозатратах и имеет параметры, которые можно настроить под собственные потребности. Для работы с отчетом можно использовать Report Builder, в котором нужно выполнить следующие шаги:

  • Открыть отчет «Ход реализации требований», который будет являться исходным. По умолчанию он находится в каталоге «Управление проектами». Сохраним отчет с новым именем.

Рисунок 13. Расположение исходного отчета

  • Добавить новый параметр, который будет содержать название рабочего элемента Активность, например, следующим образом:

Рисунок 14. Параметр Activity

  • Изменить запрос отчета для того, чтоб потраченное время учитывалось только через рабочие элементы Активность, а также по необходимости вывести дополнительные, например, Кому назначено, Тип и дата активности. Пример учета потраченных часов из активностей:

Рисунок 15. Пример изменения запроса

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

Рисунок 16. Выражение для поля Исполнитель

  • Далее нам необходимо протестировать и сохранить отчет:

Рисунок 17. Пример работы отчета

В итоге

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

Ресурсы

То, что использовалось в данной статье, можно скачать здесь:

  • Определение типа рабочего элемента Активность – Активность.xml.
  • Исходный код решения для обновления потраченного времени – UpdateCompletedFromActivity.zip.
  • Доработанный отчет по требованиям и их задачам и активностям – «Активности по требованиям.rdl».
Advertisements

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

 
%d такие блоггеры, как: