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
Revision
property values7
- She edits the
Description
field and saves - TFS save the changes to the database and increments
Revision
to8
- 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.