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

Posted

技术标签:

【中文标题】在我保存之前如何检查工作项是不是被修改【英文标题】:How to check workitem is modified or not before i save在我保存之前如何检查工作项是否被修改 【发布时间】:2013-02-12 20:38:50 【问题描述】:

我在保存工作项时遇到问题。场景是我有一个 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();

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

您好,感谢您的回复。我也使用过 IsDirty,它仅在保存后检查更改的值。我的问题是我同时在两个不同的地方打开了同一个工作项(一个在 Web 应用程序中,另一个在 TFS 中),当我首先在 Web 中保存工作项并将保存保存在 tfs 中时,它给了我错误(检查是脏的),但是如果我先保存 TFS 并尝试从 Web 应用程序中保存工作项,它不会给出任何异常,则更改的值会消失。我需要在保存之前显示一些错误(有些是从外部环境修改的) 更新了答案给你例外。 嗨,我无法在 SaveFlags 中看到 MergeAll 我只能在保存标志中看到两个枚举值,一个是无,另一个是合并链接,我没有看到任何其他值,我使用 Microsoft.TeamFoundation.WorkItemTracking.Client; 您使用的是 tfs 2010 还是 2012?

以上是关于在我保存之前如何检查工作项是不是被修改的主要内容,如果未能解决你的问题,请参考以下文章

如何在保存之前检查文件(视频)是不是已经在 ALAssetsLibrary(相册)中?

如何在保存在 Mongoose 之前检查数据库中是不是存在嵌入式文档

在关闭之前检查用户表单是不是已使用 save_click 保存

我可以在保存之前检查下载的图像是不是损坏吗?

如何捕获在Visual Studio 2015中单击“保存工作项”按钮时触发的事件?

如何使用 Python 检查文件保存是不是完成?