Я пытаюсь создать в TFS 2017 плагин, который проверяет наличие связанных рабочих элементов перед регистрацией и отклоняет регистрацию, если она не удовлетворяет нескольким условиям. Это работало для One Collection и One TeamProject. Сейчас я пытаюсь реализовать это в нескольких коллекциях и командных проектах и выдает следующее сообщение об ошибке: «TF30063: у вас нет прав доступа» https://tfs.com//TeamProject" Я вставляю приведенный ниже код. Пожалуйста, дайте мне знать, что Возможная проблема будет.
{
// Logic Goes here ...
bool isNullComment = false;
bool isDevBranchChange = false;
bool isCodeReviewRequest = false;
bool isCodeReviewResponse = false;
bool isTaskAssociated = false;
//Read all submitted items
var changes = notification.GetSubmittedItems(requestContext);
//Check if the changes have any DEV branch changes
isDevBranchChange = changes.Any(change => change.ToUpper().Contains("/DEV/"));
if (isDevBranchChange)
{
isNullComment = string.IsNullOrEmpty(notification.Comment.ToString());
var assoWorkItems = notification.NotificationInfo.WorkItemInfo.Select(x => x.Id); //Read all associated workitem id's
TfsTeamProjectCollection connection = new TfsTeamProjectCollection(GetTfsUri(requestContext));
WorkItemStore wiStore = connection.GetService<WorkItemStore>();
//check if any of associated workitem has code review
foreach (int id in assoWorkItems)
{
WorkItem wi = wiStore.GetWorkItem(id);
// Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem wi = witClient.GetWorkItemAsync(id).Result;
if (wi.Type.Name.ToUpper().Equals("CODE REVIEW REQUEST"))
{
isCodeReviewRequest = true;
}
if (wi.Type.Name.ToUpper().Equals("TASK"))
{
isTaskAssociated = true;
}
if (wi.Type.Name.ToUpper().Equals("CODE REVIEW RESPONSE"))
{
isCodeReviewResponse = true;
}
}
if (!isCodeReviewRequest || isNullComment || !isCodeReviewResponse || !isTaskAssociated)
{
statusMessage = "Check-in Rejected. Check-in Comment, Task, Code Review Request and Code Review Response workitems are Required. \nFor more information, please contact TFS Administrators: vsalm@abc.com";
return EventNotificationStatus.ActionDenied;
}
}
}
catch (Exception exception)
{
statusMessage = "Caught an Exception" + exception.Message;
return EventNotificationStatus.ActionDenied;
// Any exception, TFS will disable it. So, Log it and eat it.
TeamFoundationApplicationCore.LogException("DecisionPoint plugin encountered the following error while processing events", exception);
}
}
return EventNotificationStatus.ActionPermitted;
}
private Uri GetTfsUri(IVssRequestContext _requestContext)
{
var locationService = _requestContext.GetService<ILocationService>();
return new Uri(locationService.GetServerAccessMapping(_requestContext).AccessPoint + "/" + _requestContext.ServiceHost.Name);
}
}
}