예제 #1
0
        /// <summary>
        /// Builds an <c>AggregateCriteria</c> object.
        /// </summary>
        /// <param name="aggregateDefinitions">The collection of aggregate definitions.</param>
        /// <param name="sourceQueryCriteria">The data source query criteria.</param>
        /// <returns>Cebos.Veyron.SharedTypes.AggregateCriteria</returns>
        private static AggregateCriteria BuildAggregateCriteria(IEnumerable<AggregateDefinition> aggregateDefinitions, AggregateDataSourceQueryCriteria sourceQueryCriteria)
        {
            var criteria =
                new AggregateCriteria
                {
                    ProcessName = sourceQueryCriteria.ProcessName,
                    PageNumber = sourceQueryCriteria.PageNumber,
                    PageSize = sourceQueryCriteria.PageSize,
                    GroupColumn = sourceQueryCriteria.GroupColumn,
                    SecurityColumns = sourceQueryCriteria.SecurityColumns != null
                        ? new MobileList<SecurityColumnDescriptor>(sourceQueryCriteria.SecurityColumns)
                        : null,
                    Sortings = sourceQueryCriteria.Sortings,
                    FilterId = sourceQueryCriteria.FilterId,
                    FilterDefinition = sourceQueryCriteria.FilterDefinition,
                    QuickFilterString = sourceQueryCriteria.QuickFilterString
                };

            var definitionsByColumn = new Dictionary<string, List<AggregateDefinition>>();

            foreach (var def in aggregateDefinitions)
            {
                List<AggregateDefinition> defList;
                if (!definitionsByColumn.TryGetValue(def.ColumnName, out defList))
                    definitionsByColumn[def.ColumnName] = defList = new List<AggregateDefinition>();

                defList.Add(def);
            }

            foreach (var columnInfo in definitionsByColumn)
            {
                var aggregates = columnInfo.Value;

                var columnItem = new AggregateColumnItem
                {
                    ColumnName = columnInfo.Key,
                    CustomConverter = aggregates[0].CustomConverter,
                    TargetType = aggregates[0].TargetType,
                    TypeName = aggregates[0].TypeName,
                    ConverterParameter = aggregates[0].ConverterParameter
                };

                foreach (var aggrDef in aggregates)
                {
                    columnItem.AggregatesEnabled.Add(
                        new AggregateTypeInfo
                        {
                            SummaryType = aggrDef.SummaryType
                        });
                }

                criteria.Columns.Add(columnItem);
            }

            return criteria;
        }
예제 #2
0
        /// <summary>
        /// Gets the value indicating whether source data from column specified should be modified before aggregated.
        /// </summary>
        /// <param name="columnItem">The column item.</param>
        /// <returns><c>true</c> if source value should be preprocessed, otherwise <c>false</c>.</returns>
        public static bool ContainsRawValue(AggregateColumnItem columnItem)
        {
            if (columnItem == null)
                throw new ArgumentNullException("columnItem", @"Column item is null");

            if (columnItem.ColumnName == Constants.DerivedProcessDisplayNameColumnName)
                return true;

            var propertyType = Type.GetType(columnItem.TypeName);

            if (string.IsNullOrEmpty(columnItem.CustomConverter) ||
                AfterBeforeList.Contains(propertyType))
            {
                return false;
            }

            return true;
        }