August 19, 2020
Highlights
Release Information
This patch release includes major performance changes and minor bug fixes.
Breaking Changes
JSON Minification
Some impacts related to JSON Minification performance enhancements (ZPD-10518 released in Znode 9.3.2.4) are identified and therefore JSON Minification is disabled for this release.
More enhanced changes will again be available in the coming releases.
Other Breaking Changes
Please refer to this Breaking Changes document for more information.
Enhancements
[ZPD-10327] - Performance: Data From ERP Connector On Webstore
Shopper Experience
Earlier, all the information from the ERP Connector used to get fetched from the database and then used to get displayed on the web-store.
To improve the performance of the web store, caching is implemented for information fetched through ERP so that if the required data is available in the cache, the web store will fetch the data from there instead of the database. This has improved the performance and the page loading time of the web store.
Important: It is essential to clear the API cache when changes are made in ERP configurations from the Znode admin application.
[ZPD-10328] - Performance: Catalog Data
Shopper Experience
All the calls initiated to fetch CatalogId were made for the database.
To improve the performance of the web store, caching is implemented for such scenarios, so that if the required information is available in the cache, the web store will fetch the information from there instead of the database.
Important: It is essential to clear the API cache when any changes are made in the store URLs or when the store assignments of users are changed.
[ZPD-10431] - Performance: Link Widgets
Shopper Experience
To improve the performance of the product list fetched and displayed in the link widget(s) on the PDP, a cache mechanism is implemented for WebStoreWidget/GetLinkProductList API so that the products available in the widgets can be cached. The products will then be fetched from the cache instead of the database, thereby improving the performance and reducing the loading time of the product list.
[ZPD-10331] - Performance: SEO Details From Web Store Cache
Shopper Experience
Earlier, to get the SEO information, the web-store used to initiate a call to check whether the required information is available in the API cache.
To improve the performance of the web store, the information will now be checked in the web store cache, so that the unnecessary call initiated to API can be eliminated.
Important: It is essential to clear the API cache when any changes are made in the SEO Friendly URL of products and categories from the Znode admin application.
[ZPD-10432] - Performance: Keywords Redirect
Shopper Experience
To improve the performance of the web store search, a cache mechanism is implemented for Search/GetCatalogKeywordsRedirectList API so that the data from the Keywords Redirect can be cached. The data for the redirection URL will then be fetched from the cache instead of the database, thereby improving the performance and reducing the time required for the search to bring the results.
Note: The cached data from Keywords Redirect will get refreshed whenever any keyword redirect is added, updated, or deleted.
[ZPD-10434] - Performance: Cart Count
Shopper Experience
The count of products available in the cart is calculated and displayed on several pages. Earlier the count always used to get fetched from the database.
With this release, the count will be saved and fetched from the session for scenarios where there is no need for a DB call. This enhancement will not only improve the performance but also the experience of customers (shoppers) visiting the web store.
[ZPD-10711] - API Cache Durations
Shopper Experience
The cache duration of all keys is set to 60 minutes.
[ZPD-10779] - CurrentPortalCacheDuration Key Cache Duration
Shopper Experience
The duration of the CurrentPortalCacheDuration cache key is set to 20 minutes.
[ZPD-10435] - Performance: Registering All Routes
Shopper Experience
Certain routes were identified which used to call the default route available in the route.config file. Due to which unwanted calls used to get initiated to SEO API, thereby making responses to the web store requests slower.
Therefore to improve the performance of the responses, the entries of such routes were added in the route.config file.
This enhancement has improved the performance of the web store.
[ZPD-10433] - Performance: Dynamic Styles
Shopper Experience
To improve the loading time of the styles displayed on the web store, Donut caching is implemented for Dynamic Styles so that the styles can be fetched from the cache instead of the database, thereby improving the performance and reducing the time required for the load the styles on the web-store.
Also, a provision is made to allow Dynamic Styles to handle multiple requests simultaneously.
Important: It is recommended for custom projects to add all the new controllers/actions in RouteConfig for better performance.
[ZPD-10584] - Performance: Web Store Widgets
Shopper Experience
Ajax calls are used for Home page and product detail page widgets. When these pages are loaded for the first time, all the widgets request data simultaneously, causing the slowness.
Therefore to reduce the loading time and improve the performance of the widgets, non-Ajaxified calls will be initiated in scenarios where Donut caching is enabled.
Note: Ajaxified calls will be initiated when Donut caching is disabled.
[ZPD-10518] - Performance: JSON Minification
Shopper Experience
Earlier, API used to provide responses for properties with default or null values as well, which were not required. Due to which the size of responses used to increase, causing load on the network.
Therefore to avoid unwanted properties in response, JSON minification is introduced in Znode, which makes responses light. Also when initiating a request to the API, a Minified-Json-Response header will be set in the request and API will return the minified JSON if this header is present in the request.
This enhancement will reduce the load on the network.
Note: Minified-Json-Response header will be set only for web-store requests
[ZPD-10582] - Performance: Donut Caching For Logged-In Users
Shopper Experience
Earlier, to improve the performance of the web store, a Donut cache mechanism was implemented for all the highly usable web pages (like the home page, product pages, category pages, etc) so that they can be served directly from the cache instead of the database.
This provision was available for guest customers (shoppers) but now will be available for logged in customers (shoppers) as well.
[ZPD-10643]- Performance: Search/FullTextSearch API Optimization
Shopper Experience
Earlier, Search/FullTextSearch API used to respond slow when configurable products were searched. This was due to an unwanted database call, which has now been removed.
This will not only enhance the performance of the search and PLP but will also reduce the loading time of the search results displayed on the search results page.
[ZPD-10778] - Performance: SearchAgent.GetSeoUrlDetail Method Optimization
Shopper Experience
The SearchAgent.GetSeoUrlDetail method is optimized so that unnecessary calls to the API can be avoided when registered users log in to the web store.
This enhancement has improved the performance of the web store in cases of slug URLs.
[ZPD-10842] - Performance: Published Category Details
Shopper Experience
To improve the performance of the category details, a cache mechanism is implemented for PublishCategory/GetPublishCategory API so that the category details are cached. The details will be then fetched from the cache instead of the database, thereby improving the performance and reducing the loading time of the published category details.
Note: The data cached will get refreshed whenever any category is published directly or indirectly.
[ZPD-10851] - Performance: Published Category List Details
Shopper Experience
To improve the performance of the category list details, a cache mechanism is implemented for PublishCategory/List API so that the category list details are cached. The details will then be fetched from the cache instead of the database, thereby improving the performance and reducing the loading time of the published category list details.
Issues Resolved
[ZPD-9111/ZLMC-1157] - API - Validation error was not getting displayed for the maximum quantity scenario when a product was added to the cart.
[ZPD-10710/ZLMC-1417] - Admin - Due to the usage of an incorrect macro, no value was getting displayed in the Order Receipt for the Shipping Method in the email notification.
[ZPD-10763/ZLMC-1435] - Admin - Currency set as a default currency from Global Settings was not getting selected by default on the Add Shipping Method screen.
[ZPD-11307/ZLMC-1492] - Admin & Web Store - No linked products were not getting displayed in the You May Also Like section on the web-store when linked products were updated and the product was saved as draft.
[ZPD-10898/ZLMC-1447] - Web Store - The tiered price was not working for addons because the XML was not getting generated properly.
[ZPD-10899/ZLMC-1416] - Web Store - Add and Edit buttons were getting displayed in the Address section on the Checkout page for account users with Role Type as 'User'.
[ZPD-11354/ZLMC-1501] - Admin - Epicor Connector Settings screen used to display an invalid message when changes were saved, and the Add Epicor Connector Touchpoint popup had an inappropriate title.
[ZPD-11514/ ZLMC-1522] - Admin - Back button was not available on the Associate Categories popup on the Edit Product screen.
[ZPD-11586/ZLMC-1530] - Admin - View action was not working for the Scheduler Logs.
[ZPD-10685] - Admin - Admin users were unable to associate the searchable fields when the same attributes were used as search profile facets.
[ZPD-10898/ZLMC-1447] - Web Store - Tiered pricing was not getting updated when the quantity of product with addon was updated from the Cart page.
[ZPD-11173/ZLMC-1466] - Admin - Incorrect modified date was getting saved in DB when changes were made in the Inventory.
[ZPD-11292/ZLMC-1487] - Admin - The screen used to freeze when View action was clicked from the ERP Configuration screen.
[ZPD-11729/ZLMC-1545] - Admin - There were some UI issues on the Pricing tab of Edit Product screen for Custom columns.
[ZPD-11830] - Web Store - Linked products were not getting displayed for non-default variants on the configurable product PDP.
[ZPD-11934] - Admin - After a product is marked as disabled, an incorrect notification message was getting displayed when changes were made and saved for an order from the Manage Order screen.
[ZPD-11989/ZLMC-1596] - Admin - Duplicate products were getting generated when a catalog was published.
Important: The publishCatalogId will now be passed to the EnsureMongoIndex method and to event written inside this method, instead of pimCatalogId.
Implementation Details
[ZPD-10327] - Performance: Data From ERP Connector On Webstore
To implement this enhancement,
GetActiveERPConfigurationFromCache method was added in ERPConfiguratorService.cs file
Changes were made in the following:
GetActiveERPClassName, GetActiveERPClassId and GetERPClassName methods of ERPConfiguratorService
cache.config file
Here is the API path: ERPConfigurator/GetActiveERPClassName
Important: It is essential to clear the API cache when changes are made in ERP configurations from the Znode admin application.
[ZPD-10328] - Performance: Catalog Data
To implement this enhancement,
GetPortalListFromCache, GetPortalPublishCatalogFromCache and GetPortalPublishCatalogFromCache methods were added in the BaseService.cs file.
Changes were made in GetUserPortal, GetPortalCatalogId and GetAvailablePortals methods of BaseService.cs file.
Important: It is essential to clear the API cache when any changes are made in the store URLs or when the store assignments of users are changed.
[ZPD-10331] - Performance: SEO Details From Web Store Cache
To implement this enhancement,
GetSeoUrlDetailFromCache and GetSEODetailsFromAPI methods were added in SearchAgent.cs file
Changes were made in the GetSeoUrlDetail method of SearchAgent.cs file.
Important: It is essential to clear the API cache when any changes are made in the SEO Friendly URL of products and categories from the Znode admin application.
[ZPD-10431] - Performance: Link Widgets
To implement this enhancement, changes were made in the following :
cache.config file of Znode.Engine.Api
OnPublishProduct method of ZnodeEventObserver.cs file
Note: The products cached for link widgets will get refreshed whenever any product is published directly or indirectly.
[ZPD-10432] - Performance: Keywords Redirect
To implement this enhancement,
Changes were made in the following:
cache.config file
CreateSearchKeywordsRedirect, UpdateSearchKeywordsRedirect and DeleteSearchKeywordsRedirect methods of SearchService file
GetCatalogKeywordsRedirectList method of SearchCache file
OnKeywordsRedirectListChange method was added in ZnodeEventObserver.cs file
Note: The cached data from Keywords Redirect will get refreshed whenever any keyword redirect is added, updated, or deleted.
[ZPD-10434] - Performance: Cart Count
To implement this enhancement,
Changes were made in the following:
GetCartCount method of CartAgent file
CartCount method of HomeController
ClearCartCountFromSession method was added in CartAgent file
[ZPD-10435] - Performance: Registering All Routes
To implement this enhancement, changes were made in the following:
Index method of the CategoryController file
RouteConfig.cs
[ZPD-10433] - Performance: Dynamic Styles
To implement this enhancement, changes were made in the GetDynamicStyles method of DynamicContentController file.
Important: It is recommended for custom projects to add all the new controllers/actions in RouteConfig for better performance.
[ZPD-10643] - Performance: Search/FullTextSearch API Optimization
To implement this enhancement, changes were made in the GetAssociatedProducts method of PublishProductHelper file.
[ZPD-10518] - Performance: JSON Minification
To implement this enhancement,
Changes were made in the following:
SetHeaders and SetMinifiedJsonResponseHeader methods of BaseClient file
InsertIntoCache method of BaseCache file
CreateOKResponse method of BaseController file
Global.asax.cs file
Web.config file
Following were added:
MinifiedJsonResponseHeader property and SetMinifiedJsonResponseHeader method were added in of BaseClient file
ToJson method in ApiHelper file
MinifiedJsonResponse property in ZnodeApiSettings file
ZnodeHttpHeaders file
GetHeaderFormattedString and GetHeaderValue methods in ZnodeHttpHeaders file
MinifiedJsonResponse property in ZnodeWebstoreSettings file
CreateOKResponse method in BaseController file
Note: Minified-Json-Response header will be set only for web-store requests
[ZPD-10582] - Performance: Donut Caching For Logged-In Users
To implement this enhancement, changes were made in the following files:
ZnodePageCache
HomeController
CategoryController
ContentPageController
ProductController
_Layout.cshtml
ProductList.cshtml (for Maxwell’s Hardware theme)
[ZPD-10711] - API Cache Durations
To implement this enhancement, changes were made in the cache.config file of Znode.Engine.API
[ZPD-10779] - CurrentPortalCacheDuration Key Cache Duration
To implement this enhancement, changes were made in the web.config file of Znode.Engine.Webstore.
[ZPD-10584] - Performance: Web Store Widgets
To implement this enhancement,
Changes were made in:
_Homecontent.cshtml
Event.min.js
The following widgets were converted to WidgetPartialAuto format:
LinkProducts widget
SubCategory (CategoryGrid) widget
A new method WidgetPartialAuto was added in HTMLExtensions.cs file
Note: Ajaxified calls will be initiated when Donut caching is disabled.
[ZPD-10778] - Performance: SearchAgent.GetSeoUrlDetail Method Optimization
To implement this enhancement, a new property searchClient was added and used instead of _searchClient in SearchAgent file.
[ZPD-10842] - Performance: Published Category Details
To implement this enhancement, changes were made in the cache.config file of Znode.Engine.API
Note: The data cached will get refreshed whenever any category is published directly or indirectly.
[ZPD-10851] - Performance: Published Category List Details
To implement this enhancement, changes were made in the cache.config file of Znode.Engine.API
Note: The data cached will get refreshed whenever any category is published directly or indirectly.
[ZPD-9111/ZLMC-1157] - API - Validation error was not getting displayed for the maximum quantity scenario when a product was added to the cart.
To resolve this issue,
ValidateSKUDetails, ValidateMinMaxQuantity and ValidateQuantity methods were added in ShoppingCartService.cs
AddToCartProduct method was modified
[ZPD-11586/ZLMC-1530] - Admin - View action was not working for the Scheduler Logs.
To resolve this issue, changes were made in the SchedularLogList.cshtml file.
[ZPD-10710/ZLMC-1417] - Admin - Due to the usage of an incorrect macro, no value was getting displayed in the Order Receipt for the Shipping Method in the email notification.
To resolve this issue, changes were made in the OrderReceipt email template.
[ZPD-10763/ZLMC-1435] - Admin - Currency set as a default currency from Global Settings was not getting selected by default on the Add Shipping Method screen.
To resolve this issue, changes were made in the GetActiveCurrency method of ShippingAgent.cs file.
[ZPD-11307/ZLMC-1492] - Admin & Web Store - No linked products were not getting displayed in the You May Also Like section on the web-store when linked products were updated and the product was saved as draft.
To resolve this issue, changes were made in the MapLinkProducts method of WebStoreWidgetService file.
[ZPD-10898/ZLMC-1447] - Web Store - The tiered price was not working for addons because the XML was not getting generated properly.
To resolve this issue, changes were made in the UpdateQuantityOfCartItem method of the CartAgent.cs file.
[ZPD-10899/ZLMC-1416] - Web Store - Add and Edit buttons were getting displayed in the Address section on the Checkout page for account users with Role Type as 'User'.
To resolve this issue, changes were made in the following files:
_BillingShippingAddress
File:_DisplayAddress
[ZPD-11354/ZLMC-1501] - Admin - Epicor Connector Settings screen used to display an invalid message when changes were saved, and the Add Epicor Connector Touchpoint popup had an inappropriate title.
To resolve these issues, changes were made in the following:
ERP_Resources.resx
_UnAssignedTouchPointsList.cshtml
CreateConnectionAttributes method of ERPConnectorController.cs
[ZPD-11514/ ZLMC-1522] - Admin - Back button was not available on the Associate Categories popup on the Edit Product screen.
To resolve this issue, changes were made in the _UnAssociatedCategories.cshtml file.
[ZPD-10685] - Admin - Admin users were unable to associate the searchable fields when the same attributes were used as search profile facets.
To resolve this issue, changes were made in the RemoveAttribute method of Search.ts file.
[ZPD-10898/ZLMC-1447] - Web Store - Tiered pricing was not getting updated when the quantity of product with addon was updated from the Cart page.
To resolve this issue, changes were made in the UpdateQuantityOfCartItem method of the CartAgent.cs file.
[ZPD-11173/ZLMC-1466] - Admin - Incorrect modified date was getting saved in DB when changes were made in the Inventory.
To resolve this issue, changes were made in the following:
InventorySKUModel.cs file
InventorySKUViewModel.cs file
Znode_GetSKUInventoryList stored procedure.
[ZPD-11292/ZLMC-1487] - Admin - The screen used to freeze when View action was clicked from the ERP Configuration screen.
To resolve this issue, changes were made in the SchedularLogList.cshtml file.
[ZPD-11729/ZLMC-1545] - Admin - There were some UI issues on the Pricing tab of Edit Product screen for Custom columns.
To resolve this issue, changes were made in the following files:
pim.scss file
site.css file
[ZPD-11830] - Web Store - Linked products were not getting displayed for non-default variants on the configurable product PDP.
To resolve this issue, changes were made in _ProductExtras.cshtml file.
[ZPD-11934] - Admin - After a product is marked as disabled, an incorrect notification message was getting displayed when changes were made and saved for an order from the Manage Order screen.
To resolve this issue, changes were made in the following methods:
UpdateOrder of OrderService file
ToZnodeShoppingCart of ShoppingCartMap.cs file
[ZPD-11989/ZLMC-1596] - Admin - Duplicate products were getting generated when a catalog was published.
To resolve this issue, changes were made in the following:
GetAllProducts method of the SearchProductService.cs file
ZnodeConstant.cs file
Publish and EnsureMongoIndex methods of the CatalogService.cs file.
Important: The publishCatalogId will now be passed to the EnsureMongoIndex method and to event written inside this method, instead of pimCatalogId.