Null #
Any field can return null. Casting null to a numeric value or a date throws a NullReferenceException.
The following C# code
(double)self.Parent["Microsoft.VSTS.Scheduling.OriginalEstimate"]
may succeed or throw.
There are many ways to overcame this issue: the null-coalescing operator, use the GetField helper function or check the Valid property.
See Tricks&Tips for examples.
History #
The History and Revision properties are tricky.
Imagine this sequence:
- A user opens a work item, whose
Revisionproperty values7 - She edits the
Descriptionfield and saves - TFS save the changes to the database and increments
Revisionto8 - Aggregator is notified of the change
At this point self.Revision is 8 and LastRevision.Index is 7. Throught LastRevision one can see that self.LastRevision.Fields["Description"].Value equals what is saved in the database, while OriginalValue is the value before user edit.
If the Rule changes any field, you have this:
5. Aggregator run a rule that changes a field
6. Aggregator notices the edit and save the workitem to the database
7. TFS triggers Aggregator again (maybe on a different machine), this time Revision property is 9
See History field for full presentation.