9.1.1 Release Notes

March 29, 2019


Enhancements

Typeahead Implementation For Multi-Select Attribute Type

Administration


Admin users can now search and select multiple values for multi-select attribute type fields. This modification to attribute type fields has enhanced the multiple selection functionality.


To implement multi-select typeahead, the following new files were introduced:-

  • TypeaheadClient.cs, ITypeaheadClient.cs, TypeaheadEndpoint.cs and Znode.Engine.Api.Models in Znode.Engine.Api.Client module

  • TypeaheadListResponse.cs, TypeaheadRequestModel.cs, TypeaheadResponselistModel.cs and TypeaheadResponseModel.cs in Znode.Engine.Api.Models

  • TypeaheadService.cs, Znode.Admin.Core*, TypeaheadAgent.cs, ITypeaheadAgent.cs, TypeaheadController.cs, Znode.Api.Core*, TypeaheadController.cs, Znode.Libraries.ECommerce.Utilities*, ZnodeTypeAheadEnum, Znode.WebStore.Core* and Znode.Engine.Admin.Scripts*

Also, a new extension method FastSelectFor was added in Typeahead.cs class


Highlight Selection


Stemming Implementation For Search

Shopper Experience / Commerce


Stemming feature introduced in this release allows the search to consider two types of words, one which are inputted by customers (shoppers) and the other ones, which are the other forms of words inputted by the customers (shoppers). It basically removes suffixes from words so that the words with the same root match each other.


To implement stemming, StemmerTokenFilter was added in the search.


For eg. Say a customer (shopper) enters ‘Mangoes’ in search. Stemming removes suffix ‘es’ to find the basic form of the word and then searches word and all the other forms of the same word.

The other form of word ‘Mango’ is ‘Mangoes’, therefore Stemming searches ‘Mango’ as well as ‘Mangoes’ in search.


Important:- The StemmerTokenFilter will always be enabled by default in web config. Projects which do not want to use stemming will require to disable StemmerTokenFilter.

Remove Products From Cart Button

Administration


A 'Remove All Cart Items' action button is added on the User Cart section in Edit User module. This button allows admin users to remove all the products from the customer’s (shopper’s) cart.


To add this button, a new method RemoveAllCartItem was added in CustomerController.cs class.

User Cart Tab

Display Order On Webstore

Administration / Shopper Experience


The sequence of product variants shown on the web store will now depend on the display order of the product variants set from the Znode admin application. 


To implement this feature, changes were made in 

  • GetDefaultConfiurableProduct method in PublishProductService.cs file

  • GetConfigurableAttributes method in PublishProductHelper.cs file

Edit Banner Sequence

Administration / Shopper  experience


Admin users can now edit the Banner Sequence of the banners from the CMS >> Banner Sliders >> Edit Banner Slider list page itself.


To implement this functionality-

  • UpdateBannerSequence method was added in SliderAgent.cs file

  • EditBannerSequence method was added in WebSiteController.cs file

  • ValidateBannerSequenceField method was added in WebSite.ts

  • Changes were made in BannerViewModel.cs model


Edit Banner Sequence


Filter Order By Order Total

Administration 


On the OMS >> Orders module, a new filter option ‘Total’ has been introduced which will help admin users to filter the orders based on their respective order totals.


To implement this filter, changes were made in SetOrderListData method of OrderAgent.cs file, and  ProductAttribute.ts file.


Total Filter On Order List Page


Explicitly Set Custom Headers 

Administration /Commerce


Provisions are made in this version, to allow custom changes in the header of the API request, explicitly as and when required.


To implement this functionality, the changes were made in BaseAgent and BaseClient files so that the Znode API can be called using custom headers allowing developers to set the headers.

Provision To Remove Custom Header

Administration /Commerce


Developers will now be able to remove the custom headers when required. This provision is made to ensure that unnecessary service calls are not initiated.


To implement this functionality, changes were made in SetCustomHeaderdsExplicitly method in BaseClient file.


Performance: Loading Time Of Contents On Znode Admin Dashboard Page

Administration /Commerce


In scenarios when bulk data is present, the loading time of contents fetched on the admin application dashboard page was quite slow.


To enhance the performance, temporary tables were converted into hash tables, scalar functions were converted to SQL queries and the SQL queries were optimized in the following procedures:-

  • ZnodeReport_Dashboard

  • ZnodeReport_DashboardTopProducts


Performance: Serve Header Menu Navigation From Cache Memory

Shopper Experience


The Znode application now allows the category menu options (shown on the web store) to be saved in the cache memory of the web server, whenever a customer (shopper) visits the web store.


After the category menu options are saved, then if a customer opens the web store, the category menu options in the header will be served from the cache memory.


The saving of category menu options in the cache memory has significantly reduced the loading time of the web store category menu header. 


To enhance the performance, changes were made in the following methods-

  • GetPublishedSubCategories and AssignSEODetails in CategoryService class

  • GetCategories in CategoryAgent

and in _HeaderNav.cshtml file


Note: The saving of category menu options in the cache memory will be compatible with profile and non-profile based web pages.


Performance: Reduced Number Of DB Calls To Load Product Information 

Shopper Experience


Earlier, when the product publish-process was in progress, the web store used to initiate the large number of service calls to display configurable product’s information on the product listing page and on the individual product page. This was because, when a configurable product was published, the parent and child products were published separately.


With this release, when an admin user will try to publish a configurable product(s), it’s parent and child products will be published together, thereby reducing the database calls and the loading time of the product information on the product listing page and on the individual product page.


Changes were made in the following methods to enhance the performance:-

  • ExpandKeys

  • SearchProductModel

  • FullTextSearch of SearchService class

  • DependencyRegistration

  • GetProductExpands in WidgetDataAgent class  (created provision for custom changes)

  • AutoMapperConfig

  • ProductViewModel


