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); }
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); }
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)); }