关于工作项更改的 TFS 2013 事件处理 [英] TFS 2013 event handling on work item change
本文介绍了关于工作项更改的 TFS 2013 事件处理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想开发在 TFS 团队集合中每次创建或更改工作项时运行的软件.
I would like to develop software which runs every time a work item is being created or changed in a TFS team collection.
我的 TFS 服务器版本是 2013,我计划很快升级到 2015.
My TFS server version is 2013 and i'm planning to upgrade soon to 2015.
我尝试了以下文章 但它在 2013 年不起作用...
I tried the following article but it doesn't work on 2013...
你有什么推荐?
推荐答案
找到答案!
这是我的代码:
using Microsoft.TeamFoundation.Common;
using Microsoft.TeamFoundation.Framework.Server;
using Microsoft.TeamFoundation.WorkItemTracking.Server;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TFSClaritySyncEventHandler
{
public class WorkItemChangedEventHandler : ISubscriber
{
public string Name
{
get { return "WorkItemChangedEventHandler"; }
}
public SubscriberPriority Priority
{
get { return SubscriberPriority.Normal; }
}
public EventNotificationStatus ProcessEvent(
TeamFoundationRequestContext requestContext,
NotificationType notificationType,
object notificationEventArgs,
out int statusCode,
out string statusMessage,
out ExceptionPropertyCollection properties)
{
statusCode = 0;
properties = null;
statusMessage = String.Empty;
try
{
if (notificationType == NotificationType.Notification && notificationEventArgs is WorkItemChangedEvent)
{
var ev = notificationEventArgs as WorkItemChangedEvent;
StringBuilder sb = new StringBuilder();
if (ev.ChangeType == ChangeTypes.Change)
{
sb.AppendFormat("WorkItem {0} was changed!
", ev.Title);
}
else
{
sb.AppendFormat("WorkItem {0} was created!
", ev.Title);
}
if (ev.ChangedFields != null)
{
foreach (var item in ev.ChangedFields.IntegerFields)
{
sb.AppendFormat("{0} = {1} => {2}
", item.Name, item.OldValue, item.NewValue);
}
foreach (var item in ev.ChangedFields.StringFields)
{
sb.AppendFormat("{0} = {1} => {2}
", item.Name, item.OldValue, item.NewValue);
}
}
sb.Append("
All fields:
***********
");
foreach (var item in ev.CoreFields.IntegerFields)
{
sb.AppendFormat("{0} = {1}
", item.Name, item.NewValue);
}
foreach (var item in ev.CoreFields.StringFields)
{
sb.AppendFormat("{0} = {1}
", item.Name, item.NewValue);
}
EventLog.WriteEntry("Tfs Services", sb.ToString(), EventLogEntryType.Information);
}
}
catch (Exception exception)
{
TeamFoundationApplicationCore.LogException("Error processing event", exception);
}
return EventNotificationStatus.ActionPermitted;
}
public Type[] SubscribedTypes()
{
return new Type[] { typeof(WorkItemChangedEvent) };
}
}
}
导致事件日志:
工作项创建日志
WorkItem was created!
Area ID = -2147483648 => 2
Iteration ID = -2147483648 => 3
Priority = -2147483648 => 2
ID = -2147483648 => 28
Rev = -2147483648 => 1
PersonID = -2147483648 => 11
Watermark = -2147483648 => 54
Work Item Type = => Task
Area Path = => TestTeamProject
Node Name = => TestTeamProject
Team Project = => TestTeamProject
Area Level 1 = => TestTeamProject
Iteration Path = => TestTeamProjectSprint 1
Iteration Level 1 = => TestTeamProject
Iteration Level 2 = => Sprint 1
Created By = |%00000000-0000-0000-0000-000000000000| => |guybe%b412f809-e7b9-4c99-93c4-810d4dc5bb8d|
Changed By = |%00000000-0000-0000-0000-000000000000| => |guybe%b412f809-e7b9-4c99-93c4-810d4dc5bb8d|
Changed Date = => 11/30/2015 7:29:41 PM
Title = => Task 1.2.2
State = => To Do
Reason = => New task
State Change Date = => 11/30/2015 7:29:41 PM
Created Date = => 11/30/2015 7:29:41 PM
Revised Date = => 1/1/9999 2:00:00 AM
Authorized Date = => 11/30/2015 7:29:41 PM
All fields:
***********
ID = 28
Rev = 1
Area ID = 2
Watermark = 54
Iteration ID = 3
Attached File Count = 0
Hyperlink Count = 0
External Link Count = 0
Related Link Count = 0
Work Item Type = Task
Title = Task 1.2.2
Area Path = TestTeamProject
State = To Do
Reason = New task
Assigned To = |%00000000-0000-0000-0000-000000000000|
Changed By = |guybe%b412f809-e7b9-4c99-93c4-810d4dc5bb8d|
Changed Date = 11/30/2015 7:29:41 PM
Created By = |guybe%b412f809-e7b9-4c99-93c4-810d4dc5bb8d|
Created Date = 11/30/2015 7:29:41 PM
Authorized As = |guybe%b412f809-e7b9-4c99-93c4-810d4dc5bb8d|
Iteration Path = TestTeamProjectSprint 1
Authorized Date = 11/30/2015 7:29:41 PM
Revised Date = 1/1/9999 2:00:00 AM
工作项更改日志
WorkItem was changed!
Rev = 2 => 3
Watermark = 19 => 55
Changed Date = 8/12/2015 11:49:41 PM => 11/30/2015 7:35:46 PM
State = To Do => In Progress
Reason = New task => Work started
Remaining Work = => 10
Activity = => Development
State Change Date = 8/12/2015 11:48:54 PM => 11/30/2015 7:35:46 PM
Authorized Date = 8/12/2015 11:49:41 PM => 11/30/2015 7:35:46 PM
All fields:
***********
ID = 12
Rev = 3
Area ID = 2
Watermark = 55
Iteration ID = 4
Attached File Count = 0
Hyperlink Count = 0
External Link Count = 0
Related Link Count = 1
Work Item Type = Task
Title = Task 2.2.1
Area Path = TestTeamProject
State = In Progress
Reason = Work started
Assigned To = |guybe%b412f809-e7b9-4c99-93c4-810d4dc5bb8d|
Changed By = |guybe%b412f809-e7b9-4c99-93c4-810d4dc5bb8d|
Changed Date = 11/30/2015 7:35:46 PM
Created By = |guybe%b412f809-e7b9-4c99-93c4-810d4dc5bb8d|
Created Date = 8/12/2015 11:48:54 PM
Authorized As = |guybe%b412f809-e7b9-4c99-93c4-810d4dc5bb8d|
Iteration Path = TestTeamProjectSprint 2
Authorized Date = 11/30/2015 7:35:46 PM
Revised Date = 1/1/9999 2:00:00 AM
这篇关于关于工作项更改的 TFS 2013 事件处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文