예제 #1
0
        public object GetAggregate(Guid id, XrmService service)
        {
            object newValue = null;

            switch (AggregateType)
            {
            case AggregateType.Exists:
            {
                //if the aggregate returns a result > 0 then one exists
                var fetch  = GetLookupFetch(id);
                var result = service.RetrieveAllFetch(fetch);
                newValue = result.Any() &&
                           XrmEntity.GetInt(result.ElementAt(0).GetFieldValue(FetchAlias)) > 0;
                break;
            }

            case AggregateType.Count:
            {
                var result = service.RetrieveAllFetch(GetLookupFetch(id));
                if (result.Any())
                {
                    newValue = result.ElementAt(0).GetFieldValue(FetchAlias);
                }
                break;
            }

            case AggregateType.Sum:
            {
                var result = service.RetrieveAllFetch(GetLookupFetch(id));
                if (result.Any())
                {
                    newValue = result.ElementAt(0).GetFieldValue(FetchAlias);
                }
                break;
            }

            case AggregateType.Min:
            {
                var query = GetAggregatedRecordQueryForLookup(id);
                query.AddOrder(AggregatedField, OrderType.Ascending);
                var minRecord = service.RetrieveFirst(query);
                newValue = minRecord.GetField(AggregatedField);
                break;
            }

            case AggregateType.CSV:
            case AggregateType.PSV:
            {
                var query = GetAggregatedRecordQueryForLookup(id);

                query.AddOrder(AggregatedField, OrderType.Ascending);
                var records = service.RetrieveAll(query);
                var labels  =
                    records.Select(
                        delegate(Entity item) { return(item.GetField(AggregatedField)); }).
                    ToArray();
                if (AggregateType == AggregateType.CSV)
                {
                    newValue = string.Join(", ", labels);
                }
                else
                {
                    newValue = string.Join("|", labels);
                }
                newValue = ((string)newValue).Left(1000);
                break;
            }
            }
            if (newValue == null && NullAmount != null)
            {
                newValue = NullAmount;
            }
            return(newValue);
        }