Exemple #1
0
        public override async Task <EntityView> Run(EntityView arg, CommercePipelineExecutionContext context)
        {
            Condition.Requires <EntityView>(arg).IsNotNull($"{Name}: argument can not be null.");
            CommercePipelineExecutionContext executionContext;

            if (!arg.HasPolicy <SearchScopePolicy>())
            {
                executionContext = context;
                executionContext.Abort(await context.CommerceContext.AddMessage(context.GetPolicy <KnownResultCodes>().Error, "DocumentsViewError", (object[])null, "Can not perform the query. Documents view is missing information."), (object)context);
                return(null);
            }

            SearchScopePolicy scopePolicy = arg.GetPolicy <SearchScopePolicy>();

            if (string.IsNullOrEmpty(scopePolicy.Name))
            {
                executionContext = context;
                executionContext.Abort(await context.CommerceContext.AddMessage(context.GetPolicy <KnownResultCodes>().Error, "DocumentsViewError", (object[])null, "Can not perform the query. Documents view is missing information."), (object)context);
                return(null);
            }

            ICollection <string> retreivableFields = GetRetreivableFields(
                IndexablePolicy.GetPolicyByScope(context.CommerceContext, context.CommerceContext.Environment, scopePolicy.Name));

            if (retreivableFields != null && retreivableFields.Any <string>())
            {
                context.CommerceContext.AddObject((object)retreivableFields);
            }
            return(arg);
        }
        public override async Task <EntityView> Run(EntityView arg, CommercePipelineExecutionContext context)
        {
            Condition.Requires(arg).IsNotNull($"{Name}: argument can not be null.");
            CommercePipelineExecutionContext executionContext;

            if (!arg.HasPolicy <SearchScopePolicy>())
            {
                executionContext = context;
                executionContext.Abort(await context.CommerceContext.AddMessage(context.GetPolicy <KnownResultCodes>().Error, "DocumentsViewError", (object[])null, "Can not perform the query. Documents view is missing information."), (object)context);
                return(null);
            }

            SearchScopePolicy scopePolicy = arg.GetPolicy <SearchScopePolicy>();

            if (string.IsNullOrEmpty(scopePolicy.Name))
            {
                executionContext = context;
                executionContext.Abort(await context.CommerceContext.AddMessage(context.GetPolicy <KnownResultCodes>().Error, "DocumentsViewError", (object[])null, "Can not perform the query. Documents view is missing information."), (object)context);
                return(null);
            }

            ViewProperty viewProperty = arg.Properties.FirstOrDefault(p => p.Name.Equals("Term", StringComparison.OrdinalIgnoreCase));

            if (viewProperty == null)
            {
                return(arg);
            }

            IndexablePolicy policyByScope = IndexablePolicy.GetPolicyByScope(context.CommerceContext, context.CommerceContext.Environment, scopePolicy.Name);

            viewProperty.Value = GetParsedTerm(viewProperty.Value, policyByScope, context.GetPolicy <AlgoliaSearchPolicy>().DefaultSearchOnlyStringFields);
            return(arg);
        }
Exemple #3
0
        public override async Task <bool> Run(bool arg, CommercePipelineExecutionContext context)
        {
            if (!arg)
            {
                return(false);
            }

            SearchIndexArgument argument = context.CommerceContext.GetObjects <SearchIndexArgument>().FirstOrDefault();

            if (argument == null)
            {
                context.Abort($"{nameof(Name)}: SearchIndexArgument was not found in the context objects collection.", context);
                return(false);
            }

            SearchScopePolicy policyByName = SearchScopePolicy.GetPolicyByName(context.CommerceContext, context.CommerceContext.Environment, argument.IndexName);

            if (policyByName == null)
            {
                context.Abort($"{nameof(Name)}: SearchScopePolicy was not found for index {argument.IndexName}.", context);
                return(false);
            }

            IndexablePolicy policyByScope = IndexablePolicy.GetPolicyByScope(context.CommerceContext, context.CommerceContext.Environment, policyByName.Name);

            if (policyByScope?.Properties == null)
            {
                // ISSUE: explicit non-virtual call
                context.Abort($"{nameof(Name)}: IndexablePolicy was not found for index {argument.IndexName}.", context);
                return(false);
            }

            return(await _command.DeleteAllDocumentsInIndex(context.CommerceContext, argument.IndexName));
        }
        private string GetParsedTerm(string term, IndexablePolicy indexPolicy, object defaultSearchOnlyStringFields)
        {
            if (string.IsNullOrEmpty(term) || term.Equals("*", StringComparison.Ordinal) || indexPolicy == null)
            {
                return("*");
            }
            if (term.Contains(":"))
            {
                return(term);
            }

            return($"_text_:{term}");
        }
