5

次の方法で反復パスを正常に作成できます。

var commonservice = collection.GetService<ICommonStructureService>();

// create new area path and iteration path
var iterationRoot = commonservice.GetNodeFromPath("\\MyTeamProject\\Iteration");
var newIterationPath = commonservice.CreateNode("my new sprint", iterationRoot.Uri);

ただし、このパスを作業項目に割り当てて保存しようとすると、フィールドが検証されません。

テストを再度実行すると (反復が既に作成されている状態で)、同じコードが成功します。

これを機能させる方法を知っている人はいますか?

4

4 に答える 4

3

これは私のためにそれを修正しました:

WorkItemStore wis = (WorkItemStore)tfsTeamProjColl.GetService(typeof(WorkItemStore));
wis.RefreshCache();
wis.SyncToCache();

多分それは誰かを助けるでしょう。

于 2011-02-15T22:22:16.217 に答える
2

私はまったく同じ動作を経験しましたが、残念ながら @JWC の回答は役に立ちませんでした。私にとって有効な解決策は、このリンクで見つけることができます。

したがって、これは元の回答が失われた場合の簡単な要約です。

キーポイントは、WorkItemServerクラスを使用することです。Microsoft.TeamFoundation.WorkItemTracking.Proxy.dllそれはアセンブリに住んでいます。

まず、WorkItemStoreインスタンスを作成します。

var store = collection.GetService<WorkItemStore>();

次に、必要な反復パスを作成します。

var commonservice = collection.GetService<ICommonStructureService>();

var iterationRoot = commonservice.GetNodeFromPath("\\MyTeamProject\\Iteration");
var newIterationPath = commonservice.CreateNode("my sprint", iterationRoot.Uri);

次に、TFS でキャッシュを更新します (これはF5、Web インターフェイスで押すのと似ていると思います)。

var wiServer = collection.GetService<WorkItemServer>();
wiServer.SyncExternalStructures(WorkItemServer.NewRequestId(), commonservice.GetProjectFromName("MyTeamProject").Uri);
store.RefreshCache();

最後に、新しく作成された作業項目を新しく作成されたイテレーションに割り当てます。

var wi = new WorkItem(store.Projects["MyTeamProject"].WorkItemTypes["Product Backlog Item"]);

wi.Title = "Hello from API";
wi.Description = "This work item was created from API";
wi.Fields["Assigned To"].Value = "Yan Sklyarenko";

wi.IterationPath = FormatPath(commonservice.GetNode(newIterationPath).Path, "Iteration", "MyTeamProject");

wi.Save();

それでおしまい!このメソッドFormatPathは、反復パスを作業項目IterationPathフィールドで必要な形式、つまり from \MyTeamProject\Iteration\my sprintto に変換しますMyTeamProject\my sprint

これで時間を節約できることを願っています。

注: これを TFS 2013 に対して実行します。

于 2014-04-18T12:10:11.707 に答える
0

キャッシュの問題が発生している可能性があります。イテレーションを作成した後、キャッシュをクリアしてみてください。あなたが試すことができるいくつかのこと:

  1. WorkItemStoreの新しいコピーを取得します。
  2. TFSを切断して再接続します
  3. WISまたはTFSサーバーオブジェクトのいずれかに「更新」メソッドがあるかどうかを確認します。私はその夜、TFSの開発インスタンスをシャットダウンしましたが、そのようなものがあるかどうかは思い出せません。

そうでない場合は、コードを投稿してください。再現できるかどうかを確認します。

于 2010-05-22T02:46:50.617 に答える
0

同様の問題がありました。Areapath を作成し、AreaPath が使用されるクエリを作成しました。store.RefreshCashe() を呼び出しましたが、機能しませんでした。store.RefreshCashe() を手動で 2 回実行したときのデバッガーでのみ。「ヤン・スクリャレンコ」に感謝します。私はあなたの提案を試しましたが、うまくいきました(TFS Server 2012)。

于 2014-10-24T07:48:25.357 に答える