关于工作项更改的 TFS 2013 事件处理 [英] TFS 2013 event handling on work item change

查看:19
本文介绍了关于工作项更改的 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