Exemple #5
0
        private ICollection <string> GetRetreivableFields(IndexablePolicy indexPolicy)
        {
            List <string> stringList = new List <string>();

            if (indexPolicy == null)
            {
                return(stringList);
            }

            stringList.AddRange(indexPolicy.Properties.Select(field => new
            {
                field,
                fieldName = field.Key.ToLower()
            })
                                .Where(x => x.field.Value.IsRetrievable)
                                .Select(x => x.fieldName));

            return(stringList);
        }
        /// <summary>Runs the specified argument.</summary>
        /// <param name="arg">The argument.</param>
        /// <param name="context">The context.</param>
        /// <returns>
        /// an <see cref="T:Sitecore.Commerce.EntityViews.EntityView" /></returns>
        public override async Task <Sitecore.Commerce.EntityViews.EntityView> Run(
            Sitecore.Commerce.EntityViews.EntityView arg,
            CommercePipelineExecutionContext context)
        {
            ProcessDocumentSearchResultBlock searchResultBlock = this;

            // ISSUE: explicit non-virtual call
            Condition.Requires <Sitecore.Commerce.EntityViews.EntityView>(arg).IsNotNull <Sitecore.Commerce.EntityViews.EntityView>(string.Format("{0}: argument can not be null.", (object)searchResultBlock.Name));
            List <Document> source = context.CommerceContext.GetObjects <List <Document> >().FirstOrDefault <List <Document> >();

            if (source == null || !source.Any <Document>() || !arg.HasPolicy <SearchScopePolicy>())
            {
                return(arg);
            }
            SearchScopePolicy policy = arg.GetPolicy <SearchScopePolicy>();
            List <string>     retrievableProperties = IndexablePolicy.GetPolicyByScope(context.CommerceContext, context.CommerceContext.Environment, policy.Name).Properties.Select(p => new
            {
                p     = p,
                pName = p.Key.ToLower()
            }).Where(_param1 => _param1.p.Value.IsRetrievable).Select(_param1 => _param1.pName).ToList <string>();

            if (!policy.ResultDetailsTags.Any <Tag>((Func <Tag, bool>)(t => t.Name.Equals("CatalogTable", StringComparison.OrdinalIgnoreCase))))
            {
                return(arg);
            }
            foreach (Document document in source)
            {
                string docId = document["EntityId".ToLowerInvariant()].ToString();
                Sitecore.Commerce.EntityViews.EntityView child = arg.ChildViews.OfType <Sitecore.Commerce.EntityViews.EntityView>().FirstOrDefault <Sitecore.Commerce.EntityViews.EntityView>((Func <Sitecore.Commerce.EntityViews.EntityView, bool>)(c => c.EntityId.Equals(docId, StringComparison.OrdinalIgnoreCase)));
                if (child != null)
                {
                    int?entityVersion = new int?();
                    int result;
                    if (int.TryParse(document["EntityVersion".ToLowerInvariant()].ToString(), out result))
                    {
                        entityVersion = new int?(result);
                    }
                    CommerceEntity entity = await searchResultBlock._findPipeline.Run(new FindEntityArgument(typeof(CommerceEntity), docId, entityVersion, false), context);

                    if (entity == null)
                    {
                        arg.ChildViews.Remove((Model)child);
                    }
                    else
                    {
                        ViewProperty viewProperty1 = child.Properties.FirstOrDefault <ViewProperty>((Func <ViewProperty, bool>)(p => p.Name.Equals("EntityId", StringComparison.OrdinalIgnoreCase)));
                        if (viewProperty1 != null)
                        {
                            viewProperty1.IsHidden = true;
                            viewProperty1.UiType   = string.Empty;
                        }
                        ViewProperty viewProperty2 = child.Properties.FirstOrDefault <ViewProperty>((Func <ViewProperty, bool>)(p => p.Name.Equals("SitecoreId", StringComparison.OrdinalIgnoreCase)));
                        if (viewProperty2 != null)
                        {
                            viewProperty2.IsHidden = true;
                        }
                        ViewProperty viewProperty3 = child.Properties.FirstOrDefault <ViewProperty>((Func <ViewProperty, bool>)(p => p.Name.Equals("VariantId", StringComparison.OrdinalIgnoreCase)));
                        if (viewProperty3 == null && retrievableProperties.Contains <string>("VariantId", (IEqualityComparer <string>)StringComparer.OrdinalIgnoreCase))
                        {
                            ViewProperty viewProperty4 = new ViewProperty();
                            viewProperty4.Name         = "variantid";
                            viewProperty4.Value        = string.Empty;
                            viewProperty4.RawValue     = (object)string.Empty;
                            viewProperty4.OriginalType = typeof(string).FullName;
                            viewProperty4.IsReadOnly   = true;
                            viewProperty3 = viewProperty4;
                        }
                        ViewProperty viewProperty5 = child.Properties.FirstOrDefault <ViewProperty>((Func <ViewProperty, bool>)(p => p.Name.Equals("VariantDisplayName", StringComparison.OrdinalIgnoreCase)));
                        if (viewProperty5 == null && retrievableProperties.Contains <string>("VariantDisplayName", (IEqualityComparer <string>)StringComparer.OrdinalIgnoreCase))
                        {
                            ViewProperty viewProperty4 = new ViewProperty();
                            viewProperty4.Name         = "variantdisplayname";
                            viewProperty4.Value        = string.Empty;
                            viewProperty4.RawValue     = (object)string.Empty;
                            viewProperty4.OriginalType = typeof(string).FullName;
                            viewProperty4.IsReadOnly   = true;
                            viewProperty5 = viewProperty4;
                        }
                        ViewProperty viewProperty6 = child.Properties.FirstOrDefault <ViewProperty>((Func <ViewProperty, bool>)(p => p.Name.Equals("Name", StringComparison.OrdinalIgnoreCase)));
                        if (viewProperty6 != null)
                        {
                            viewProperty6.UiType = "EntityLink";
                        }
                        ViewProperty viewProperty7 = child.Properties.FirstOrDefault <ViewProperty>((Func <ViewProperty, bool>)(p => p.Name.Equals("DisplayName", StringComparison.OrdinalIgnoreCase)));
                        ViewProperty viewProperty8 = child.Properties.FirstOrDefault <ViewProperty>((Func <ViewProperty, bool>)(p => p.Name.Equals("DateUpdated", StringComparison.OrdinalIgnoreCase)));
                        ViewProperty viewProperty9 = child.Properties.FirstOrDefault <ViewProperty>((Func <ViewProperty, bool>)(p => p.Name.Equals("DateCreated", StringComparison.OrdinalIgnoreCase)));
                        child.Properties.Clear();

                        if (viewProperty7 != null)
                        {
                            StringBuilder catalogNames = new StringBuilder(string.Empty);
                            var           sellableItem = entity as SellableItem;
                            if (sellableItem != null &&
                                sellableItem.HasComponent <CatalogsComponent>())
                            {
                                var catalogsComponent = sellableItem.GetComponent <CatalogsComponent>();
                                foreach (var catalogComponent in catalogsComponent.ChildComponents.OfType <CatalogComponent>())
                                {
                                    catalogNames.Append(catalogComponent.Name);
                                    catalogNames.Append(",");
                                }

                                if (catalogNames.Length > 0 &&
                                    viewProperty7.RawValue != null &&
                                    !string.IsNullOrEmpty(viewProperty7.RawValue.ToString()))
                                {
                                    viewProperty7.RawValue = string.Format("{0}-{1}", catalogNames.ToString().Trim(','), viewProperty7.RawValue);
                                }
                            }
                        }

                        if (viewProperty6 != null)
                        {
                            child.Properties.Add(viewProperty6);
                        }
                        if (viewProperty7 != null)
                        {
                            child.Properties.Add(viewProperty7);
                        }
                        if (viewProperty3 != null)
                        {
                            child.Properties.Add(viewProperty3);
                        }
                        if (viewProperty5 != null)
                        {
                            child.Properties.Add(viewProperty5);
                        }
                        if (viewProperty9 != null)
                        {
                            child.Properties.Add(viewProperty9);
                        }
                        if (viewProperty8 != null)
                        {
                            child.Properties.Add(viewProperty8);
                        }
                        child = (Sitecore.Commerce.EntityViews.EntityView)null;
                    }
                }
            }
            return(arg);
        }