Beispiel #1
0
        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;
        }
Beispiel #2
0
        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());
        }