我为 TFS 2012 创建了一个自定义事件处理程序,每次“工作项”更改时都会触发一个事件。我遵循了各种示例,发现以下代码可在 TFS 2012 上运行:
public class WorkItemChangedEventHandler : ISubscriber
{
public Type[] SubscribedTypes()
{
return new[] { typeof(WorkItemChangedEvent) };
}
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;
EventLog.WriteEntry("WorkItemChangedEventHandler", "WorkItem " + ev.WorkItemTitle + " was modified");
}
}
catch( Exception exception )
{
//must eat all exceptions or TFS will not load the plugin
}
return EventNotificationStatus.ActionPermitted;
}
public string Name
{
get { return "WorkItemChangedEventHandler"; }
}
public SubscriberPriority Priority
{
get { return SubscriberPriority.Normal; }
}
}
因此,虽然此代码在 TFS 的 /plugins 目录中作为 .dll 安装时运行良好,但我仍然不知道如何从外部代码中获取事件的结果。
我想通过 TFS 服务器 API 可以使用某种订阅,它允许我使用自定义事件处理程序(订阅者)订阅在 TFS 上下文下运行的事件,但我已经尝试了一周没有运气,所以现在我'我向 SO 社区求饶。
我有一个服务,它连接到我们的帮助台 API 并读取错误票,然后我将其转换为序列化的本地列表结构,以便稍后在我想检查是否有任何更改时读取。然后我使用 TFS API 更新相应的工作项,以便一切都同步。
这部分应用程序一切正常,但问题是我还需要(由我们开发人员)对 TFS 所做的更改反映到帮助台错误跟踪器。因此,我认为使用 WorkItemChanged() 事件来执行此操作可以省去我在另一边所做的手动编码。
我需要知道工作项上的哪些字段已更改以使用新值更新 BugTracker。
有没有人知道如何实现这一目标? 问题实际上归结为: 如何从控制台或服务应用程序订阅由上述编写代码触发的事件?
帮助表示赞赏。
克里斯