Also, the following methods were newly introduced to enhance the performance-

  • WebStoreAttributeValueSwatchMode

  • AttributeSwatchHelper

  • IAttributeSwatchHelper

  • AttributeValueSwatchViewModel


Performance: Donut Caching Improvements

Shopper Experience


Earlier, web store pages were not saved in the cache memory of the web server when even one product was available in the cart.


With this release, irrespective of whether products are available in the cart or not, Znode application will allow all the highly usable web pages (like the home page, product pages, category pages, etc) to be saved from the cache memory of the web server whenever customer (shopper) visits the web store.


After the web pages are saved, then if a customer (shopper) will open a web store, the web page will be served from the cache memory of the web server.


This type of caching has significantly reduced the loading time of the web page loading process.


To enhance the performance, 

  • A class ZnodePageCache was removed from  FilterConfig file

  • ZnodePageCache  class was added in Helpers folder of Web store core

  • Changes were made in OnResultExecuting  method of class ZnodePageCache


Important: 

The cart count shown on the web store is Ajaxified in Znode’s base theme. Any Znode application which uses customized Znode base theme or any new theme will need to get the cart count through Ajax and not through the cache memory.
Please note that if the cart count is not Ajaxified, then customers (shoppers) will see the count which was saved in the cache memory for the first time. Therefore it is quite possible that the customers (shoppers) might see a wrong cart count on the web store. 

GetCount Controller can be called through <web store domain name>.com/home/GetCartCount


Performance: Change In Get Product Details Query 

Summary


The database query used in WebstoreWidgetService.GetProducts method of Znode application has been changed. 


This has significantly reduced the number of service calls initiated to fetch the product details and has also reduced the product details loading time on the product listing page and on the product detail page.


Performance: Widget Ajaxification

Shopper Experience


All the widgets available on the Znode’s base theme are Ajaxified.


This allows the Znode application to load the contents of all the widgets parallel to each other when the web store is opened. 


Parallel loading has significantly reduced the loading time required to fetch the content on the web pages (using the base theme).


To increase the performance, changes were made in the following:-

  • GetProducts method in WebStoreWidgetService class

  • GetAvailableWidgets method in WidgetHelper class

  • WebStoreAccountController

  • WebStoreBlogNewsController

  • WebStoreCaseRequestController

  • WebStoreCategoryController

  • WebStoreContentPageController

  • WebStoreLocatorController

  • WebStoreMessageController

  • WebStorePortalController

  • WebStoreProductController

  • WebStoreWidgetController

  • CreateOKResponse method in BaseController

  • BundleConfig (added ZnodeAjaxify)

  • DynamicContentController

  • HTMLExtensions

  • ZnodeGlobal.ts

  • ZnodeAjaxify.ts

  • _HomeContent.cshtml

  • _Header.cshtml

  • _Slider.cshtml

  • _WidgetAjax.cshtml

  • _WidgetPlaceHolder.cshtml

  • _Layout.cshtml


Non-Ajaxified Widget Signature

Ajaxified Widget Signature


Important:

  1. Any Znode web application which uses customized Znode base theme or any new theme will require to implement Ajaxification in theme’s widgets.

  2. The zip file of patch contains three new file Znode Ajaxify.ts, _WidgetAjax.cshtml and _WidgetPlaceHolder.cshtml add their reference in visual studio solution.



Performance: Get Cart

Shopper Experience 


The number of entity calls initiated and the number of calculations performed on the Cart page are reduced by enhancing ShoppingCartService and PublishProductHelper classes. Also, a new API GetCartCount is introduced which has significantly increased the performance and reduced the loading time of the Cart page.


Important:- 

  • Team members (developers) of different projects should be educated regarding the newly introduced code before they upgrade their projects to this Znode version so that they can take the changes based on the customizations (if any) they have done in GetShoppingCart method.

  • Major impacted areas- All the workflows related to the shopping cart, like tax, promotions, GetCart, PublishProductHelper, Promotion Manager.


Performance: Loading Time Of Shipping Methods On Checkout Page

Shopper Experience 


The following line of code in GetShippingEstimates method in ShoppingCartService class used to take a long time to display Shipping Methods on the Checkout page of the web store -
ZnodeShoppingCart znodeShoppingCart = _shoppingCartMap.ToZnodeShoppingCart(model);


The code from ToZnodeShoppingCart method has been modified, and following new methods are introduced to optimize the performance and to reduce the loading time of the Shipping Methods on the Checkout page:- 

  • AddtoShoppingBagV2

  • BindShoppingCartDataV2

  • BindProductDetailsV2

in ZnodeShoppingCart.cs file


Performance: Calculation Speed Of Shipping Price On Checkout Page

Shopper Experience


The CalculateShipping method from CartAgent class used to take a long time to calculate the shipping prices on the Checkout page.


The code from ToZnodeShoppingCart method has been modified, and the following new methods were introduced to increase the performance and to reduce the calculation time of the Shipping Price on the Checkout page:- 

  • AddtoShoppingBagV2

  • BindShoppingCartDataV2

  • BindProductDetailsV2

in ZnodeShoppingCart.cs file


Performance: Loading Time Of Category Page

Shopper Experience


The GetCategorySeoDetails method used to take a long time to load the Category page on the web store.

The code from GetCategorySeoDetails method is optimized and a new method GetBreadcrum is introduced to increase the performance and to reduce the loading time of the Category page.


Performance: Loading Time Of Product Details Page 

Shopper Experience


In case of large number of products, the loading time of product details page was very slow. This was due to many possible reasons and one of the major reasons was that all the data related to products (like inventory, SEO, pricing, associated products, add-ons, associated category details, product reviews, promotions, etc) was initiated through a single service call.


