public IDataFilter Parse(JobParser parser, ParseState state)
        {
            using (new SecurityDisabler())
            {
                var ruleContextItem = parser.Database.GetRootItem(parser.DefaultLanguage);

                var json = state.TryGet <string>("Rule");
                if (!string.IsNullOrEmpty(json))
                {
                    var filter = RulesFilter.FromString(json);
                    filter.RuleContextItem = ruleContextItem;
                    return(filter);
                }


                var  ruleItem = state.Require <string>("Item", true);
                Item item;
                ID   id;
                if (!ID.TryParse(ruleItem, out id))
                {
                    if (!ruleItem.StartsWith("/"))
                    {
                        var rootItem =
                            state.Parser.Database.GetItem(
                                ExperienceExtractorApiContainer.ItemPaths.GetOrDefault("experienceAnalyticsFilters") ??
                                "/sitecore/system/Marketing Control Panel/Experience Analytics/Filters");

                        ruleItem = rootItem.Paths.FullPath + "/" + ruleItem;
                    }


                    item = parser.Database.GetItem(ruleItem, parser.DefaultLanguage);
                }
                else
                {
                    item = parser.Database.GetItem(id, parser.DefaultLanguage);
                }



                if (item == null)
                {
                    throw ParseException.AttributeError(state, string.Format("Rule item not found '{0}'", ruleItem));
                }

                var rules = RuleFactory.GetRules <RuleContext>(item.Fields["Rule"]);

                return(new RulesFilter(rules)
                {
                    RuleContextItem = ruleContextItem
                });
            }
        }
Beispiel #2
0
        public static IDimension ParseDimension(this ParseState state)
        {
            using (new SecurityDisabler())
            {
                var dimensionString = state.Require <string>("Dimension", true);



                Guid dimensionId;
                if (Guid.TryParse(dimensionString, out dimensionId))
                {
                    var dim = AggregationContainer.Repositories.GetDimensionDefinitionService().GetDimension(dimensionId);

                    if (dim == null)
                    {
                        throw ParseException.AttributeError(state,
                                                            string.Format("Dimension '{0}' is not registered", dimensionId));
                    }
                    return(dim);
                }

                if (state.Parser.Database != null)
                {
                    var path = dimensionString;
                    if (!path.StartsWith("/"))
                    {
                        var rootItem =
                            state.Parser.Database.GetItem(
                                ExperienceExtractorApiContainer.ItemPaths.GetOrDefault("experienceAnalyticsDimensions") ??
                                "/sitecore/system/Marketing Control Panel/Experience Analytics/Dimensions",
                                state.Parser.DefaultLanguage);

                        path = rootItem.Paths.FullPath + "/" + path;
                    }

                    var item = state.Parser.Database.GetItem(path, state.Parser.DefaultLanguage);
                    if (item != null)
                    {
                        var dim = AggregationContainer.Repositories.GetDimensionDefinitionService().GetDimension(item.ID.Guid);
                        if (dim == null)
                        {
                            throw ParseException.AttributeError(state,
                                                                string.Format("Dimension '{0}' ({1}) is not registered", dimensionId, path));
                        }
                        return(dim);
                    }
                }

                throw ParseException.AttributeError(state,
                                                    string.Format("Dimension item not found \"{0}\"", dimensionString));
            }
        }
Beispiel #3
0
            public IDataFilter Parse(JobParser parser, ParseState state)
            {
                var start = state.TryGet <DateTime?>("Start");
                var end   = state.TryGet <DateTime?>("End");

                if (!start.HasValue && !end.HasValue)
                {
                    throw ParseException.AttributeError(state, "Expected start and/or end");
                }

                var field = state.TryGet("Field", "StartDateTime");

                return(new MongoDateRangeFilter(start, end, field));
            }