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

本文关键字:工作 是否 修改 检查 保存 何检查 | 更新日期: 2023-09-27 18:01:24

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

当我尝试在TFS中保存一个工作项时,它会检查自从你打开它以来是否有任何更改。如果是这样,你就不能存了。当我从web应用程序中保存时,没有这样的检查,我已经使用了工作项。是一个有效的方法,它仍然没有检查修改的工作项之前,我保存它从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();
}
有谁能帮我避免并发问题吗?我需要保存工作项,只有在没有做过更改之前,否则我必须向最终用户显示错误消息。

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

工作项上的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选项保存工作项将执行检查,如果工作项已保存在服务器端,则抛出异常。