protected override bool InternalExecute(ProcessExecutingContext context)
        {
            if (EntityCollection == null || EntityCollection.Count == 0)
            {
                return(true);
            }
            EntitySchema entitySchema = EntityCollection.Schema;

            if (string.IsNullOrEmpty(DataSourceFilters) || entitySchema == null)
            {
                return(true);
            }
            DataSourceFilterCollection dataSourceFilters =
                ProcessUserTaskUtilities.ConvertToProcessDataSourceFilterCollection(
                    UserConnection, entitySchema, this, DataSourceFilters);

            if (dataSourceFilters == null || dataSourceFilters.Count == 0)
            {
                return(true);
            }
            var dataSourceFiltersIsNot = new DataSourceFilterCollection(dataSourceFilters)
            {
                LogicalOperation = LogicalOperationStrict.And,
                IsEnabled        = true
            };
            var linqConverter = new DataSourceFilterLinqConverter(UserConnection);
            IQueryable <Entity> resultQuery = linqConverter.BuildQuery(EntityCollection, dataSourceFiltersIsNot);

            EntityCollection.RemoveRange(resultQuery.ToArray());
            return(true);
        }
Esempio n. 2
0
        public virtual IQueryable <Entity> CreateQuery()
        {
            DataSourceFilterCollection filterCollection = null;

            if (!string.IsNullOrEmpty(DataSourceFilters))
            {
                filterCollection = ProcessUserTaskUtilities.ConvertToProcessDataSourceFilterCollection(
                    UserConnection, SamplingEntityCollection.Schema, this, DataSourceFilters);
            }
            var linqConvertor = new DataSourceFilterLinqConverter(UserConnection);

            return(linqConvertor.BuildQuery(SamplingEntityCollection, filterCollection));
        }
Esempio n. 3
0
        protected override bool InternalExecute(ProcessExecutingContext context)
        {
            EntitySchema entitySchema = EntityCollection.Schema;

            if (entitySchema == null)
            {
                return(true);
            }
            DataSourceFilterCollection filters = null;

            if (!string.IsNullOrEmpty(DataSourceFilters))
            {
                filters = ProcessUserTaskUtilities.ConvertToProcessDataSourceFilterCollection(
                    UserConnection, entitySchema, this, DataSourceFilters);
            }
            var orderByInfo = new Dictionary <string, OrderDirectionStrict>(8);

            if (OrderInfo != null &&
                (ProcessReadDataResultType)ResultType == ProcessReadDataResultType.Entity && OrderInfo.Length > 0)
            {
                string[] orders = OrderInfo.Split(',');
                orders = orders.OrderBy(item => {
                    var items = item.Split(':');
                    if (items.Length == 3)
                    {
                        return(items[2]);
                    }
                    return(null);
                }).ToArray();
                string[,] orderInfoWithZeroPosition = new string[orders.Length, 2];
                int index = -1;
                for (int i = 0; i < orders.Length; i++)
                {
                    string[] order = orders[i].Split(':');
                    if (order.Length != 3)
                    {
                        continue;
                    }
                    EntitySchemaColumn column = entitySchema.Columns.FindByName(order[0]);
                    if (column == null)
                    {
                        continue;
                    }
                    var orderDirection = (OrderDirection)Enum.Parse(typeof(OrderDirection), order[1]);
                    if (orderDirection == OrderDirection.None)
                    {
                        continue;
                    }
                    OrderDirectionStrict orderDirectionStrict = orderDirection == OrderDirection.Descending ?
                                                                OrderDirectionStrict.Descending : OrderDirectionStrict.Ascending;
                    if (order[2].Trim() != "0")
                    {
                        orderByInfo.Add(order[0], orderDirectionStrict);
                    }
                    else
                    {
                        index++;
                        orderInfoWithZeroPosition[index, 0] = order[0];
                        orderInfoWithZeroPosition[index, 1] = order[1];
                    }
                }
                while (index > -1)
                {
                    var orderDirection = (OrderDirection)Enum.Parse(typeof(OrderDirection),
                                                                    orderInfoWithZeroPosition[index, 1]);
                    OrderDirectionStrict orderDirectionStrict;
                    if (orderDirection == OrderDirection.None || orderDirection == OrderDirection.Ascending)
                    {
                        orderDirectionStrict = OrderDirectionStrict.Ascending;
                    }
                    else
                    {
                        orderDirectionStrict = OrderDirectionStrict.Descending;
                    }
                    orderByInfo.Add(orderInfoWithZeroPosition[index, 0], orderDirectionStrict);
                    index--;
                }
            }
            var linqConverter = new DataSourceFilterLinqConverter(UserConnection);

            switch ((ProcessReadDataResultType)ResultType)
            {
            case ProcessReadDataResultType.Entity:
                IQueryable <Entity> resultQuery = ReadSomeTopRecords ?
                                                  linqConverter.BuildQuery(EntityCollection, filters, orderByInfo, NumberOfRecords)
                                                : resultQuery = linqConverter.BuildQuery(EntityCollection, filters, orderByInfo);
                var resultEntityCollection = new EntityCollection(UserConnection, EntityCollection.Schema);
                foreach (Entity entity in resultQuery)
                {
                    resultEntityCollection.Add(entity);
                }
                ResultRowsCount        = resultEntityCollection.Count;
                ResultEntityCollection = resultEntityCollection;
                if (resultEntityCollection.Count > 0)
                {
                    ResultEntity = resultEntityCollection.First.Value;
                }
                break;

            case ProcessReadDataResultType.Function:
                var    aggregationType = (AggregationTypeStrict)FunctionType;
                object result          = linqConverter.ExecuteQuery(EntityCollection, filters, AggregationColumnName, aggregationType);
                ResultRowsCount = 1;
                switch (aggregationType)
                {
                case AggregationTypeStrict.Count:
                    ResultCount = (int)result;
                    break;

                case AggregationTypeStrict.Avg:
                case AggregationTypeStrict.Sum:
                case AggregationTypeStrict.Max:
                case AggregationTypeStrict.Min:
                    Type columnValueType = EntityCollection.Schema.Columns.GetByName(AggregationColumnName).DataValueType.ValueType;
                    if (columnValueType == typeof(DateTime))
                    {
                        ResultDateTimeFunction = (DateTime)result;
                    }
                    else
                    {
                        ResultFloatFunction = Convert.ToDecimal(result);
                    }
                    break;
                }
                break;
            }
            return(true);
        }