【发布时间】:2017-07-24 19:40:19
【问题描述】:
我验证了我将状态更改为允许值的工作项。它仍然说值是错误的。
设置值和函数调用:
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
[...]
如上所示,值在允许值列表中,但它仍然验证错误。尽管有正确的用户,但还有更多错误,例如未设置更改日期和更改日期也不起作用。
我可以确保当我更改assignTo 或Description 等字段时它可以正常工作。它正在另一个项目中改变状态。所以它与权限无关。
我没试过:
new WorkItemStore(_tfs, WorkItemStoreFlags.BypassRules);
因为它应该可以正常工作,但我会在几分钟后尝试。
有人有想法吗?
【问题讨论】: