TFS 2015 API c# 工作项验证无法正常工作



我验证了一个工作项,其中我将状态更改为允许的值。它仍然说值是错误的。

设置值和函数调用:

internal void closeWI(int tfsWIID)
{
Log.logger.Info("Closing Item in TFS with ID: " + tfsWIID);
Dictionary<string, object> valuesToUpdate = new Dictionary<string, object>();
valuesToUpdate.Add("System.State", "Closed");
valuesToUpdate.Add("System.Reason", "Work done");
putWorkItem(valuesToUpdate, tfsWIID);
}

应用所有字段更改的通用函数:

private int putWorkItem(Dictionary<string, object> valuesToUpdate, int tfsID = 0)
{
using (var projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(Config.tfsInnovationUri))
{
var wiStore = projectCollection.GetService<WorkItemStore>();
Project project = wiStore.Projects.GetById(currentTFSProjectID);
if (wiStore != null && wiStore.Projects != null)
{
WorkItem wi = tfsID != 0 ? wiStore.GetWorkItem(tfsID) : new WorkItem(project.WorkItemTypes["Verification Issue"]);
Log.logger.Info(tfsID != 0 ? "Updating TFS WI with ID: " + tfsID : "Creating new TFS WI");
foreach (KeyValuePair<string, object> field in valuesToUpdate)
wi.Fields[field.Key].Value = field.Value;
wi = validateData(wi);
wi.Save();
return wi.Id;
}
}
return 0;
}

验证:

public WorkItem validateData(WorkItem wi)
{
var valErrors = wi.Validate();
foreach (Field error in valErrors)
{
Log.logger.Error(wi.Id + " Error: " + error.Name + " val: <" + error.Value + "> allowed values are: ");
foreach (string allowedVal in error.AllowedValues)
Log.logger.Info(allowedVal);
}
return wi;
}

和输出:

2017-07-19 17:51:11,469 [INFO] <closeWI> Closing Item in TFS with ID: 25694
2017-07-19 17:51:13,578 [ERROR] <validateData> 25694 Error: State val: <Closed> allowed values are: 
2017-07-19 17:51:13,594 [INFO] <validateData> Active
2017-07-19 17:51:13,594 [INFO] <validateData> Closed
2017-07-19 17:51:13,594 [INFO] <validateData> Integrated
2017-07-19 17:51:13,594 [INFO] <validateData> Integration skipped
2017-07-19 17:51:13,594 [INFO] <validateData> Work Complete
2017-07-19 17:51:13,594 [ERROR] <validateData> 25694 Error: Reason val: <Work done> allowed values are: 
2017-07-19 17:51:13,609 [INFO] <validateData> Cancelled
2017-07-19 17:51:13,609 [INFO] <validateData> Customer accepted
2017-07-19 17:51:13,609 [INFO] <validateData> Duplicate
2017-07-19 17:51:13,625 [INFO] <validateData> User Mistake
2017-07-19 17:51:13,625 [INFO] <validateData> Work done
[...]

因此,如上所示,值位于"允许的值"列表中,但它仍然验证错误。还有更多错误,例如更改日期未设置和更改 By 也不起作用,尽管有一个正确的用户。

我可以确保当我更改诸如"分配给"或"描述"之类的字段时,它正在工作。它正在另一个项目中改变状态。所以它与权限无关。

我没有尝试:

new WorkItemStore(_tfs, WorkItemStoreFlags.BypassRules);

因为它应该正常工作,但我会在几分钟内尝试这个。

有人有想法吗?

若要更改工作项状态,还需要绕过规则。看看这个问题:如何通过 API 更改新创建的 TFS 工作项的工作流状态?

正如您提到的解决方案一样,将WorkItemStore对象的属性设置为trueBypassRules。 为此,必须按以下方式实例化工作项存储:

var workItemStore = new WorkItemStore(collection, WorkItemStoreFlags.BypassRules);

注意:您需要一些特殊权限才能使用 BypassRules 标志。你的帐户需要位于">项目集合服务帐户"组(或"团队基础服务帐户"(中。

如果您不知道如何操作,请按照本教程操作:如何将用户添加到TFS/VSO 中的项目集合服务帐户

最新更新