Area: Optimizely B2B Commerce

Catalog pipelines

Recommended reading 


Order Pipe Description
100 AddToRecentlyViewedProducts Adds to user recently viewed products. If RecentlyViewedEnabledsetting is set to false then bypasses pipe. Stores information about recently viewed products in cookies and also stores this information in database if user is logged in.


Order Pipe Description
100 CanConfigure Obsoleted in 4.6.1 and replaced with IProductUtilities.CanConfigure. For more information on specific pipelines, please see the Overview of Pipelines article.


Order Pipe Description
100 CanShowPrice Setsresult.CanShowPriceto true if product setting CanSeePricesis set to true and product can not be configure.


100 CheckForReplacement Checks for replacement product for specifiedSearchCriteriaparameter. If parameterSeachCriteriais blank or product for that text is not found then bypasses pipe. If replacement product is found and it is not the initial product then sets its ErpNumbertoresult.SearchCriteria.


Order Pipe Description
100 CreateProductDto CreatesProductDtoor find him in SearchResultProductDtosparameter ifFoundWithSearchparameter is true.
200 CopyProductToProductDto MapsProductparameter toresult.ProductDto.
300 PopulateProductDto

Populates remaining fields for result.ProductDto namely:

  • ProductDetailUrl
  • IsActive
  • IsStyleProductParent
  • QuoteRequired
  • AllowedAddToCart
  • CanBackOrder
  • CanShowUnitOfMeasure
  • CurrencySymbol
  • ProductImages
  • OrderLineId
400 PopulateQtyOnHand Retrieves remaining quantity for specified product and sets it toresult.ProductDto.QtyOnHand.
500 PopulateCanConfigureAndCanShowPrice Calls CanConfigureand CanShowPricepipelines and populates corresponded fields inProductDto.
600 PopulateCanAddToCart

Populates CanAddToCart property. It sets to false in cases:

  • product is not active
  • product setting CanAddToCart is false
  • product is style product parentproduct can be configure
  • product inventory does not allow to add
  • this is configurable product and it uses not a fixed configuration

Also populates CanEnterQuantity with same as CanAddToCart value, and populate CanViewDetails with negated CanAddToCart value.

650 PunchoutPopulateCanAddToCart If the current session is a punchout session andIPunchOutSessionUtilities.CanModifyOrder is false, sets resultCanAddToCart to false.
700 PopulateCanAddToWishList

Populates CanAddToWishList property. It sets to false in cases:

  • product setting CanAddToCart is false
  • this is configurable product
  • product is style product parent
750 PunchoutPopulateCanAddToWishlist If the current session is a punchout session, sets resultCanAddToWishlist to false.
800 PopulateImages Populates small, medium and large images paths, also sets alt text for images.
900 PopulateConfigurationDto CreatesConfigurationDtofor product. If parameterSkipLoadingConfigurationsis true or product is not configurable or has no kit sections then bypasses pipe.
1000 PopulateSubscription Creates and fillsProductSubscriptionDtoand sets him to ProductDto.ProductSubscription.
1100 PopulateCustomerProduct FoundsCustomerProductfor current billto and specified product. If user not logged in or CustomerProductnot found then bypasses pipe. Otherwise populates ProductDto.CustomerNameand ProductDto.CustomerUnitOfMeasurewith correspondedCustomerProductfields.
1200 PopulateProductDtoProductUnitOfMeasures If Product.UnitOfMeasureis blank then bypasses pipe. Otherwise adds it to ProductUnitOfMeasurescollection and populates availability for each ProductUnitOfMeasurein that collection.
1300 PopulateProductDtoUnitOfMeasure PopulatesProductDto.UnitOfMeasure, ProductDto.SelectedUnitOfMeasureand ProductDto.Availability. If there is no unit of measure for the product then clears all related to unit of measure fields.
1400 PopulatePricing

Populates pricing for ProductDto. Bypasses pipe in next cases:

  • parameter GetPrices is false
  • ProductDto.CanShowPrice is false and pipeline called not for order line
  • product is quote required and pipeline called not for order line
  • product is quote required and user is not saleperson and order status is not QuoteProposed or JobAccepted
1500 PopulateCosts PopulatesUnitCostinProductDto.Pricing. If user is not salesperson or pipeline called not for order line then bypasses pipe.
1600 PopulateProductStyles PopulatesProductDto.StyledProducts. If product is not a style parent then bypasses pipe.
1700 PopulateAttributeValues Populates attribute types and values forProductDto. If parameter GetAttributeValuesis false or product has no attribute values then bypasses pipe.
1800 PopulateDocuments Populates ProductDto.Documents. If parameter GetDocumentsis false then bypasses pipe.
1900 PopulateSpecifications Populates ProductDto.Specifications. If parameter GetSpecifications is false then bypasses pipe.
2000 PopulateCrossSells Populates ProductDto.CrossSells. If parameterGetCrossSellsis false then bypasses pipe.
2100 PopulateAccessories Populates ProductDto.Accessories. If parameterGetAccessoriesis false then bypasses pipe.
2150 PopulateRelatedProducts Populates ProductDto.RelatedProducts. If parameterGetRelatedProductsis false then bypasses pipe.
2200 PopulateWarehouses Populates ProductDto.Warehousesand warehouses for each styled products. If parameterGetWarehousesis false then bypasses pipe.
2300 CopyCustomPropertiesToResult Copies custom properties from parameterProducttoresult.ProductDto.