To optimize the loading time, the service call was broken down into multiple smaller parts so that each part could be executed in a parallel fashion. This has increased the performance and reduced the loading time of the product details page. 

Additional Technical details can be found here.


Note- The performance of the product display page is optimized for templates which use Product Size - Medium and Product Size - Small for different product types (refer image below). Product Size can be set from the display settings of a store.


Important-

  • This performance enhancement is optional.

  • If for any web store, the content (data) is fetched directly from the database and not from cache memory, then only this enhancement should be taken.

For eg. If all the data on the PDP page is fetched from the cache memory and and say Price needs to be fetched on a real time basis then in that case Ajax partial view can be created and used to fetch the real time Price.



Performance: Saving Static Content In Cache Memory

Shopper Experience


The Znode application now allows the static content shown on the web store (like web store logo, icons , etc) to be saved in the cache memory of the browser, whenever a customer (shopper) visits the web store.


After the static content is saved, then if a customer opens the web store, the static content will be served from the cache memory.


The saving of static content in the cache memory has significantly reduced the loading time of the web page contents. 


To allow saving static content in the cache memory, Application_BeginRequest method was removed from Response.Cache.SetNoStore method of Global.asax file



Performance: Reusing Search Connections

Shopper Experience


When customers (shoppers) search any keyword on the web store, a search connection is established. This connection is established every time a customer (shopper) performs the search.


With this release the already established connections will be used to fetch the search results, using existing connection object, thereby reducing the memory consumption issues on the web store.


To implement this functionality, changes were made in ElasticSearchClient in ElasticSearchBase class.


Issues Resolved


[ZPD-1978] - Admin - An incorrect guest user count was getting displayed in the statistics shown on the dashboard. To resolve this issue, a clause from an SQL query was removed from ZnodeReport_Dashboard procedure.


[ZPD-3957] - Admin- Admin users were not able to associate multiple highlights or disassociate one or more highlights from products. This was due to SQL query issue and also because highlight value was not getting passed to the DB. To resolve this issue, changes were made in the Znode_UpdateAttributeValue procedure.


[ZPD-4264] - Admin & Web store - Orders were not getting captured but payments were getting deducted when promotion(s) were created at the same time of order creation. To resolve this issue, changes were made in:-

  • BuildPromotionsList and ApplyPromotionsFilter methods in ZnodeCartPromotionManager.cs file

  • ApplyPromotionsFilter and PromotionalPrice methods in ZnodePricePromotionManager.cs

  • BuildPromotionsList, ApplyPromotionsFilter, ChangeDetails methods in ZnodeProductPromotionManager.cs

  • GetPromotionsByType, PricePromotionCache and ProductPromotionCache properties in ZnodePromotionManager.cs

  • ApplyPromotion method in ZNodeProductBase.cs


[ZPD-4271] - Admin- On Reports >> Advanced Reports >> Top Spending Customers - A label ‘GuestUser’ was incorrect and was therefore renamed to ‘Guest User’.


[ZPD-4473] - Cache Issue - Cache was not getting cleaned when Catalog was published to production mode. To resolve this issue a new method named ClearCacheAfterPublish was added in the Publish method.


[ZPD-4490] - Web store - The updated promotion price was not getting reflected on the Checkout page. To resolve this issue-

  • Some unwanted lines of code were removed from _TotalTable.cshtml

  • ShippingDiscount property’s value was bound to CartAgent.cs


[ZPD-4492] - v2/publishproduct/get was not returning Associated Products and AdditionalAttributes was not returning values if contained any spaces. To resolve this issue, changes were made in 

  • GetExpands method in PublishProductService.cs

  • SaveLineItemHistorySession method in CartAgent.cs

  • GetDataFromExpands method in PublishProductHelper.cs

Also, the following new methods were introduced-

  • GetAssociatedProducts method in PublishProductHelper.cs

  • GetPricingInfoFrom List method in PublishProductHelper.cs

  • GetCurrencyInfoFromList method in PublishProductHelper.cs

  • GetPricingBySKUs method in PublishProductHelper.cs

  • GetAttributeValue method in PublishProductHelper.cs

  • ConcurrentDictionary method in PublishProductHelper.cs

Also, a key=”AdditionalAttributes” was added in API’s web.config


[ZPD-4499] - Admin - Right Click options (such as cut, copy, paste, table options, image options, and URL options) were not available in rich text boxes. They were added through TinymceCustom.js


[ZPD-4283] - Admin - Merchant gateway settings were getting duplicated when editing a custom payment method. To resolve this issue, 

  • Changes were made in GetPaymentGatewayView method of class PaymentAgent

  • A constant key was added in AdminConstants

  • A _CustomGateway.cshtml view was added in admin application (code end)


[ZPD-4284] - Admin & Web store - When a saved credit card was used to place an order, the order used to get captured with an order number as 1. To resolve this issue, the mapping was changed in paymentviewmodelmap.cs file 


[ZPD-4286] - Admin - Payment gateway names were being fetched in the application which caused confusion because the same name can be set for multiple payment gateways. To resolve this issue, the Payment Code was used in case of Payment Gateway name to fetch the payment gateway name on the application (web store and admin).


[ZPD-4289] - Web store - Shipping prices shown on the Checkout page were irrespective of the shipping promotions (when promotions were available). To show the discounted shipping price-

  • Two new properties FormattedShippingRateWithoutDiscount and ShippingRateWithoutDiscount were introduced in ShippingModel.cs

  • The actual rate of shipping was bound to ShippingRateWithoutDiscount property in ShoppingCartService.cs

  • A new property ShippingRateWithoutDiscount was introduced in ZnodeShippingUps.cs

  • Changed price format based on the currency culture code in CheckoutAgent.cs

  • Displayed slash pricing on Checkout page by making changes in _ShippingOptions.cshtml


