1

ワークアイテムの保存に問題があります。シナリオは、1 つの Web アプリケーションがあり、そこから TFS に値を送信しています。両方の場所で値を変更できます(TFSからもWebアプリケーションを介して)。私が今直面している問題は、

作業項目を TFS に保存しようとすると、作業項目を開いてから変更が加えられているかどうかがチェックされます。その場合、保存することはできません。Web アプリケーションから保存するときにそのようなチェックはありません。workitem.isvalid メソッドを使用しましたが、Web アプリケーションから保存する前に変更された作業項目をまだチェックしていません。

これは私のコードです

wi.Open();

foreach (var str in piWorkItemTfs.Values.Keys)
    wi[str] = piWorkItemTfs.Values[str];


if (!wi.IsValid())
{
    var listFelaktigaVärde = (from Field field in wi.Validate() select field.Name + "=" + field.Value).ToList();

    errorMessage = "Felaktiga värde: Id " + wi.Id + " " + String.Join(", ", listFelaktigaVärde);
}
else
{
    wi.Save();
    errorMessage = wi.Id.ToString();
}

同時実行の問題を回避するのを手伝ってくれる人はいますか。以前に変更が行われていない作業項目のみを保存する必要があります。そうしないと、エラー メッセージがエンド ユーザーに表示されます。

4

1 に答える 1

2

ワークアイテムのIsValid()メソッドは、ワークアイテムのフィールドが正しいことを検証するだけで、ワークアイテムが他の場所で変更されたかどうかはチェックしません。IsDirty作業項目オブジェクトには、最後の保存以降に作業項目が変更されたかどうかを確認するために呼び出されるフラグがあります。

補足として、エラー メッセージとして表示されるフィールドは、作業項目の種類の定義の規則に準拠していないフィールドのみです (つまり、定義されていないフィールドの値AllowedValues)。これはチェックする必要がありますが、最後の保存以降に変更されているかどうかをチェックすると、別のエラーが表示されるはずです。

WorkItemクラスの MSDN へのリンクは次のとおりです: http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.workitemtracking.client.workitem(v=vs.110).aspx

編集

フラグはIsDirty、作業項目がローカルで変更されたかどうかを示します。代わりに、サーバー側の保存を確認する方法は、作業項目を保存しながらマージを試みることです。

workItem.Save(SaveFlags.MergeAll);

このIsValidフラグは、サーバーの変更ではなく、ローカルの変更用です。オプションを使用して作業項目を保存するSaveFlags.MergAllとチェックが行われ、作業項目がサーバー側に保存されている場合は例外がスローされます。

于 2013-02-27T18:14:57.527 に答える