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.
The History
and Revision
properties are tricky.
Imagine this sequence:
1. A user opens a work item, whose Revision
property values 7
2. She edits the Description
field and saves
3. TFS save the changes to the database and increments Revision
to 8
4. 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.