public override void ExecuteOption(OptionReport report) { SetDynamicsCrmConnectionIfEmpty(); DatabaseAggregateSubTable.AggregateEnum aggregate = _databaseAggregateSubTable.aggregate; string topEntityName = _databaseAggregateSubTable.topEntityName; string topEntityIdName = _databaseAggregateSubTable.topEntityIdName; string topEntityResultFieldName = _databaseAggregateSubTable.topEntityResultFieldName; string topEntityReferenceIdName = _databaseAggregateSubTable.topEntityReferenceIdName; string aggregateEntityName = _databaseAggregateSubTable.aggregateEntityName; string aggregateEntityIdName = _databaseAggregateSubTable.aggregateEntityIdName; string aggregateFieldName = _databaseAggregateSubTable.aggregateFieldName; string aggregateReferenceIdName = _databaseAggregateSubTable.aggregateReferenceIdName; List <KeyValuePair <Guid, object> > topRows = GetTopFields(topEntityName, topEntityReferenceIdName, topEntityResultFieldName); report.Workload = topRows.Count; foreach (KeyValuePair <Guid, object> row in topRows) { object aggregateValue = GetAggregateValue(aggregateEntityName, aggregateEntityIdName, aggregateReferenceIdName, topEntityReferenceIdName, row.Key, aggregateFieldName, aggregate); if (aggregateValue.Equals(row.Value) == false) { report.SubWorkload++; UpdateRow(topEntityName, topEntityIdName, row.Key, topEntityResultFieldName, aggregateValue); } } report.Success = true; }
private object GetAggregateValue(string aggregateEntityName, string aggregateEntityIdName, string aggregateReferenceName, string topEntityReferenceName, object topEntityReferenceValue, string aggregateFieldName, DatabaseAggregateSubTable.AggregateEnum aggregate) { XDocument xDocument = new XDocument ( new XElement("fetch", new XAttribute("aggregate", "true"), new XElement("entity", new XAttribute("name", aggregateEntityName), new XElement("attribute", new XAttribute("name", aggregateFieldName), new XAttribute("alias", "value"), new XAttribute("aggregate", aggregate)) ) ) ); XmlHelper.AddCondition(xDocument, aggregateReferenceName, "eq", topEntityReferenceValue.ToString()); List <object> objects = SingleValueEntity <object> .GetAll(_dynamicsCrmConnection, xDocument, aggregateEntityName, aggregateEntityIdName); return(objects.SingleOrDefault()); }