在保存之前,如何检查工作项是否已修改

时间:2013-02-27 06:07:00

标签: c# .net tfs workitem

我在保存工作项方面遇到了问题。场景是我有一个Web应用程序,从那里我发送价值给TFS。我可以在两个地方改变价值(通过网络应用程序也来自TFS)。我现在面临的问题是

当我尝试在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();
}

任何人都可以帮我避免并发问题。我需要保存工作项,只是之前没有进行任何更改,否则我已向最终用户显示错误消息。

1 个答案:

答案 0 :(得分: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选项保存工作项将执行检查,如果工作项已保存在服务器端,则抛出异常。