[ZPD-4290] - Admin & Web store - Znode Order number was not getting passed to ChasePT payment method. To resolve this issue, changes were made in paymentviewmodelmap.cs class.


[ZPD-4292] - Admin - Admin users were not able to update customer's (shopper’s) email address from the account section. Changes were made in AddCustomerAsidePanel.cshtml file to resolve the issue.


[ZPD-4293] - Some details (like Artifi Design ID and Image Path) available in "Resend order confirmation email" were unnecessary for Znode base product and were therefore removed.


[ZPD-4282] - Admin - With cross-merchandising, a product added in a category within a catalog was not getting reflected in the same category available in other catalogs. To resolve this issue, changes were made in  

  • CatalogService constructor, UnAssociateProductFromCatalog, UpdateCatalogCategoryProduct, AssociateCategoriesToCatalog, AssociateProductsToCatalog methods of catalogservice.cs file

  • Category Service constructor, DeleteCategoryAssociatedProducts, AssociateCategoryProduct methods of  CategoryService.cs

  • ProductService constructor and InsertCatalogData method in ProductService .cs file 

Also, a new file ProductAssociationHelper.cs was introduced and a new DefaultDisplayOrder key was added in adminresource file.

Important:- The above bug is only resolved for projects who have the cross-merchandising flag set to true.


[ZPD-2483] - Admin - An error used to occur whenever ERP settings were saved. To resolve this issue, the logic of encryption and description was removed for ERP settings in

  • EncryptERPConnectorControlData and DecryptERPConnectorControlData methods in ERPConnectorService class

  • GetHeaders and GetLinkURL methods in BaseERP class

Also, DecryptData method was removed from BaseERP class


[ZPD-4486] - The following classes were non overridable and were made overridable:-

  • ZnodeShoppingCart

  • ZnodeShoppingCartItem

  • ZnodeOrderReceipt

  • ZnodeShoppingCartItem

  • ZnodeProductBaseEntity


[ZPD-4488] - Admin & Web store - When a new order is placed, the setup charge for an item was not getting calculated by taking only 1 quantity into consideration. To resolve this issue, changes were made in the following files-

  • CheckoutMap 

  • OrderService

  • DependencyRegistration

  • IZnodeCheckout

  • ZnodeCheckout


[ZPD-4493] - Admin & Web store - Incorrect unit price was being calculated for Manage Order History, Manage Order and Manage Receipts. To resolve this issue following were made overridable:

  • CheckoutMap.cs

  • IShoppingCartService.cs

  • OrderService.cs

  • ShoppingCartService.cs

  • OrderAgent.cs

  • IOrderAgent.cs

  • DependencyRegistration.cs

  • IZnodeCheckout.cs

  • ZnodeCheckout.cs

and changes were made in the same.

 

[ZPD-4514] -  While using sendgrid SMTP setting, multiple same emails were getting sent quite a few number of times. To resolve this issue, changes were made in ZnodeEmail.cs class


[ZPD-4527] - Admin - On PIM >> Catalogs >> Edit Catalog, incorrect catalog structure was getting displayed for a rare scenario. To resolve this issue, changes were made in Znode_GetCatalogCategoryHierarchy procedure.


[ZPD-4537] - Admin - On DAM scroll bar was missing and the search button was not working. To resolve this issue, changes were made in tree-structure.scss file.


[ZPD-4575] - Admin - Users were not being able to close the Associate Products popup whenever they tried to search any invalid keyword. To resolve this issue, changes were made in ShowHideSaveCancelButton method in Brand.ts, ERPConfigurator.ts, Products.ts, Promotion.ts and Vendor.ts files.


[ZPD-4578] - Admin - Application was not allowing users to edit content pages from Marketing >> SEO Setup >> Content Pages, whose content page names included special character ‘&’. This was because in the page URL ‘&’ is used as a parameter separator. To resolve this issue, the ‘&’ character was encoded using it’s ASCII value to send it to the API server. The changes were made SEOService.cs class, SEOSettingAgent.cs class, SEOSetting.ts file and _contentPageListView.cshtml file.


[ZPD-4602] - Admin & Web store - Amount Off Order promotion did not work when multiple promotions were applied to an order. To resolve this issue, changes were made in

  • ApplyDiscount method of ZnodeCartPromotionAmountOffCategory.cs file 

  • RemoveDiscount method of ZnodeCartPromotionManager file


[ZPD-4609] - Admin - On PIM >> Catalogs >> Edit Catalog, a scrollbar was missing and therefore it was difficult to view the complete catalog structure. To resolve this issue, changes were made in site.css and _tree-structure.scss


[ZPD-4234] - Admin - On Reports >> Advanced >> Low Inventory, a label Ware House label was incorrect and was therefore renamed to Warehouse.


[ZPD-4298] - Admin- Advanced reports showed incorrect data.

To resolve this issue a flag IsDefaultShipping was introduced in ZnodeDevExpressReport_GetOrderDetails procedure.


[ZPD-4306] - Admin- On OMS >> Orders >> Add New >> Payment, Purchase Order Number field’s alignment was not proper. To resolve this issue, changes were made in PaymentOptionList.cshtml file.


[ZPD-4493] -Incorrect unit price was being calculated for Manage Order History, Manage Order and Manage Receipts. To resolve this issue following methods were made overridable:

  • ShoppingCartService.cs

  • OrderAgent.cs

  • IOrderAgent.cs

and changes were made in the same.


[ZPD-4577] - Admin - On Marketing >> Promotions & Coupons, 'Catalog Name' and 'Product Type' filters were not working. To resolve this issue, changes were made in PublishProductService.cs file and FilterKey.cs file.


