예제 #1
0
        private static string GetFilterSourceProperty(JsonElement element)
        {
            var property = element.GetChild(ReportLayoutDocument.Expression)
                           ?.GetChild(ReportLayoutDocument.FilterColumn)
                           ?.GetChild(ReportLayoutDocument.FilterProperty);

            return(property.HasValue
                ? property.Value.GetString() ?? string.Empty
                : string.Empty);
        }
예제 #2
0
        private static string GetFilterSourceEntity(JsonElement element)
        {
            var entity = element.GetChild(ReportLayoutDocument.Expression)
                         ?.GetChild(ReportLayoutDocument.FilterColumn)
                         ?.GetChild(ReportLayoutDocument.FilterExpression)
                         ?.GetChild(ReportLayoutDocument.FilterSourceRef)
                         ?.GetChild(ReportLayoutDocument.FilterEntity);

            return(entity.HasValue
                ? entity.Value.GetString() ?? string.Empty
                : string.Empty);
        }
예제 #3
0
        private static Tuple <FilterType, FilterType?, SecondaryFilterCondition> GetFilterTypes(JsonElement element)
        {
            var        filterType          = FilterType.Unknown;
            FilterType?secondaryFilterType = null;
            var        secondaryConfition  = SecondaryFilterCondition.NotSet;

            var typeProperty = element.GetPropertyString(ReportLayoutDocument.Type);

            if (typeProperty == null)
            {
                return(Tuple.Create <FilterType, FilterType?, SecondaryFilterCondition>
                           (filterType, secondaryFilterType, secondaryConfition));
            }

            if (string.Compare(typeProperty, "Categorical", true) == 0)
            {
                filterType = FilterType.BasicCategorical;
            }
            else if (string.Compare(typeProperty, "TopN", true) == 0)
            {
                filterType = FilterType.TopN;
            }
            else if (string.Compare(typeProperty, "Advanced", true) == 0)
            {
                var whereArray = element.GetChild(ReportLayoutDocument.Filter)
                                 ?.GetChild(ReportLayoutDocument.FilterWhere);

                if (whereArray != null && whereArray.Value.ValueKind == JsonValueKind.Array)
                {
                    var whereEnumerator = whereArray.Value.EnumerateArray();
                    whereEnumerator.MoveNext();

                    var conditionalAnd = whereEnumerator.Current
                                         .GetChild(ReportLayoutDocument.FilterCondition)
                                         ?.GetChild("And");

                    var conditionalOr = whereEnumerator.Current
                                        .GetChild(ReportLayoutDocument.FilterCondition)
                                        ?.GetChild("Or");

                    if (conditionalAnd.HasValue || conditionalOr.HasValue)
                    {
                        var conditionalElement = conditionalAnd ?? conditionalOr;

                        //main
                        var leftCondition = conditionalElement?.GetChild("Left");
                        if (leftCondition.HasValue)
                        {
                            filterType = ReadAdvancedFilterType(leftCondition.Value);
                        }

                        var rightCondition = conditionalElement?.GetChild("Right");
                        if (rightCondition.HasValue)
                        {
                            secondaryFilterType = ReadAdvancedFilterType(rightCondition.Value);
                        }

                        secondaryConfition = conditionalAnd.HasValue
                            ? SecondaryFilterCondition.And
                            : SecondaryFilterCondition.Or;
                    }
                    else
                    {
                        filterType = ReadAdvancedFilterType(whereEnumerator.Current);
                    }
                }
            }

            return(Tuple.Create <FilterType, FilterType?, SecondaryFilterCondition>
                       (filterType, secondaryFilterType, secondaryConfition));
        }