/// <summary> /// Adds up all the values that need aggregating /// </summary> /// <returns>true if a change was made. False if not</returns> private static bool NumericAggregation(IEnumerable<WorkItem> sourceWorkItems, WorkItem targetWorkItem, ConfigAggregatorItem configAggregatorItem) { double aggregateValue = 0; // Iterate through all of the work items that we are pulling data from. // For link type of "Self" this will be just one item. For "Parent" this will be all of the co-children of the work item sent in the event. foreach (WorkItem sourceWorkItem in sourceWorkItems) { // Iterate through all of the TFS Fields that we are aggregating. foreach (ConfigItemType sourceField in configAggregatorItem.SourceItems) { double sourceValue = sourceWorkItem.GetField(sourceField.Name, 0.0); aggregateValue = configAggregatorItem.Operation.Perform(aggregateValue, sourceValue); } } if (aggregateValue != targetWorkItem.GetField<double>(configAggregatorItem.TargetItem.Name, 0)) { targetWorkItem[configAggregatorItem.TargetItem.Name] = aggregateValue; return true; } return false; }