[ZPD-4587] - Web store - On Cart page, an incorrect message was being displayed when multiple coupons were applied by the customers (shoppers). Changes were made in ZnodeCartPromotionManager.cs file, Resource file(API) and

ResourceConstants.cs file to resolve this issue.


[ZPD-4597] - Admin - Application did not allow to publish content pages whose content page names included special character ‘&’. This was because the in web page URL ‘&’ is used as a parameter separator. To resolve this issue, the ‘&’ character was encoded using it’s ASCII value to send it to the API server. The changes were made SEOService.cs class, SEOSettingAgent.cs class, SEOSetting.ts file and _contentPageListView.cshtml file.


[ZPD-4599] - Web store - When customers (shoppers) used to navigate from the Checkout page to the Cart page and then again to the Checkout page, already added address was not persisting. To resolve this issue, changes were made in  SetAnonymousUserAddresses , GetAnonymousUserAddress methods in UserAgent.cs. Also, a new method MapAddressListViewModel was introduced to map AddressListViewModel with the address.


[ZPD-4601] - Admin - On PIM >> Catalog >> Manage Catalog, de-associated products in a category within a catalog were not getting reflected in the same category available in another catalog. This issue was resolved by de-associating products to the same category present in all the catalogs. To resolve this issue, changes were made in UnAssociateProductFromCatalog method in CatalogService file and in newly introduced method UnassociateCatalogProductfromAllCatalog in ProductAssociationHelper file.

Important:- All the projects which need cross merchandising flag to be true, should take this bug into consideration.


[ZPD-4603] - Admin - Admin users were not being able to scroll down after uploading a product image on PIM >> Products >> Add Product. This issue was resolved by making some very minor view level changes.


[ZPD-4611] - Admin - Application was allowing users to enter non-numeric values for saving display order. To resolve this issue changes were made in ‘Init’ of Product.ts


[ZPD-4614] -Admin - Unnecessary dirty message was being displayed instead of a success message in Global Settings. To resolve this issue, the dirtyignore class of dirty popup was removed from theList.cshtml view file.


[ZPD-4616] - Admin - On PIM >> Product Attributes >> Attribute Family, display order was not getting updated after saving because attribute families were initially ordered by attribute groups display order. To resolve this issue, changes were made in GetAssignedAttributeGroups method in PIMAttributeFamilyService.cs


[ZPD-4617] - Admin - On admin application, page title 'Advanced' was missing and was added through Index.chtml


[ZPD-4618] - Admin - New admin users were not able to place orders from OMS >> Orders. To resolve this issue, data changes were made for action  (GenerateOrderNumber)


[ZPD-4620] - Admin - While editing the product, all the variants were getting inserted twice in the database. Due to this, wrong variants were getting displayed on the product display page. To resolve this issue, changes were made in  Znode_ImportInsertUpdatePimProduct and Znode_ImportPartialInsertUpdatePimProduct methods, and duplicate records were deleted from the database.


[ZPD-4633] - Web store - Non discounted shipping amount was getting displayed on the Checkout page even if Percent Off Shipping or Amount Off Shipping was applied as a shipping promotion. This was because the shipping amount was calculated after promotions (any) were applied. To resolve this issue, the discounted amount was recalculated after the shipping amount was calculated in case of Percent Off Shipping and Amount Off Shipping promotions. To resolve this issue, changes were made in ZnodeConstant.cs file and in Calculate method of ZnodeShoppingCart.cs  file.


[ZPD-4639] - There was an inconsistency between facet count and applied facet filter count due to which the filter did not work properly. To resolve this issue, the filter query was changed to the term query. The changes were made in ElasticSearchBase.cs file.


[ZPD-4650]-Admin- On PIM >> Catalog, associated products in a category within a catalog were not getting reflected in the same category available in another catalog. This issue was resolved by associating product to the same category present in all the catalogs. To resolve this issue, changes were made in GetCategoryHierarchyIds and AssociateProductToCatalog methods in ProductAssociationHelper file.

Important:- All the projects which need cross merchandising flag to be true, should take this bug into consideration.


[ZPD-4681] - Admin - Admin users were not being able to add/upload files with SVG extension from DAM >> Media Explorer. To resolve this issue, a provision to add SVG files was made in FileUploadController.cs file.


[ZPD-4280] - When the last item was returned from an order, shipping and handling charges were not getting refunded. To resolve this issue, changes were made in-

  • SetChildItemData in ZNodeShoppingCart.csx file

  • SetParameter method inZnodeViewRepository.cs file

  • SetParameter method inIZnodeViewRepository.cs file


[ZPD-4613] -Admin - A provision for importing Custom1, Custom2, Custom3 values in Price import was not available. To add this provision, default data was added in the following tables-

  • ZnodeImportTemplateMapping

  • ZnodeImportAttributeValidation

through Znode_ImportPriceList procedure.


[ZPD-4591] - Admin - There was no indication of the complete order being marked as returned even after all the items were returned from an order. To resolve this issue, Order Status was allowed to be automatically set as Cancelled when all the items from an order were returned

To resolve this issue-

  • Few new methods UpdateReturnedOrderStatus, UpdateReturnedOrderState were added in Order Service.cs class

  • A new method UpdateOrderLineItemDetails was added in OrderAgent class

  • Changes were made in method SaveHistoryAndUpdateOrderState was added in OrderService class


[ZPD-4592] - Admin - Order amount was not getting reflected in reports when the complete order was marked as returned. To resolve this issue, changes were made in UpdateReturnedOrderStatus method of  OrderService class


[ZPD-4610] - Admin - On CMS >> Content Pages >> Edit Content Page, users were not able to upload images because of disturbed UI. To resolve this issue, changes were made in tinymce.min.js file.


[ZPD-4641] - Admin - Associated catalog was not getting displayed while creating Percent Off Catalog or Amount Off Catalog promotion because an incorrect filter was passed in GetAssociatedCatalogList method in PromotionService.cs file. To resolve this issue, the correct filter was passed through the said method.

