问题描述
我们在 tfs 中有一个插件。当任何工作项更改时,此插件会通知我们。我们可以按如下方式获取工作项详细信息,例如 id、变更集列表。但是我们还需要与工作项相关的分支名称。
你能帮我吗,当工作项在下面的代码中改变时,有没有办法获得相关的分支名称。
谢谢
public EventNotificationStatus ProcessEvent(
IVssRequestContext 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)
{
WorkItemChangedEvent ev = notificationEventArgs as WorkItemChangedEvent;
int workItemId = Convert.ToInt32(ev.CoreFields.IntegerFields[0].NewValue);
WriteLog("1WorkItemChangedEventHandler WorkItem " + ev.WorkItemTitle + " - Id " + workItemId.ToString() + " was modified");
}
}
catch (Exception)
{
}
return EventNotificationStatus.ActionPermitted;
}
解决方法
您可以使用 workItemStore.GetWorkItem(workItemId )
获取所有工作项信息。在此处查看类似问题:How can I get a reference to the TFS WorkItem in a WorkItemChangedEvent?
如果你使用git,你可以试试下面的例子来获取分支引用:
int workitemId = YOUR_ID;
WorkItemStore wiStore = new WorkItemStore("{YOUR_URI}");
WorkItem wi = wiStore.GetWorkItem(workitemId);
foreach (Link link in wi.Links)
{
if (link.BaseType == BaseLinkType.ExternalLink)
{
var brList = ((ExternalLink)link).LinkedArtifactUri.Split(new string[] { "%2F" },StringSplitOptions.RemoveEmptyEntries).ToList();
brList.RemoveAt(0); //remove project and repo giuds
brList.RemoveAt(0);
brList[0] = brList[0].Replace("GB",""); // remove GB prefix
Console.WriteLine("Branch: {0}",string.Join("/",brList));
}
}