状態を許可された値に変更した作業項目を検証します。それでも価値は間違っていると言います。TFS 2015 API c#作業項目の検証が正しく機能していない
設定値と関数呼び出し:
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
[...]
すべてのフィールドの変更を適用するために
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);
}
ジェネリック機能
上記のように、値は許容値リストにありますが、依然として間違っていることが検証されます。さらに多くのエラーがあります。変更された日付は設定されておらず、変更されていません。
私がassignedToやDescriptionのようなフィールドを変更すると、それが動作していることが保証されます。そして、国を変える別のプロジェクトに取り組んでいました。だからパーミッションとは関係ありません。
私がしようとしなかった。
new WorkItemStore(_tfs, WorkItemStoreFlags.BypassRules);
それはnormaly動作するはずですが、私は数分でこれをしようとしますので。
誰かがアイデアを得ましたか?