[ZPD-4664] - Admin - On PIM >> Products >> Edit Product, retail price was not getting reflected against a pricelist even after it was saved. To resolve this issue changes were made in Product.ts file


[ZPD-4670] - Admin - From PIM >> Products >> Edit Product, users were not able to upload the video because of disturbed UI. To resolve this issue, changes were made in tinymce.min.js file.


[ZPD-4674] - Admin- Admin users were not able to generate an XML for product feed when the application had more than 30,000 product records. To solve this issue, changes were made in GetResultsFromSP method of ZnodeProductFeed.cs file. Also, a new method GetSeoCodeInDataTable was added in the same file.


[ZPD-4675] - Incorrect tags were coming in XML of product feed. To resolve this issue, changes were made in 

  • *ZNodeRssWriter.cs* file

  • etCategoryFeedDataFromSQLAndMongo method, RemoveUnwantedColumnsFromDS  method and CreateProductSiteMap method in ZnodeProductFeed.cs file.


[ZPD-3936] - An order was getting lost with AmazonPay payment method. To resolve this issue, changes were made in 

  • SetUserDetails method of OrderService.cs

  • GetOrderFullfillment method of ZnodeCheckout.cs

  • AmazonPaymentProcess method of CheckoutAgent.cs


[ZPD-4698] - Log4Net - LogActivity & LogMessage methods were not getting saved simultaneously. To resolve this issue, all the log configurations were made in a single file rather than using two files.


[ZPD-4703] - Webstore - Non discounted shipping amount was getting displayed on the Checkout page even if Percent Off Shipping With Carrier promotion was applied as a shipping promotion. This was because the shipping amount was calculated after promotions (any) were applied. To resolve this issue, the discounted amount was recalculated after the shipping amount was calculated in case of Percent Off Shipping With Carrier promotion. To resolve this issue, changes were made in ZnodeConstant.cs file and in Calculate method of ZnodeShoppingCart.cs  file.


[ZPD-4732] - Admin - Upon creating a copy of a product, the complete product name was not getting copied in the product copy. To resolve this issue, changes were made in pim.scss file.


[ZPD-4673] - All the methods in UPS shipping were not overridable. Therefore a new IZnodeShippingUps Interface was added and the GetUPSCredentialsSetting private method was made as protected virtual and GeneralSetting public method as public virtual in ZnodeShippingUps.


[ZPD-4756]-Web store - In Site Search, product suggestions were not displayed when a search keyword contained any special character. This was because the tokenizer’s setting was not standard.  To resolve this issue, tokenizer was set to Edge NGram.

Note:- Standard settings allow the tokenizer to remove special characters while searching.


[ZPD-4758] - Web store - For Site Search, boost and bury conditions were not working properly. To resolve this issue, changes were made in GetZnodeSearchRequest method in SearchService.cs file.


[ZPD-4785]- The following methods were private and were therefore made protected virtual-

  • GetReturnLineItem, getcartorderstatuslist, setcreatedbyuser, GetOrderLineItemQuantity, getquantityonhandbysku, getupdatedorderlineitem, SetCartDataForCalculation, GetCustomCartItem, getcalculatedshoppingcartforeditorder, getorderlineitemstatus and GetCustomGroupProductItems methods in Order Agentfile

  • MapProductNameForGroupProduct, UpdateReturnedOrderStatus, IsValidOrder, GetOrderLineItemExpands, CreatFiltersForOrder and UpdatePurchaseOrderNumber methods in OrderService file.


[ZPD-4840] - In a generic method IsCodeAlreadyExist, a method name IsCodeExist was hardcoded because of which the method name could not be changed dynamically. To resolve this issue, changes were made in IsCodeAlreadyExist generic method of ServiceHelper.cs file.


[ZPD-3931] - Admin - Payment - Success message was not getting displayed when new records were successfully created because of pending ajax calls. This issue was resolved by setting ZnodePendingAjaxRequest flag’s value to false. This flag was available in ZnodeHelper.ts


[ZPD-4362] - SEO URL implementation was not compatible with a project’s URL pattern. To resolve this issue, a provision to allow slash and dot and extensions (like .html) were added in SEO URL pattern.


[ZPD-4513] - The sequence of addon groups was not getting fetched based on the display order set for add-ons. To resolve this issue, changes were made in GetAddOnsData method in PublishProductHelper.cs file.


[ZPD-4735] - Admin - Even after selection of store from OMS >> Orders >> Create Order, store selection validation message was getting displayed because a hidden property hdnSelectedPortal with ID=selectedPortalId  was missing on CreateOrder.cshtml view. This issue is now resolved.


[ZPD-4745] - Web store - Customers (shoppers) created from admin application were not being able to log in to the web store because a default login URL for those customers (shoppers) was not getting saved. To resolve this issue, a default URL was allowed to set automatically for a script whenever any customer’s (shopper’s) account was created.

[ZPD-4747] - Admin- Admin users were not being able to add files with SVG extension in swatch in PIM >> Product Attributes >> Edit Product Attributes. To resolve this issue, in AdminConstants.cs class and ProductAttribute.ts file, SVG extension was added.


[ZPD-4771] -Application Log - A secured connection setting was not standard due to which logs were not getting saved in MongoDB. To resolve this issue, the GUID setting representation was set to standard.


[ZPD-4786] - Instead of personalized value, an attribute code was getting displayed on the web store. To resolve this issue, changes were made in 

  • GetPersonalisedAttributeLineItemDetails method of ZnodeOrderHelper.cs

  • _CartRow.cshtml

  • _ManageCartRow.cshtml

  • OrderReceipt.cshtml

  • CheckoutReciept.cshtml

  • _ReturnLineItem.cshtml

