我最好从解释我正在尝试做的事情的高级概述开始(以防万一我要解决这个可怕的错误):在 TFS 中,我们有一个包含“优先级”字段的“故事”工作项。在任何给定时间,我们可能有 20-30 个具有优先级的故事。例如,我们可能有 20 个完全优先的故事(1 到 20),然后想要创建一个新的故事,这应该是我们新的首要任务。所以,我希望能够给它优先级 1,然后有一个服务器端插件,它将更新所有其他故事的优先级,这样我最终得到 1 到 21(1 是我们的新故事刚刚创建)。
为此,我为 TFS 2010 创建了一个订阅 WorkItemChangedEvent 的服务器端插件。判断优先级是否已更新是足够聪明的,因此在这种情况下它只会更改工作项。我遇到的问题是,如果我更改优先级并运行 WorkItem.Save(),它会再次触发 WorkItemChangedEvent,并且优先级已更改,因此逻辑为真,它会再次更新并保存。
早些时候,我创建了一个服务器端插件,将其中一个日期时间字段的时间更新为 00:00:00(如果它还不是 00:00:00)并注意到了这种行为。这不是太大的问题,因为在第二次运行时,什么都不会发生,因为时间已经是 00:00:00。但是在这种尝试更新一大堆工作项的优先级的情况下,它是一个交易破坏者。有没有办法阻止 WorkItem.Save() 触发 WorkItemChangedEvent?也许另一种方法可以完全做到这一点?