2017-07-20 9 views
1

状態を許可された値に変更した作業項目を検証します。それでも価値は間違っていると言います。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動作するはずですが、私は数分でこれをしようとしますので。

誰かがアイデアを得ましたか?

答えて

1

作業項目の状態を変更するには、バイパス規則も必要です。この質問を見てみましょう:

How to change workflow state of the newly created TFS work item through API?はちょうどあなたが言及したソリューションとして、WorkItemStoreオブジェクトのBypassRulesプロパティを設定します。これを行うには、次のように作業項目ストアをインスタンス化する必要があります。

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

注:をあなたはBypassRulesフラグを使用できるようにするために、いくつかの特別な権限を必要としています。あなたのアカウントはプロジェクトコレクションサービスアカウントグループ(またはTeam Foundation Service Accounts)にある必要があります。

方法がわからない場合は、次のチュートリアルをご覧ください。How to add a user to Project Collection Service Account in TFS/VSO

関連する問題