Also,

  • PersonalizeName property was added in PersonaliseValueModel.cs file

  • GetPersonaliseAttributeValueByLocal was added in ZnodeOrderHelper.cs file


[ZPD-4881] - Admin & Web store - On OMS >> Orders, order amount was displayed as a negative value because, during order placement, shipping discount was calculated before the shipping was calculated. To resolve this issue, changes were made in 

  • GetLine method in VertexTax class

  • GetTaxRates method in VertexTaxSales class

  • Calculate, GetProductPrice, GetVarientProductPrice, GetGroupProductPrice methods in ZnodeTaxSalesTax class


[ZPD-4237] - Admin - Update Date was not getting displayed on Reports >> Advanced Report >> Abandoned Cart. This was because the previous cart update date change got overwritten due to the changes made in ZnodeDevExpressReport_GetAbandonedCart procedure. To resolve this issue, changes were made in ZnodeDevExpressReport_GetAbandonedCart procedure.


[ZPD-4752] - Admin - The dashboard page was showing multiple entries for configurable products and for the associated child products under Top Products. This issue was resolved by making changes in ZnodeReport_DashboardTopProducts procedure.


[ZPD-4693] - Admin - An error was getting generated when a .CSV file for products was imported. To resolve this issue, changes were made in the following procedures

  • Znode_ImportPartialValidatePimProductData

  • Znode_ImportPimCategoryData

  • Znode_ImportPimProductData

  • Znode_ImportValidatePimProductData


[ZPD-4770] - Web store - On product list page and search results page, the facets of product variants were not getting displayed. To resolve this issue, a setting was made to allow ‘publish’ to have data of parent products and product variants.


[ZPD-3649] -Admin - On PIM >> Catalogs, an incorrect count was getting displayed in the ‘No of Categories Published’ column because empty categories were not getting published and data was not getting fetched from the correct tables.

To resolve this issue, changes were made in Znode_GetCatalogList, Znode_DeletePublishCatalog, and Znode_GetPublishProducts considering all the product-category-catalog publish scenarios.

  

[ZPD-4265] - Admin - On the order print receipt, a <BR> tag was getting displayed in Promotion Code field when two or more promotions were applied for an order. To resolve this issue, changes were made in _ManageOrderReceipt.cshtml.


[ZPD-4651] - Web store - On the Checkout page, the display name of shipping method was not getting reflected because the Shipping Service Code associated with the shipping method was being saved in the DB. To resolve this issue, changes were made in ShippingAgent.cs class, ShippingViewModel.cs class and Shipping.ts file to allow the DB to save the display name of the shipping method.


[ZPD-4799] - Web store - When Amount Off Product and Percent Off Product promotion/coupon was applied, the discount was taking the add-on quantity and price into consideration. To resolve this issue, changes were made in GetCartSubTotal method in ZnodeCartPromotionType class


[ZPD-4831] - Admin - Customers (shopper) username was missing from the email notifications because the username was not bound to the email template. This issue was resolved by binding the username macro to the email template through InsertUserData method in UserService file.


[ZPD-4853] - Web store - Search feature used to search only the first keyword from the product name to search the respective products. To allow search feature to search the products where the searched keyword was available anywhere in the product name, an edge_ngram tokenizer was replaced by whitespace tokenizer.

Important: Search behavior will change for projects which will take this upgrade.


[ZPD-4890]-Web store- Sort by price option was not working on the product list page on the web store as the sorted data values were not getting received from MongoDB. This issue was then resolved by making changes in the query in the MondoDB procedure.


[ZPD-4894] - Admin - On Orders >> Manage Order, Shipping Type field was overlapping Tracking Number field. To resolve this issue, changes were made in oms.scss file


[ZPD-4895] -The following methods in WidgetDataAgent were not public and therefore were made public to allow custom changes:-

  • GetSearchRequestModel

  • SetSearchRequestModel

  • GetSearchResult

  • GetSortForSearch

  • GetProductExpandForSearch

  • GetProductExpands

  • SetFilterParameter both methods.


[ZPD-4937] - Web store - Data of personalized attributes was not getting displayed on the Cart page. To resolve this issue changes were made in GetPersonalisedValueCartLineItem method of ZnodeOrderHelper.cs file


[ZPD-4909]- Order list used to break when the server’s ‘Date Time and Region’ format was changed. To resolve this issue, changes were made in GetWebGridColumn method  and SetRuntimeDateFormat method  in filterhelper.cs


[ZPD-4746]- Webstore -When three or more add-ons are added to the cart they were not appearing on the Cart page. To resolve this issue, changes were made in the following procedures:-

  • Znode_InsertUpdateSaveCartLineItemQuantity

  • Znode_InsertUpdateSaveCartLineItemBundle

  • Znode_InsertUpdateSaveCartLineItemConfigurable

  • Znode_InsertUpdateSaveCartLineItemGroup


[ZPD-4850]- Admin - The review column’s size in DB was limited. Therefore when customers (shoppers) submitted reviews of large size, the Marketing >> Review list used to break. To solve this issue, the column size of the review was increased in the respective table. Also, changes were made in the Znode_GetCMSCustomerReviewInformation procedure to resolve this issue.

Important

Important: It is important for all the projects to take this feature/upgrade so that their Marketing >> Review list does not break when reviews of large sizes are received.


[ZPD-4899] - Admin- The discounted price was getting incorrectly calculated when multiple promotions were applied for configurable products. This issue came up in a scenario when one of the promotions applied was Percent Off Catalog promotion. And was came up because the Percent Off Promotion promotion was not getting applied over the discounted order price after the initial promotions were applied.

The changes were made in ApplyConfigurableProductDiscount method from   ZnodeCartPromotionPercentOffCatalog file.

