Ich beginne besser damit, einen Überblick über das, was ich versuche, zu erklären (nur für den Fall, dass ich das schrecklich falsch mache): In TFS haben wir eine Arbeitselement "Story", das ein Feld "Priorität" enthält. Zu jeder Zeit haben wir vielleicht 20-30 Geschichten, die Priorität haben. Als ein Beispiel könnten wir 20 perfekt priorisierte Geschichten haben (1 bis 20) und dann eine neue Geschichte erstellen, die unsere neue oberste Priorität sein sollte. Also, ich möchte in der Lage sein, ihm eine Priorität von 1 zu geben, und dann ein serverseitiges Plugin, das die Priorität auf allen anderen Geschichten aktualisiert, so dass ich am Ende mit 1 bis 21 (1 ist die neue Geschichte wir gerade erstellt).TFS 2010: WorkItem.Save löst wieder WorkItemChangedEvent aus
Zu diesem Zweck habe ich ein serverseitiges Plugin für TFS 2010 erstellt, das WorkItemChangedEvent abonniert. Es ist schlau genug, um herauszufinden, ob die Priorität aktualisiert wurde, sodass in diesem Fall nur Arbeitselemente geändert werden. Das Problem ist, dass wenn ich die Priorität ändern und WorkItem.Save() ausführen, löst es erneut WorkItemChangedEvent aus, und die Priorität hat sich geändert, so dass die Logik wahr ist, und es aktualisiert und erneut speichert.
Früher hatte ich ein serverseitiges Plugin erstellt, das die Uhrzeit eines der datetime-Felder auf 00:00:00 änderte (für den Fall, dass es nicht schon 00:00:00 war) und dieses Verhalten bemerkte . Es war kein großes Problem, denn beim zweiten Durchlauf würde nichts passieren, weil die Zeit schon 00:00:00 wäre. Aber in diesem Fall, in dem versucht wird, die Prioritäten für eine ganze Reihe von Workitems zu aktualisieren, ist dies ein Deal-Breaker. Gibt es eine Möglichkeit, WorkItem.Save() davon abzuhalten, ein WorkItemChangedEvent auszulösen? Vielleicht eine andere Möglichkeit, dies alles zusammen zu tun?
Ich werde dies als eine Antwort markieren, wenn niemand mit einer besseren Lösung kommt. Es wird funktionieren, aber es ist schade, wenn es keinen saubereren Weg gibt. – ctb
sicher hoffe ich auch auf eine bessere Lösung. vielleicht können Sie etwas in den Quellen des tfs Aggregators finden http://tfsaggregator.codeplex.com/ – jessehouwing
Ich endete diese Route im Interesse der Zeit. Ich musste einen Speichervorgang durchführen, bei dem ich sowohl das Prioritätsfeld als auch ein boolesches Feld aktualisiert habe, dann kann der Handler jeden Fall ignorieren, in dem der Boolesche Wert wahr ist. Dann habe ich einen zweiten Speichervorgang ausgeführt, bei dem ich den Booleschen Wert auf false gesetzt habe. In diesem Fall hat sich die Priorität nicht geändert, wieder passiert nichts. – ctb