Order Pipe Description
100 ValidateContext If parameterProductsis empty then bypasses all pipeline. If parameter FoundWithSearchis true then fillsresult.ProductIdsInOrderwith ids from SearchResultProductDtosparameter, otherwise from Products parameter.
200 ProcessReplacementProducts If parameter ReplaceProductsis false then bypasses pipe. Otherwise tries to find replacement product for each product in parameter.Productscollection.
300 ProcessProductRestrictions If parameter FoundWithSearchis true or parameter EnforceRestrictions is false then bypasses the pipe. Exclude restricted products fromresult.Productscollection. If products count was decreased then setsresult.NotAllProductsAllowedto true. If there is no products after processing and it is not crosssels or configuration request then returns error.
350 CacheIsStyleParent Determine if each product is a styleparent and cache them in one database call if they are not already in the cache.
400 CallProductBatchLoader Calls BatchLoadmethod in IProductBatchLoaderwith ids of result.Products as parameter.
500 GetCategory If parameter CategoryIdis not specified then bypasses pipe. Retrieves category for specified CategoryIdparameter and sets it toresult.Category. If category is not found then returns error.
600 CreateProductDtos Iterates through result.ProductIdsInOrder, for each productid founds product and calls CreateProductDto pipeline.


Order Pipe Description
100 GetAvailability

Obsoleted in 4.6.1 and replaced with ICatalogPipeline.PopulateAvailabilities. For more information on specific pipelines, please see the Overview of Pipelines article.


Order Pipe Description
100 GetAlsoPurchasedProducts If parameter ProductIds is null or empty, then bypasses the pipe. If parameter MaxRows is 0, then set MaxRows to value of StorefrontApiSettings.DefaultPageSize. If parameter MaxRows is more than 25, then set MaxRows to 25. Then returns the top MaxRows products from the ProductAlsoPurchasedWith table, using a select on ProductId IN ProductIds ordered by WeightedScore descending in a collection named AlsoPurchasedProducts.


Order Pipe Description
100 GetFrequentlyPurchasedProducts Gets 5 most purchased products and sets theirErpNumbersto theresult.ProductErpNumbers. If user is not logged in then bypasses pipe.


Order Pipe Description
100 GetRecentlyViewedProducts Gets recently viewed products and sets pairs of their ErpNumberand view date to the result.Products. If RecentlyViewedEnabled setting is set to false then bypasses pipe.


Order Pipe Description
100 GetQuery Gets the query to ProductTopSeller table based on passed CategoryIds and PersonaIds parameters. Resulting query is ordered by WeightedScore.
200 SetMaxResults Sets result.MaxResults property. If parametrer MaxResults is not set then use DefaultPageSize setting. If MaxResults is more than 25, then uses 25 instead. 
300 FormPool Forms pool of products to select based on query from first pipe. If EnableRandomizedDynamicProductRecommendations setting is true, then pool capacity equals to ProductPoolForRandomizedDynamicProductRecommendations setting, otherwise pool capacity equals to MaxResults.
400 SelectResults Select result collection from pool. If EnableRandomizedDynamicProductRecommendations setting is true, then products in pool are ordered randomly, otherwise products are still ordered by WeightedScore.


Order Pipe Description
100 CheckForReplacement Checks for replacement product by calling CheckForReplacementpipeline.
200 GetSearchResults Gets search results by calling GetSearchResultsmethod fromIProductSearchProviderand sets them to result.ProductSearchResult.
300 GetAutoCorrectedSearchResults Gets autocorrected search results. If ProductSearchResult.AutoCorrectSuggestion is null then bypasses pipe. Otherwise re-get product search results for autocorrected query and if results contains products then update result.ProductSearchResultwith autocorrected results.
400 TranslateAttributes For each attribute type inProductSearchResult.AttributeTypeDtosfills NameDisplayand ValueDisplayfields with translatedNameandValuefields.
500 SetSelectedPriceRanges For each price facet sets Selectedproperty to true ifProductSearchParameter.PriceFilterscontains value of hisMinimumPrice property. Bypasses pipe when parameter CanShowPriceFiltersis false or current currency is not default.


Order Pipe Description
100 ValidateAndReplaceProduct Finds replacement product and check if he can be showed to user. If product is found then sets him toresult.Product, otherwise setsnull.


Do you find this information helpful? Please log in to provide feedback.

Last updated: Dec 11, 2020

Recommended reading