[ZPD-4941] - Admin - After updating SEO details and publishing the category from PIM module, the publish status remained as ‘Draft’ on Marketing >> SEO Details >> Categories. To resolve this issue, a new method PreviewHelper naming UpdateSeoPublishStatusBySEOCode was introduced to update the SEO publish status.


[ZPD-4942] - Admin - The OMS >> Content Blocks >> Add/Edit Content Block page used to freeze when 'OK' or 'Cancel' button was clicked. To resolve this issue, changes were made in tinymce.js and tinymce.min.js files.


[ZPD-4965] - The GetSorts method was private and was therefore made public in Search Service to allow custom changes.


[ZPD-5004] - IsAllowWithOtherPromotionsAndCoupons flag was not working correctly for line items. To resolve this issue, a check to remove additional promotions/discounts changes was applied in RemoveDiscount method of ZnodeCartPromotionManager file.


[ZPD-5025] - No property was mapped to retrieve the Shopping Cart details, therefore an AdditionalCost property was mapped in the Shopping Cart in MapShoppingCartItemModel method of ZnodeShoppingCart.cs class.


[ZPD-5039] - Admin - On OMS >> Order list, orders were getting displayed in a random order because the order list was not getting completely fetched at the same time. This issue was identified only in scenarios when a large number of orders were available in the system. To resolve this issue, query changes were made in Znode_GetOmsOrderDetail procedure.


[ZPD-5040] - While the category publish process was in progress, the web store showed duplicate categories because the category hierarchy check was not coded considering all the child and parent category hierarchy scenarios. To resolve this issue, changes were made in Znode_GetPublishCategoryGroup.


[ZPD-5049]- “ZnodeShoppingCart” file was non-overridable and therefore was made overridable.
Important-  Libraries.ECommerce.ShoppingCart.ZnodeShoppingCart class was initialized as a concrete instance using “new” keyword in the following classes-

- AccountQuoteService.cs 
- OrderService.cs
- ShoppingCartService.cs
- ShoppingCartMap.cs
With this release, the said classes will resolve ZnodeShoppingCart class instance (IZnodeShoppingCart) through dependency injection and DI registration should register the class for per-dependency scope. So, if any project has inherited ZnodeShoppingCart class earlier, then that inherited class will be used in said classes above.  
This implementation needs to be reassured in the customized part (if any) of the project, before taking this upgrade


[ZPD-4959] - Admin - On Admin >> Payment Methods >> Edit Payment Method page, payment options were not getting displayed for Amazon Pay payment method because credit card initialization method used to get called every time the page was loaded. To resolve this issue, a Payment.prototype.GetPaymentGetwayForm method was removed from _CreditCardDetails.cshtml view file.


[ZPD-4691] - Admin - On Marketing >>  Promotions & Coupons >> Add New,  ‘All Stores’ checkbox field was not getting displayed on Add/Edit Promotions & Coupons page because the attribute was disabled. To resolve this issue,  ‘All Stores’ has been enabled.


[ZPD-4776] - Admin - On Stores & Reps >> Stores >> Manage Store >> Additional Attributes page, a subsection label Authorization was incorrect and was therefore renamed to Web store Authentication.


[ZPD-4879] - Admin - On Admin >> Shipping, the search field was not working. To resolve this issue, changes were made in Znode Shipping XML and Shipping ID, Shipping Type Name, Shipping Name, Description, and Destination Country Code columns were enabled.


[ZPD-5065] - On web store, products were not getting displayed based on the latest published version. This was because there was no Version ID filter passed to the GetConfigurableProductFilter method. A new Version ID filter has been added to this method to fix this issue.


[ZPD-5086] - On publishing category/categories from PIM >> Categories, SEO details were not getting published because previously, deletion and insertion of SEO details was dependent on SEO ID. Since SEO IDs are null in case of categories, therefore, SEO code is now been used to solve this issue. Changes were made in PublishCategory method in CategoryService.cs file.


[ZPD-5142] - Web store - Promotion type 'Percent Off Product' was not working correctly with configurable products and for products with tier pricing because ZnodeProductBaseEntity.cs=>SelectedQuantity property was not mapped, and quantity was not getting passed in case of configurable products from ZNodeShoppingCart.cs=>BindProductDetails to 
ZNodeShoppingCart.cs=>GetZnodeProductConfigurables. 

To resolve this issue ZnodeProductBaseEntity.cs=>SelectedQuantity property was mapped, and quantity was allowed to pass in case of configurable products from ZNodeShoppingCart.cs=>BindProductDetails to 
ZNodeShoppingCart.cs=>GetZnodeProductConfigurables


[ZPD-5144] - ParentProductSKU property used to break the pricing for line items with add-ons during the checkout because ParentProductSKU was not mapped in the order collection model in
ZnodeCheckout.cs=>AddLineItemsInOrderLineItem. 

To resolve this issue, ParentProductSKU was mapped in the order collection model in
ZnodeCheckout.cs=>AddLineItemsInOrderLineItem


[ZPD-5207] - Web store - A loader was not getting displayed on the category page when subcategory/subcategories loading was in progress. To resolve this issue, a loader was added in the HTML view _WidgetCategoryGrid


[ZPD-5062] - GetCategorySeoDetails method used to take a very long time to execute. To resolve this issue, GetCategorySeoDetails was removed from the Index method.

Important- Products who are only using ZNode API for the development needs to pass filter of IsBindImage to get Image Path For Category, otherwise, images will not be bound to the category.


[ZPD-5315] - Web store - Data of different content pages was getting overlapped. To resolve this issue, a "pageId" parameter was added in VaryByParam class name "ZnodePageCache".

Did you find it helpful? Yes No

Send feedback
Sorry we couldn't be helpful. Help us improve this article with your feedback.