Release timeline

  1. 16 Oct 2026Sprint 82Promotion BuilderVendisto-NG: orders & customersDependable product configuration
  2. 25 Sep 2026Sprint 81More reliable online paymentsVendisto-NG: promotions & dashboardsIncremental F&O synchronization
  3. 4 Sep 2026Sprint 80Orders recorded from checkoutVendisto-NG: product pagesF&O return orders in the portal
  4. 14 Aug 2026Sprint 79New add-to-basket animationVendisto-NG: product managementcXML PunchOut
  5. 24 Jul 2026Sprint 78Translato: AI translationsVendisto-NG: import & exportPayment and ERP status in orders
  6. 3 Jul 2026Sprint 77F&O quotations in the portalVendisto-NG: pages & content builderShop runs on .NET 10
  7. 12 Jun 2026Sprint 76Order e-mails with product imagesVendisto-NG: first modulesZebra scanners in the Scan App
  8. 22 May 2026Sprint 75Maximum order quantitiesRequired product optionsProduct relations from F&O
  9. 1 May 2026Sprint 74Selectable property valuesOrder minimums for representativesOrder lists with quantities
  10. 10 Apr 2026Sprint 73Partial article exportsFree shipping per customerExact Online fallback addresses
  11. 20 Mar 2026Sprint 72Custom content blocksSpare parts pre-filterFaster search bar
  12. 27 Feb 2026Sprint 71Central e-mail serviceWebhooks for order e-mailsConfigurable quote checkout
  13. 6 Feb 2026Sprint 70Message CenterAvailable-to-Promise (ATP)Rabobank OnlineKassa
  14. 16 Jan 2026Sprint 69Spare parts search from BOMStock in the product configuratorNegative stock setting
  15. 29 Dec 2025Sprint 68Components on article group pagesConfigurator keeps your selectionSort by article number
  16. 5 Dec 2025Sprint 67Exact Online dropshipmentTooltips for visual optionsCentral 2FA control
  17. 14 Nov 2025Sprint 66Two-factor authenticationOrdering rights per userOrdering without visible prices
  18. 24 Oct 2025Sprint 65Redesigned address bookDealer locator with mapTrade records to 2BA
  19. 3 Oct 2025Sprint 64More relevant search resultsreCAPTCHA v3Order history by delivery date
  20. 12 Sep 2025Sprint 63Pay.nl integrationSave the basket as order listOrder users tracked in NAV
  21. 22 Aug 2025Sprint 62Flexible group overview layoutStock display limitRead more for long descriptions
  22. 1 Aug 2025Sprint 61Mandatory supplementsRecupel and Bebat feesCountry-specific surcharges
  23. 11 Jul 2025Sprint 60Structured data for SEOOrders to external endpointsDeposit and disposal fees
  24. 20 Jun 2025Sprint 59Classification page layoutsAuthorizations on propertiesOption to hide prices
  25. 30 May 2025Sprint 58Search and filter order historyPackaging units in one groupOData for order history
  26. 9 May 2025Sprint 57Variant selection in tilesSimpler packaging unit setupConsistent Quick Order cards
  27. 18 Apr 2025Sprint 56Personalized contentStock display per user typeView button for components
  28. 28 Mar 2025Sprint 55Dependable bundled productsChannable feed file namesEasier related products
  29. 7 Mar 2025Sprint 54Filter on customer pricesFinnish webshop languagePrice filter with quantity discounts
  30. 14 Feb 2025Sprint 53New empty basket pageCustomer discount in totalsExact match search
  31. 24 Jan 2025Sprint 52Classifications per shopFilter on customer pricesPrice lists expire automatically
  32. 13 Dec 2024Sprint 51Item chargesItem charges in the ERP orderMinimum order value per customer
  33. 22 Nov 2024Sprint 50Delivery and pickup schedulesPIM sync across shopsCustomer minimum quantities
  34. October 2024Release 2024.10Products in multiple categoriesMulti-classification Excel exportUntranslated classifications exported
  35. September 2024Release 2024.09Custom lists in VendistoBetter Google sitemapsAutomatic quantity adjustments
  36. August 2024Release 2024.08Instant stock exportBundle stock in Exact OnlineAutomatic price lists
  37. July 2024Release 2024.07Prices incl. or excl. VATVAT labels on pricesAssortment per price list
  38. June 2024Release 2024.06Automatic vouchersPayment methods per countryTrack & trace in the portal
  39. May 2024Release 2024.05Webhooks in Shop ManagerShipping cost rulesArticle weight field
  40. April 2024Release 2024.04Stock webhooksTranslated asset labelsTranslated classifications

Sprint 82

October 16, 2026

This sprint brings the Promotion Builder to Vendisto: design your own promotions from seven templates, from product and order discounts to free products, cross-sell offers and loyalty credit, with discount codes, a simulator to test every promotion in advance and a dashboard that shows how promotions perform.

Vendisto-NG gained modules for orders and customers, bulk imports and exports, dealer management and a built-in assistant for business questions.

This sprint makes product configuration on article group pages considerably more dependable. The article selection wizard and component selection now work together smoothly, with correct prices, quantities and basket contents.

Customers find what they are looking for faster thanks to more accurate search results, and logged-in customers can request a quote without retyping details the webshop already knows.

On the integration side, Exact Online price and article synchronization has become more robust for large assortments, and discount agreements from Microsoft Dynamics 365 F&O are synchronized completely.

Behind the scenes, we expanded the automated regression tests for product configuration, search, order history and order quantities, and upgraded the Account API to .NET 10.

With the new Promotion Builder in Vendisto-NG, you design your own promotions, without a developer. Every promotion combines conditions (when does it apply), an action (what does the customer get) and limits (how long it runs and how often it can be used).

Start from one of seven ready-made templates:

  • Product discount: a percentage or a fixed amount off selected articles, article groups or categories.
  • Buy X, get Y: for example three for the price of two, or a discount on every third item.
  • Order discount: a discount on the whole order, including tiered discounts that grow with the order total.
  • Fulfillment discount: a discount for a chosen delivery or pickup method.
  • Free product: the customer receives or chooses a gift once a threshold is reached, optionally in tiers.
  • Cross-sell discount: buying product A gives a discount on product B, or on all related articles such as accessories.
  • Loyalty credit: customers build up spendable credit based on what they buy, which is used automatically once it reaches a threshold.

Promotions can be targeted precisely: by price list, customer profile or customer number, by minimum quantity or amount, by delivery method or for a first order. Any condition can be reversed, for example to exclude a clearance category. A promotion applies automatically or with a discount code: single codes, codes generated in bulk or a personal code for every customer, with limits per code and per customer and a CSV export. Start and end dates, usage limits, priorities and stacking rules determine what happens when several promotions apply at the same time.

Before a promotion goes live, the simulator calculates it for a test basket, a customer and a date of your choice, using the same promotion service as the webshop. It shows which promotions apply, the discount per line and why other promotions do not, including tips such as how much more a customer needs to spend. The usage dashboard shows how often each promotion is used, the discount granted, every redemption and the loyalty balances per customer, and reveals active promotions that never apply.

Promotions are set up and tested in Vendisto; customers will see them in the webshop once the webshop integration is released.

Development of Vendisto-NG, the next generation of the Vendisto back office, continued with a strong focus on day-to-day operations:

  • Orders: an order overview with status filters, and order details with order lines including variant information.
  • Customers: a customer overview with tabs for general information, addresses, authorizations, commercial terms such as payment conditions and buying on credit, and orders. Customers can be created, blocked and activated, and users can be created and managed, including setting a password and changing their status.
  • Bulk operations: start imports, exports and synchronizations from one screen, with upload, download and progress feedback, and direct links from the relevant dashboards.
  • Dealers: manage dealer locations, with map positions based on OpenStreetMap.
  • Product properties: add a property directly from a product or variant.

The highlight of this sprint is the built-in assistant. Users ask questions in plain language, such as what the stock and customer price of an article are, what a customer ordered recently or which products sell best, and get answers based on live data from customers, products, stock, prices and orders. The assistant only uses actions the user is authorized for, and is protected by a monthly usage limit and rate limiting.

Article group pages can combine the article selection wizard, where customers choose a variant step by step, with component selection, where they add matching parts or accessories (setting UseComponentSelection). This sprint makes that combination considerably more dependable:

  • The chosen article and all selected components are added to the basket together, with the correct quantities and prices.
  • Only components that belong to the selected article end up in the basket, also after switching between articles.
  • Component prices take the VAT display switch, the ordered quantity and stock information into account.
  • Reloading or sharing a page with a preselected article restores the matching component selection.
  • As long as no article has been selected, a clear message asks the customer to choose one, instead of an empty component list.
  • Default selections, deselection and the page URL behave consistently in every wizard Mode, and ordering stays disabled until a valid article is selected.

Products that are sold on request show a Request quote button. Logged-in customers still had to fill in the complete request form, including details the webshop already knows about them.

For logged-in customers, the quote request form is now prefilled with their known details, so they no longer have to re-enter information to ask for a price. The quote button also works reliably on the article page, just as on overview pages.

Search is often the fastest route to the right article. Several improvements make the results more dependable:

  • Search results follow the sort order the customer selects, such as price or name, while relevance still determines which articles match the search term.
  • Searching for a complete article number shows that article, not another product from the same group.
  • Moving to the next page of a filtered overview opens the page as expected.

Three improvements make the Exact Online integration more dependable, especially for larger assortments:

  • Prices are linked through the item itself rather than through the item code stored on the price line, so prices and price list authorizations stay correct after an item code has changed in Exact Online.
  • Article exports with many sales price lists and volume discounts complete without timeouts.
  • The initial synchronization of a new environment loads warehouse data first, so items synchronize without errors.

Synchronization has also become faster and more robust: changes are processed in chronological order, and a sync only records its progress once updates and deletions have succeeded.

Webshops depend on complete and consistent data from the ERP. Three improvements close gaps in that exchange:

  • Microsoft Dynamics 365 F&O: the synchronization of discount agreements no longer skips records, so the full set of agreements is available in the webshop.
  • ERP cache: order history imports no longer stop on unusual date values, so every order appears in the customer's order history.
  • Shoxl REST integrations: payment cost lines, such as a cash on delivery fee, include their article number in the order sent to the ERP.

A series of improvements keeps everyday ordering running smoothly:

  • In webshops that use the Calculate Order flow (LimitOrderCalculation), discounts calculated by the ERP remain visible in the basket after recalculation.
  • When drop shipment is used for alternative delivery addresses, orders with such an address are sent to the ERP as drop shipments again.
  • The preferred delivery date in the checkout form is validated correctly.
  • In the order history, orders can be expanded and reordered from every page, not only the first.
  • The robots.txt file for search engines is always served correctly.

Some accounts have no registered default delivery address, for example accounts that order for a location while the invoices go to another account. For these users, switching between pickup and delivery in the checkout could make the order fail, and orders could end up on the wrong account in the ERP.

Orders from these accounts are now processed correctly and placed for the account that actually ordered. Pickup orders work for users without a delivery address as well, and the order confirmation shows the pickup location, or the address of the merchant, as the delivery address.


Sprint 81

September 25, 2026

This sprint makes online payments and order processing more robust. Payment status reported by the payment provider is kept up to date on the order in Vendisto, a payment that is retried after a cancellation continues with the same order instead of creating a new one, and orders that may only reach the ERP after payment are passed on as soon as the payment succeeds.

Development of Vendisto-NG accelerated, with the management interface for the new promotion engine, widget-based dashboards, complete classification and product management, and new modules for downloads and notifications.

For Microsoft Dynamics 365 F&O, webshop orders now reuse the customer's existing addresses in the ERP, and synchronization handles large volumes better, from gross prices per company to order history and order exports. Checkout gained a dedicated dropshipment delivery schedule. Synchronization can now also run incrementally through the Data Management Framework (DMF) of F&O.

With the webshop now running on .NET 10, we also resolved a series of issues found after the upgrade and expanded automated regression testing of the complete order and payment flow across the supported payment providers.

Online payments do not always succeed at the first attempt. Customers cancel a payment, switch to another payment method or go back to the basket to change something, while payment providers report the outcome in the background.

The order and payment flow has been reworked to handle these situations reliably:

  • One order per checkout: when a payment is cancelled and the customer tries again, the webshop continues with the same order and order number instead of creating a new one. A different payment method and updated totals are applied to that order.
  • Payment status in Vendisto: status updates from the payment provider are stored on the order in Vendisto, so each order shows its current payment status.
  • ERP after payment: in webshops that only pass paid orders to the ERP (PlaceOrderMode set to PayBeforePlaceOrder), the order is sent to the ERP as soon as the payment succeeds. Orders that have already been passed on are never sent again.
  • No duplicate submissions: a basket that has already been ordered can no longer be submitted a second time from another session.
  • Payment surcharges: percentage-based payment surcharges are calculated consistently over articles and shipping costs, and the PaymentDiscountExcludeShippingCosts setting is applied correctly.

The result is a cleaner order administration, with fewer orphaned or duplicate orders and payment information that matches what customers actually paid.

A large number of modules came together in Vendisto-NG, the next generation of the Vendisto back office:

  • Promotion engine: a management interface for the new promotion engine, with tiered discounts, loyalty credit, cross-sell offers and gift promotions, a simulator to test promotions in advance, and a promotions dashboard.
  • Widget-based dashboards: personal dashboards built from widgets that can be added, dragged and resized, multiple dashboards per user, and widgets for content, navigation, knowledge and Google Analytics insights.
  • PIM: classification management (structure, properties, media, content and authorizations), and creating and editing products and variants, including related articles and product status.
  • Content: a drag-and-drop page tree, and new modules for downloads and notifications.
  • Usability: tabs indicate when they contain unsaved changes, and save buttons are disabled instead of hidden.

Warehouses often combine shipments that go to the same address. That only works when orders refer to the same address record in the ERP. Webshop orders sent to Microsoft Dynamics 365 Finance & Operations, however, created a new address record for every order, even when the customer had chosen one of their existing addresses.

Addresses synchronized from F&O now carry their F&O address reference, and webshop orders pass this reference along. F&O links the order to the existing address instead of creating a new one, so shipments to the same address can be consolidated again. Order-specific delivery addresses entered in the checkout are still sent as one-off addresses.

Retrieving large data sets from Microsoft Dynamics 365 Finance & Operations through OData means requesting data page by page over the network, subject to throttling. For large assortments that takes time and puts load on both systems, and every run starts again from the full data set.

The integration can now use the Data Management Framework (DMF) of F&O, with recurring integrations. F&O exports the data in its own batch process, set-based inside the database, and places the result in a queue that the integration picks up. Thanks to change tracking, only changed records are exported.

The benefits:

  • Incremental instead of full: only changes are transferred, so synchronizations finish much faster and data in the webshop is more current.
  • Scalable: the heavy work happens inside the F&O database instead of over the network, without paging or throttling, also for very large assortments.
  • Lighter for F&O: slim, dedicated data entities with only the fields the webshop needs, exported on the own schedule of F&O.
  • Reliable: data packages are processed idempotently and only acknowledged after successful processing, so nothing gets lost when a run is interrupted.
  • Standard Microsoft technology: DMF is the data framework that F&O partners already know, which makes onboarding new environments straightforward.

The output for Vendisto and the webshop remains the same, so existing processes continue to work. DMF is available for articles, attributes and contacts.

Large Microsoft Dynamics 365 Finance & Operations environments combine several companies, hundreds of thousands of orders and extensive product data. Several synchronization and export steps have been reworked to handle these volumes reliably:

  • Gross prices per company: gross prices are synchronized separately for each company (data area). An issue in one company no longer blocks the others, each company appears as its own step in the synchronization overview, and individual companies can be skipped or excluded. The gross price export now also contains each article only once per company.
  • Order history: only orders that changed since the previous run are synchronized, now also when the change is in the order lines, and very large initial exports are processed in stable batches.
  • Order and related-article exports: large exports use far less memory and no longer time out.
  • Product images: image archives are exported with consistent file names, so they are always recognized during import.
  • Customers: duplicate users and representatives are filtered out of the customer export.

Product images from Microsoft Dynamics 365 Finance & Operations were stored in the integration database and processed again with every article export. For large assortments, that made exports heavy and memory-intensive.

Images are now exported in a step of their own (ArticleImage) and stored as files instead of in the database. Article exports no longer process every image and run with far less memory. At the same time, the export consistently includes every image marked as a product image in F&O, with the default image first.

Orders shipped directly to an end customer (dropshipment) often follow a different delivery planning than regular deliveries to the customer's own address.

Delivery schedules now support a separate Dropshipment schedule type. When a customer selects an alternative delivery address in the checkout, the webshop automatically applies the dropshipment schedule, so the available delivery dates match the way the order will actually be shipped.

Customers can have their own VAT code in Exact Online. When such a customer-specific VAT code was removed in Exact Online, Vendisto kept the old value.

Removing a customer-specific VAT code in Exact Online now also clears it in Vendisto during the customer import, so VAT is applied according to the customer's current settings.

Product data and customer teams rely on imports to keep large data sets up to date. Several imports have been made more robust:

  • Related articles: imported relations are always saved and appear in the shop.
  • Customers: large customer imports with many addresses and users are written in smaller batches, supported by additional database indexes, which prevents time-outs.
  • Synchronization: article groups no longer receive a URL that belongs to the history of another article group, and price data for article numbers containing a slash is cleaned up correctly.

Product content is prepared as a file before it is processed further, for example into a marketplace feed. When retrieving the content produced an empty file, that file could replace the one already prepared, resulting in an empty feed.

The size and content of retrieved product data are now validated before anything is written. Empty or incomplete content never replaces an existing file, so feeds keep their last valid content.

Spare parts lists can include parts that are not sold as separate products in the webshop. These parts were shown without an image.

Spare parts now use the image references stored with the assembled product, so every part in the list can be recognized at a glance. Paging through long spare parts lists works correctly again as well.

Two emails show more complete information:

  • Quote confirmations include the gross price and discount per line again, so customers see the advantage they receive.
  • Account registration emails use the invoice address as delivery address when the applicant did not enter a separate delivery address.

A set of improvements helps customers enter their orders correctly:

  • The requested delivery date is validated on both the page and the server, invalid or past dates are rejected, and the error message explains what to change.
  • When accepting the terms and conditions is required, an order can only be placed after the box has been checked.
  • Article names no longer show empty brackets when an article has custom order fields that were left empty.
  • Quantities in order lists can be set back to zero, so a line can be left out when the list is added to the basket.

Since the webshop moved to .NET 10, a number of details were found that did not yet work as before. These have been resolved:

  • Switching the language keeps the selected language on every page.
  • Image galleries show the images of all variants again, and product overview pages load without errors.
  • Payment method icons are displayed in the checkout, and payments through Stripe complete normally.
  • Selecting a subcategory in the category filter shows the matching products.
  • Pages with tabs, the order history layout and the search results for pages, news and knowledge articles display correctly.
  • User-specific settings, such as order mode, stock display, delivery cost thresholds and available payment methods, are applied per user again.
  • Web service responses for OData queries are returned correctly.

Sprint 80

September 4, 2026

This sprint makes every webshop order visible in Vendisto from the moment it is placed. Orders are now recorded during checkout, before they reach the ERP, so orders that are still awaiting payment no longer disappear from view.

Development of Vendisto-NG continued with refined product pages and design improvements.

The Microsoft Dynamics 365 F&O integration takes a big step forward. Customers can now confirm F&O quotations and request changes online, return orders from F&O are available in the customer portal, and synchronization has become more complete and dependable, with real-time prices taken from the customer's own company and discount percentages matched to the ERP down to six decimals.

Search engines now see one page per product family, quote request emails can be sent to a dedicated address, and a new bulk customer import handles large customer files quickly.

Webshop orders used to reach Vendisto only once they had been sent on to the ERP. In webshops where customers pay online before the order is placed, an order that was started but not (yet) paid was not visible in Vendisto at all, which made it hard to follow up on unfinished payments.

The webshop now creates every order in Vendisto during checkout, before it is sent to the ERP, including orders that are still awaiting payment. Each order shows where it stands: whether payment has been received and whether the ERP has picked it up.

When payment must be completed before the order is placed (setting PlaceOrderMode), recording the order in Vendisto does not send it to the ERP early. Repeated checkout attempts, payment returns or payment notifications never create duplicate orders in Vendisto or the ERP.

Work on Vendisto-NG, the next generation of the Vendisto back office, focused on refining the new product management screens, so product data teams can work faster in the new back office:

  • Product information: a redesigned product overview, and new media, properties and variants tabs on the product detail page.
  • Design: refreshed layouts for the pages and properties screens and the content builder frame.
  • Dashboard: amounts are shown in the correct currency.

Customers who send goods back want to know where their return stands. For webshops connected to Microsoft Dynamics 365 Finance & Operations, return orders were not yet available in the customer portal.

The return orders overview in the customer portal now shows return orders straight from F&O. For each return order, customers see the return order number, their own reference, the status and the return deadline, and per line the item, description, quantity, unit and status.

The overview is available to users with the Returns right and uses a responsive layout that works well on mobile devices.

Organizations with large assortments and multiple companies in Microsoft Dynamics 365 Finance & Operations rely on the integration to keep thousands of articles, prices and customers in sync. This sprint brings a series of improvements to make that synchronization more complete and dependable:

  • Complete full synchronizations: large result sets are paged correctly, duplicate rows in article exports are prevented, and article details are synchronized independently of each other.
  • Exact discount percentages: discount percentages are stored with up to six decimals, so calculated prices match F&O exactly.
  • Real-time prices from the right company: price requests now take the customer's company into account.
  • More control: individual entities can be skipped during a synchronization run, and the order language mapping can be configured.

When product variants are bundled on one product page, search engines could still find and index the individual variant pages through the sitemap. Those pages then competed with the main product page in search results.

The sitemap now lists only the main product pages, and variant pages refer to their main product with a canonical URL. Search engines concentrate on one page per product family, while variant links keep working for visitors. When a product has only one active variant, that variant page remains its own canonical page.

Since Sprint 77, customers working with Microsoft Dynamics 365 Finance & Operations can view their quotations in the customer portal. They can now also act on them:

  • Confirm a quote directly from the overview or detail page. Confirming asks for a final confirmation first, so a quote is never accepted by accident, and the confirmation is registered in F&O. Expired quotes cannot be confirmed.
  • Request a change for quotes that are open for changes. This opens an email with the customer number and quotation number already in the subject line, addressed to the recipient set in RequestChangeEmailAddress.

Each action is only enabled when it applies to the quote. The overview columns Confirm and RequestChange can be added as needed.

Quote requests submitted in the webshop were always emailed to the general shop manager address, while many organizations handle quotations in a separate team.

In the Vendisto email settings, quote request emails can now be sent to a dedicated address, with additional BCC addresses, in the same way as quote emails. Without a dedicated address, the shop manager receives them as before. The settings are vendisto:QuoteRequestShopManagerEmailAddress and vendisto:QuoteRequestShopManagersBCC.

Organizations with a large customer base regularly import thousands of customers and users at once, which could take a long time with the standard customer import.

Vendisto now offers a bulk customer import, comparable to the bulk article import. It processes the file in batches, with faster lookups and password handling, keeps memory use under control and reports its progress per phase. Customers are identified by their debtor number. The bulk import is enabled with vendisto:EnableCustomerDataBulkImport; the existing customer import remains available unchanged.

With very large asset libraries, the article import could time out while linking imported articles to their existing images and documents. This step now uses an efficient lookup, so large article imports run to completion.

The price list export for Exact Online could stop with an error when the same item appeared more than once in the stock positions retrieved from Exact. Duplicate entries are now filtered out, so price lists keep synchronizing.

Webshops can allow businesses and schools to order on account as a guest. When such an order is placed, an account is created in Exact Online automatically. That new account did not receive a payment condition, so the same customer could suddenly no longer order on account after logging in as a regular customer.

With the new setting DefaultB2BPasserByAccountPaymentConditionCode, automatically created business accounts receive the configured payment condition right away. Customers keep the same payment options for every following order, without manual changes in Exact Online.


Sprint 79

August 14, 2026

This sprint gives webshops more control over the add-to-basket experience. Feedback can now be configured separately for desktop, tablet and mobile, including a new compact animation inside the order button that keeps customers in their ordering flow.

Development of Vendisto-NG moved into product information management, with new screens for products and variants, catalogue settings and property management.

Large B2B buyers can now order through their procurement system with cXML PunchOut, the standard behind platforms such as SAP Ariba and Coupa.

For Microsoft Dynamics 365 F&O, discount percentages from the ERP's order calculation now appear on basket lines, and article synchronization follows the export visibility set in F&O, so the online assortment stays aligned with the ERP.

For Exact Online, the invoice history in the customer portal is now complete and includes a PDF of every invoice. Online payments now store the payment reference with every order, the quote request form collects more company details, and the Vendisto customer export shows when each user last logged in.

With webshops moving to the new .NET 10 version of the shop, we also resolved a number of follow-up points to keep the transition smooth.

When a customer adds a product to the basket, the webshop confirms it, for example by opening the side basket. On a phone, that side basket covers the whole screen and has to be closed every time, which slows down customers who order many lines in one session.

The add-to-basket feedback can now be set separately for desktop, tablet and mobile with FeedbackTypeDesktop, FeedbackTypeTablet and FeedbackTypeMobile. When no device-specific value is set, the general FeedbackType applies, so existing configurations keep working.

A new feedback type, ButtonBlink, shows a short confirmation animation with a checkmark inside the order button itself, after which the button returns to normal. Customers get clear confirmation without leaving the page or closing a panel, which makes it a natural choice for fast ordering on mobile.

Product information management arrived in Vendisto-NG, the next generation of the Vendisto back office:

  • Products: overviews and edit pages for article groups and their variants, including classification and properties, with saved grid settings.
  • Catalogue settings: overviews and edit pages for units, property categories and related article types.
  • Properties: create, edit, delete and reorder properties, with multilingual values (including copying from the main language), units, icons, authorizations and dedicated inputs for yes/no and list values.
  • Assets: drag and drop assets onto products, and see which assets in the library are already in use.

Many large B2B buyers order through an e-procurement system such as SAP Ariba or Coupa. Their employees start in that system, pick products from supplier catalogues and send the result through the internal approval flow. Shoxl already supported this with OCI PunchOut.

The shop now also supports cXML PunchOut, the standard used by most procurement platforms:

  • the procurement system opens a shop session with a PunchOut setup request, and the user is logged in automatically;
  • the user shops with their own assortment, prices and conditions;
  • at checkout, the basket is returned to the procurement system as a PunchOut order message, ready for internal approval and the purchase order.

Each procurement system is registered as a client with its own identity and a securely hashed shared secret (CxmlPunchOut.Enabled and CxmlPunchOut.Clients). A test tool that simulates the procurement side is available for setting up and testing new connections.

In webshops that calculate orders in Microsoft Dynamics 365 Finance & Operations, the ERP determines customer-specific discounts per order line. Customers saw the resulting net price, but not the discount behind it.

The order calculation now also returns the discount percentage per line, and the new basket layout element DiscountPercentage displays it, for example: Price including 15% discount. Lines without a discount show nothing extra. The text is available in all webshop languages.

A Microsoft Dynamics 365 Finance & Operations environment usually contains many more items than the webshop should offer. Keeping the online assortment exactly in line with the items released for the webshop in F&O required regular manual checks.

The F&O integration now uses the export visibility of articles in F&O as a filter:

  • full exports contain only articles that are visible for the webshop, and visible articles that are still missing are synchronized automatically first;
  • partial exports remove articles from the webshop as soon as they are no longer visible in F&O;
  • the integrity check of the integration cache gives more specific advice when differences are found.

The new integration engine (V2) is now the only version, and it gained an export preview to check what an export will contain before it is sent, a page size per synchronization profile for large F&O queries, a step-by-step mode for diagnosing synchronizations, and delivery address names taken from the address description in F&O.

The webshop assortment follows the choices made in F&O, without manual corrections.

For orders paid online, the reference of the payment provider is the key to matching payments with orders. This reference was not always stored with the order.

The webshop now stores the payment reference for all supported payment providers, including Mollie, Pay., Stripe, MultiSafepay and Rabo OmniKassa, and includes it in the order data. Finance teams can match incoming payments to orders without searching.

Customers use the invoice overview in the customer portal to check and download their invoices. For webshops connected to Exact Online, the invoice history in the portal did not always match Exact.

Invoices are now synchronized through the current Exact Online interface, ahead of Exact retiring its older XML interface, and the PDF of each invoice is included. The invoice history in the portal is complete, matches Exact Online and offers every invoice as a PDF.

In Belgium, many products carry a mandatory environmental contribution, such as Bebat for batteries or Recupel for electrical and electronic equipment. These fees must be shown and charged separately from the product price.

For webshops connected to Microsoft Dynamics NAV, the real-time price calculation now retrieves the environmental fees that apply to each article and returns them as separate cost lines. Customers see the correct fees per product, and the order total matches the ERP.

A quote request is often the first contact with a new business customer. To prepare a quote, sales teams regularly had to ask for basic company details afterwards.

The quote request form now also asks for the Chamber of Commerce number, address, postal code, city, customer number and salutation. These details are included in the quote request email, so the sales team can respond right away.

Vendisto shows per user when they last logged in to the webshop, but this information was not part of the customer export.

The customer Excel export now includes a Last Login column for every user. Account managers can quickly see which customers actively use the webshop and which ones might need a reminder or some help getting started.

As webshops move to the new .NET 10 version of the shop, this sprint resolved a number of follow-up points so that everything keeps working as customers are used to:

  • the advanced order history in the customer portal loads and displays correctly;
  • static lists placed on content pages are shown again;
  • payment status updates from Pay. are processed correctly;
  • logged-in users stay logged in when a new version of the webshop is deployed. The location of the security keys involved can be set with shoxlpro:DataProtectionKeysPath.

Several smaller improvements make ordering and browsing more dependable:

  • In the order grid, variants that come in a single size can be selected and ordered for every color.
  • Sales representatives who log in on behalf of a customer that has never logged in before can browse categories right away.
  • News items whose title starts with a language code, such as en or fr, get a correct URL.

Improvements in Vendisto for content and product data management:

  • The page overview shows the site structure again, and the display order of pages within a navigation can be changed.
  • The Position products dialog for classifications no longer shows deleted products and article groups, so the order of the remaining items is easy to manage.
  • The import of assembled products processes its files reliably again.

Sprint 78

July 24, 2026

This sprint introduces Translato, a translation workspace connected directly to Vendisto. Translatable product and content data is loaded in one step, missing translations are filled in with AI engines such as DeepL, and every suggestion can be reviewed and approved before it is published back to Vendisto.

Development of Vendisto-NG continued with a new import/export module, a translation module, a fresh look in light and dark mode, an improved home dashboard and an audit trail that shows who last edited an item.

Order management in Vendisto takes a clear step forward. The order overview now shows payment method, payment status and ERP sync status, so orders that were not paid or did not reach the ERP stand out immediately. Orders also record their currency and source, and dashboard figures can be shown in one display currency.

The new engine of the Microsoft Dynamics 365 F&O integration gained targeted synchronization and export, synchronization of return orders and an integrity check with repair options.

In the webshop, order lists now accept decimal quantities, online payments work smoothly for pickup orders, and several smaller refinements make ordering and logging in more dependable.

Translating product data used to mean exporting a separate Excel sheet for every entity type and language, filling them in and importing them again. For a webshop with one source language and five target languages, that quickly adds up to dozens of files per round.

Translato replaces this with one workspace that connects directly to Vendisto:

  • Fetch: all translatable content for the configured languages is loaded from Vendisto in one step.
  • Auto-translate: empty translations are filled with AI suggestions from DeepL or Claude.
  • Review: translations can be filtered by entity, language, field and status (not translated, AI concept, user concept, translated) and approved one by one or in bulk.
  • Publish: approved translations are written back to Vendisto.

Translato opens from a new menu entry in Vendisto and uses the Vendisto login. It is enabled per environment with the vendisto:TranslatoUrl setting; the source language is set with vendisto:SourceLanguageId.

Vendisto-NG, the next generation of the Vendisto back office, made big steps this sprint:

  • Import/Export module: one place for all import and export tasks, with grouped settings per module, separate steps for import and export, and settings shown according to user rights.
  • Translation module: translate content with pluggable translation engines, directly from the back office.
  • New look: a new theme in light and dark mode, a redesigned login page, a collapsible side menu with fly-out navigation and a consistent page header on all edit pages.
  • Home dashboard: KPI cards with trends, a period selection, an improved sales chart and a bar chart of the most popular products.
  • Audit trail: pages show who last edited an item.
  • Content builder: a renewed, more spacious interface with ready-made page blocks.
  • Bulk actions for news and knowledge items, and quick filters on publication status in overviews.

When online payment is required before an order may be sent to the ERP, an unpaid order never reaches the ERP. Customer service had little to go on: the order overview in Vendisto did not show how an order was paid or whether it had been transferred.

The order overview has been redesigned around the information customer service needs. Next to order number, date, customer and total, it now shows:

  • the payment method and payment status, so unpaid online payments stand out;
  • the ERP sync status, showing whether the order has reached the ERP;
  • the currency, order status and delivery method.

Columns that were no longer relevant have been removed, and the order and order line screens have been tidied up accordingly. Every order now also records its source, the channel it came from. The webshop sends this with each order (setting OrderSourceName, default Shoxl Webshop), and existing orders have been updated retroactively.

Webshops that sell in several currencies need to know in which currency each order was placed, and want sales figures they can compare.

Vendisto now stores the currency of every order and shows it in the order overview and order details. Dashboard figures are converted into one display currency, set with vendisto:DisplayCurrency, using daily reference exchange rates that are refreshed automatically.

The new engine of the Microsoft Dynamics 365 Finance & Operations integration was extended with tools that give administrators more control and keep large environments running smoothly:

  • Targeted synchronization and export: synchronize or export specific articles, including their related data, or run several actions at once, without a full cycle.
  • Returned orders: return orders are now synchronized from F&O.
  • Integrity check: compare the integration cache with F&O and repair differences from a dedicated menu, in several modes.
  • Stock: stock is synchronized in a step of its own, separate from article data.
  • Stability: memory leaks during long runs have been fixed.

Products sold by weight or length are often ordered in decimal quantities, such as 2.5 kg. Order lists, however, only saved whole numbers.

Order lists now save decimal quantities, and a quantity of zero can be saved as well. Adding a product to an order list also no longer shows an unnecessary second confirmation window.

Customers who chose to pick up their order and paid online, for example with iDEAL, could not complete the order: the payment step failed because the order had not been created yet. Cancelling a payment also switched the delivery method back from pickup to delivery.

Pickup orders can now be paid online without issues, the chosen delivery method is kept when a payment is cancelled, and switching between pickup and delivery in the checkout form works consistently.

Users can be set up without the right to place orders, for example to browse the assortment and view prices only. Product tiles in overviews could still show an order button for these users.

Order buttons on product tiles now follow the same restriction as the rest of the webshop, so users without ordering rights no longer see them.

When the article selection wizard pre-selects a variant, the product image should match that variant. In some cases a broken image could appear, or the image and gallery did not follow the selected variant.

The wizard now updates the main image, the zoom link and the image gallery to the first image of the selected variant, and no longer shows a broken image.

After a sales representative logged out without selecting a customer, the next user to log in on the same device could land on the sales representative overview, even without representative rights.

The representative page is no longer used as a return address after login, so every user lands on the page that belongs to their own account.

In webshops that do not use Google Tag Manager, a script in the payment step could fail because a tracking object had not been initialized. The checkout now runs without script errors, whether or not Tag Manager is configured.


Sprint 77

July 3, 2026

Customers working with Microsoft Dynamics 365 F&O can now view their sales quotations in the customer portal. Quotes are retrieved in real time from the ERP, with all lines, totals and reference details, right next to their orders.

Development of Vendisto-NG continued with a complete pages module, including site navigation and the integrated content builder.

This sprint also marks a major technical milestone: the Shoxl shop now runs on .NET 10, Microsoft's current long-term support platform. Webshops get a faster and more secure platform, with security updates from Microsoft until November 2028, while the shop works exactly as before.

The F&O integration now runs on a rebuilt engine that links orders to the ordering contact and email address, creates new customers reliably and synchronizes faster and more reliably. A single failing entity no longer stops a synchronization, and product images synchronize separately from article data. For Exact Online, selecting customers by account classification is no longer sensitive to capitalization.

Smaller refinements include quote request forms that are prefilled with account details, correct shipping costs when customers switch delivery addresses, and reliable order export for custom order fields with spaces in their name.

Many B2B customers receive a quotation before they order. For organizations working with Microsoft Dynamics 365 Finance & Operations, those quotations lived in the ERP and in email, separate from the customer portal where customers manage their orders.

The quote overview and quote detail pages in the customer portal now show sales quotations straight from F&O, retrieved in real time. Customers see each quote with its quotation number, description, customer requisition number, dates, status, addresses, lines and totals, right next to their orders.

The overview columns CustomerRequisitionNumber and Description can be added as needed, and IncludeExpiredInOverview determines whether expired quotes are listed.

The connection is built on a generic quote service, so other ERP systems can be connected in the same way. The connector is selected with ShoxlConnectorModuleForQuoteDataService.

The pages module of Vendisto-NG, the next generation of the Vendisto back office, is now in place:

  • Pages: an overview of all pages with a grouped view, and an edit page that adapts to the page type, including template selection.
  • Navigation: manage the site navigation in a tree structure, including the classification-based parts of the menu.
  • Content builder: the drag-and-drop content builder is integrated into page editing, and HTML is wrapped automatically so content can be edited right away.

Since its launch, the Shoxl shop has run on Microsoft .NET Framework. That platform only receives maintenance fixes: no new features, no performance work and a shrinking choice of modern libraries.

The shop has now moved to .NET 10 and ASP.NET Core, Microsoft's current long-term support release. This sprint completed the migration of the web application itself, building on earlier sprints in which all shop libraries were made compatible. Every part of the shop, from the home page and catalogue to the basket, checkout and customer portal, was tested on the new platform.

What this means for webshops:

  • Security: .NET 10 receives security updates from Microsoft until November 2028, and the shop now uses the security building blocks of ASP.NET Core, such as its data protection and authentication framework. Vulnerabilities in the platform are fixed quickly through regular updates.
  • Performance: the shop benefits from years of performance work in the modern .NET runtime and the ASP.NET Core web server, which handle requests faster and with less memory than the legacy framework.
  • Future-proof: current libraries and tools are available again, which speeds up the development of new features.

For users, the shop works exactly as before, on a faster, safer and supported foundation for the years ahead.

The F&O integration synchronizes many entities in a single run, such as articles, prices, discounts and product attachments. When one of them returned an error, the whole synchronization stopped, so unrelated data such as line discounts was not updated either.

A failing entity is now logged and skipped, and the synchronization continues with the rest. In addition, product images are synchronized in a step of their own, separate from article data. This keeps the regular article synchronization lighter and allows images to be refreshed on a separate schedule.

The Microsoft Dynamics 365 Finance & Operations integration now runs on a rebuilt engine (V2), designed for large environments with several companies. It synchronizes faster, recovers better from errors and gives administrators more control. This sprint's improvements include:

  • Who ordered: orders are linked to the ordering contact, matched per customer and company, and the email address of the person who placed the order is added to the order header.
  • Customers: new customers are created reliably, also when no sales tax group or payment condition is set, and the customer's language is passed on with customers and orders.
  • Faster, more stable synchronization: better performance and stability for large data sets, with integrity checks and clearer feedback during a run.
  • Safe operation: the integration cannot run twice at the same time, long runs can be stopped cleanly, and it can run unattended in headless mode.

Customers and sales representatives can request a quote from the basket. The quote request form asked them to enter all customer details again, even though these were already known for the logged-in account.

The form is now filled in automatically with the details of the logged-in account. When another user logs in, the stored form is cleared, so the details of a previous user are never shown.

With drop shipment to alternative delivery addresses enabled (DropShipmentOnAlternativeAddress), choosing an alternative address changes the shipping method and its costs. When a customer then went back and chose their primary address after all, the drop shipment costs remained.

The shipping method now follows the address that is actually selected, so customers always see the shipping costs that apply.

The Exact Online integration can select which accounts are exported to the webshop based on their account classifications (WebshopCustomerAccountClassifications). Classification codes were compared case-sensitively, so a small difference in capitalization could leave customers out of the webshop.

Classification codes are now matched regardless of upper or lower case, which makes the configuration less error-prone.

Custom order fields let customers add information such as a reference or an instruction to an order line. When the name of such a field contained a space, the order XML for the ERP could not be created.

Field names are now converted to valid names in the order XML, with spaces replaced by underscores, so these orders are processed normally. Keep this in mind when mapping custom order fields in the ERP.


Sprint 76

June 12, 2026

This sprint introduces a new order confirmation email with product images, VAT lines per rate and a more readable delivery date. Online payment pages now open in the customer's own language.

Development of Vendisto-NG continued at full pace, with new modules for static lists, redirects and content blocks.

For B2B assortments, spare parts now respect customer authorizations, the Shoxl Scan App works with Zebra hardware scanners, and VAT number validation applies only to countries that take part in VIES. For Microsoft Dynamics 365 F&O, the availability check can now show expected delivery dates on their own.

We also made ordering more dependable, from bundles with minimum order quantities to order placement itself, and completed the preparation phase of the .NET 10 migration: all shop libraries are now ready for the new platform.

The order confirmation is often the first document a customer keeps after ordering. The new Postmark template OrderConfirmationWithImage shows a product image next to every order line, so customers can check their order at a glance. It also lists the VAT amount for each VAT rate.

Order emails received further improvements:

  • The requested delivery date is now also available in full, including the weekday (for example Monday 1 June 2026), through the new PreferredDeliveryDateFormatted field. Useful for teams that sort incoming orders by delivery day.
  • When a dedicated shop manager address is set for order confirmations, the blind copy goes only to that address. Without one, the general shop manager address is used.

Development of Vendisto-NG, the next generation of the Vendisto back office, continued at full pace. This sprint added three modules:

  • Static lists: create and edit product lists, with multilingual content and autosuggest for articles, article groups and categories.
  • Redirects: create, edit and delete redirects, including redirect types that point to an item rather than a URL.
  • Content blocks: manage reusable content blocks, with quick switching between language versions.

Overviews also gained copy buttons and a shared language filter. Behind the scenes, static lists are now stored in SQL first and then synchronized, for more robust data handling.

Spare parts catalogues help customers find the right components for an assembled product. In assortments that work with authorization profiles, spare parts did not yet take those profiles into account.

Assembled products and their spare parts now respect customer authorizations. An assembled product is only shown when the customer is authorized for every part it contains, and the filter options follow the same rule. Customers see exactly the products they are allowed to order.

The Shoxl Scan App lets users order by scanning products, for example in a warehouse or on site. Many professional environments use rugged Zebra devices with a built-in hardware scanner.

The Scan App now integrates with Zebra DataWedge and recognizes scans from the built-in scanner directly. Each scan is handled as a search, so the scanned product appears immediately, ready to be ordered, without typing.

With VIES validation enabled (EnableViesCheck), VAT numbers entered at checkout or registration are checked against the European VIES service. Customers from outside the EU, for example from Switzerland, could get stuck: their valid VAT number was rejected because VIES does not cover their country.

The check now only applies to countries that take part in VIES. Customers from other countries can register and check out with their own VAT number. Northern Ireland (XI) has been added to the list, which can be adjusted per environment with the shoxlpro:ViesCountries setting.

Customers paying online through Pay. were sent to the payment page in a fixed language, regardless of the language they used in the webshop.

The payment page now opens in the language the customer selected in the webshop, so international customers complete their payment in a language they understand.

The availability check (ATP) tells customers when a product that is not in stock is expected. Some Microsoft Dynamics 365 Finance & Operations configurations provide an expected delivery date without available quantities.

With the new setting DateOnlyMode, the F&O availability check works with the date alone. When F&O reports a future date, customers see it as the expected delivery date, for example Expected delivery date: 22-6-2026. When the date is today, no future delivery is shown. The standard behavior remains available for all other configurations.

Order lists can be imported into Vendisto from Excel. When a file contained the same article number twice, the import stopped with an unknown error that did not say what was wrong.

The import now validates the file and reports exactly which rows contain a duplicate article number. Quantities are checked as well: they must be empty or a valid, non-negative number. Errors can be corrected in the file and the import run again right away.

Repeated imports of large order lists no longer stop with an error, and they finish considerably faster.

After checkout, the webshop hands each order over to Vendisto for further processing. When that processing took longer than usual, the webshop could time out, leaving customers with the impression that their order had failed while it had in fact been received.

The webshop now confirms the order as soon as it has been registered, while Vendisto completes the processing in the background. Customers get their confirmation right away.

Bundles combine a main product with its components. In combination with a minimum order quantity, the components could be multiplied twice, for example 8 × 8 = 64 pieces instead of 8, both in the basket and in order lists.

Minimum order quantities are now applied once, so components follow the quantity of the main product. Order lists include the component prices in the bundle total, and bundles can be ordered without issues when HS codes are configured for customs data (HsCodePropertyId).

A series of improvements makes everyday ordering run more smoothly:

  • The Next step button in the basket is enabled right after typing a new quantity, not only after using the plus and minus buttons.
  • Quantity fields show their default value on page load in all overviews.
  • On mobile, adding a complete order list to the basket updates the basket count and totals immediately.
  • On mobile, the order history shows its column labels in the customer's language.
  • Custom order fields on the article page validate their input correctly, also when the field is required.

Article group pages can combine the article selection wizard, the order grid and selectable product options. When one of these had nothing to show for a product, an empty box could still appear, sometimes together with a basket or login button belonging to the selection wizard.

These elements are now only shown when they contain items. Pages look cleaner, and customers are not distracted by buttons that lead nowhere.

Product properties can be displayed with an icon instead of a text label, with the label appearing on hover. For properties placed in a property category, the icon could be missing, leaving only the text.

Icons now appear for these properties as well, so product specifications look consistent across the page.


Sprint 75

May 22, 2026

This sprint introduces maximum order quantities per article. Webshops can cap how much of a product customers order at once, with clear feedback in the basket, and the limit can be supplied directly from the ERP.

Selectable product options, introduced last sprint, are now ready for everyday use. Options can be made required before a product goes into the basket, presented as single-select, multi-select or dropdown, and shown with icons managed in Vendisto.

The Microsoft Dynamics 365 F&O integration now delivers richer product data, including product relationships and multiple product images, and recovers automatically from temporary connection issues. For Exact Online, article import has become more flexible for portals that work with price list authorization.

A significant share of our development capacity went into Vendisto-NG, the next generation of the Vendisto back office. This sprint it gained a complete knowledge base module, a new home page for news, personal themes and a refreshed look.

We also refined many details of day-to-day ordering, from searching and sorting the order history to VAT reverse charge handling and dependable quantity input. Behind the scenes, we made solid progress on moving the shop platform to .NET 10.

Some products should only be ordered in limited quantities: scarce or allocated stock, items reserved for projects, or articles where unusually large orders call for a personal conversation.

Shoxl now supports a maximum order quantity per article, next to the existing minimum order quantity. When a customer enters a higher quantity, the webshop does not accept it and shows a clear message stating the maximum that applies. If the maximum is lowered later, quantities already in baskets are brought back within the new limit automatically.

The maximum is supplied in the new MaximumOrderQuantity field of the gross price import. For webshops connected to Microsoft Dynamics 365 Finance & Operations, it is retrieved directly from the ERP.

Last sprint introduced selectable property values, letting customers choose predefined options such as color, material or finish for configurable products. This sprint adds the controls needed to use them in daily ordering:

  • Required options: a property category can be marked as required, so a product can only be added to the basket once a choice has been made.
  • Display types: each category can be presented as single-select, multi-select or dropdown.
  • Icons managed in Vendisto: option icons, such as color swatches or material symbols, are maintained as documents in Vendisto.
  • Flexible placement: a dedicated layout element positions the options wherever they work best on the page.

Options with inconsistent product data are simply left out instead of interrupting the page, so a single import mistake never blocks ordering.

Each property category is configured in the webshop setting SelectorPropertyConfigurations (display type, icon prefix and suffix, required), and placed on the page with the SelectorProperties layout element.

Synchronizing with Microsoft Dynamics 365 Finance & Operations involves large volumes of data and many individual requests. A short timeout or a brief service interruption on the ERP side could make a sync run fail, after which it had to start over.

The F&O integration now retries requests automatically when a temporary issue occurs. The number of attempts is configurable with RequestRetryCount. Additional safeguards prevent conflicts when several integration processes update data at the same time.

Synchronizations are interrupted far less often, and product, price and order data stays current without manual intervention.

Accessories, alternatives and spare parts are often already linked to products in the ERP. Making those relationships visible in the webshop meant maintaining them a second time in Vendisto.

Shoxl now imports product relationships directly from Microsoft Dynamics 365 Finance & Operations, through both full and incremental synchronization. Relationships maintained in F&O appear in the webshop as related articles, without duplicate data entry.

As part of this work, the related article import in Vendisto has been revised to process data in batches, which makes it up to ten times faster for large assortments.

Products sell better with more than one picture, yet the F&O integration only transferred the default product image.

All images marked as product images in Microsoft Dynamics 365 Finance & Operations are now exported to Vendisto and the webshop. The default image always comes first, followed by the additional images in their sequence order where one is set.

Image management stays in the ERP, while customers get a complete visual impression of each product.

With price list authorization, customers only see the products on their own price lists. Those products still have to be imported from Exact Online first, which is normally controlled by the Webshop checkbox on the item.

Organizations that also use this checkbox to decide what appears in their public assortment faced a dilemma: marking customer-specific items for import would also make them visible to everyone else.

With the new setting EnableIsWebshopItem set to false, the Exact Online import ignores the Webshop checkbox. All articles that meet the standard import rules are then imported: active, with a VAT code, and part of the configured article group or assortment. Which customer sees which product is determined entirely by their price lists.

Alongside this sprint's webshop and integration work, a significant part of our development capacity went into Vendisto-NG, the next generation of the Vendisto back office. Built on .NET 10, it brings catalogue, sales, content and integration management together in one modern, consistent interface.

This sprint added:

  • Knowledge base module: manage knowledge articles and their categories, including publication dates, starting from a dedicated knowledge home page.
  • News home page: an overview of the news module with shortcuts to filtered lists of news items, plus search in the news overview.
  • Personal theme: each user chooses a preferred theme in their profile.
  • Refreshed look: a new visual style and logo, and a redesigned login page with texts in English and Dutch.
  • More paging options in overview grids, for working through large lists faster.

When customers ship to an alternative delivery address, the checkout can ask for contact details for that address. These fields came as one fixed block: name, email address and phone number were either all shown and required, or not shown at all.

Each field can now be configured separately, with its own choice for visible and required. A webshop can, for example, ask for a contact name and phone number for the delivery while leaving the email address optional. The separate initials field has been removed to keep the form short.

The new settings are ShowAlternativeDeliveryAddressName, ShowAlternativeDeliveryAddressEmail and ShowAlternativeDeliveryAddressPhone, each with a matching required setting such as AlternativeDeliveryAddressPhoneRequired. Existing configurations based on ShowPersonalDetailFields keep working as they are.

In webshops that use the Calculate Order flow (setting LimitOrderCalculation), prices and taxes are retrieved from the ERP on request rather than with every basket change. For cross-border B2B orders that qualify for VAT reverse charge, VAT could still be added when the order was placed, even though the ERP calculation had returned zero VAT.

The reverse charge determined by the ERP is now applied all the way through to the placed order. Customers see the correct amount, can pay it directly, and the order is consistent with the VAT treatment in the ERP.

Descriptions of images, icons, documents and media tell customers what they are looking at or downloading. The standard article export did not include them, so teams relied on the advanced export, where document descriptions could also come out empty and had to be restored by hand after every import.

The standard Excel export now contains description columns for all asset types, on both article and article group level. The advanced export once again includes document descriptions in full.

Assets and their descriptions can now be maintained in a single export-and-import round.

Order numbers in the order history were sorted as text, so order 1000 could appear before order 999. For customers with many orders, that made recent or specific orders harder to find.

Numeric order numbers are now sorted by value, both ascending and descending, giving customers and sales representatives an order history that reads the way they expect.

Searching the order history for a specific order number could, in some webshops, load a copy of the webshop inside the results area instead of the matching order.

Order number search now returns the matching orders directly, making it quick to look up an order when following up on a delivery or invoice question.

The order grid on the article group page lists a product's variants, for example per color, so customers can order several at once. The grid is sorted by a configurable property such as a color sequence number. Variants without a value for that property could disappear from the grid, which meant customers could not order them.

Every variant is now shown. Variants without a sort value are placed after the sorted ones, and adding a value in Vendisto determines their exact position. The sorting property is set in OrderGrid.SortingProperty.

When a page in a product overview contained just one product, typically the last page of a category, visitors were taken straight to that product instead of seeing the overview page. For anyone browsing page by page, that was confusing.

Overview pages with a single product are now displayed like every other page, so customers keep their place in the category and continue browsing from there.

Depending on the webshop configuration, a few situations could make ordering less smooth than it should be:

  • the quantity field could start at 0 instead of 1;
  • quantity fields and order buttons could be missing in certain product lists;
  • for products ordered per package, the number of packages could be replaced by the number of pieces per package;
  • a sold out message could appear in the basket while all products were available.

Each of these has been resolved, so customers move from product to basket to checkout without unexpected quantities or messages.

Long product descriptions are shortened with a Read more button. When a description ended with an empty paragraph, the button could end up in the hidden part of the text, so customers could not open the full description.

The button now stays visible however the description's formatting ends, keeping the complete text one click away.

Removing a product from an order list did not always take effect, leaving outdated items in lists that customers use for repeat orders.

Products can now be removed from order lists reliably, so every list reflects what the customer actually wants to reorder.

Authorization profiles can be created automatically by both the article import and the customer import. When a profile code ended with a space, the two imports interpreted it differently, which could stop a full customer import with an error.

Both imports now handle authorization profile codes in the same way, so customer imports run to completion, also when codes contain trailing spaces.

Order confirmation emails showed the requested delivery date together with a technical time value. The date is now presented in a clean, readable format, such as 14 May 2026.


Sprint 74

May 1, 2026

This sprint introduces selectable product property values on the article page, allowing users to choose predefined options such as colors, materials, finishes, or dimensions during product configuration. These structured selections are transferred directly to the ERP system as part of the order line.

For recurring purchasing processes, prebuilt order lists can now store quantities, allowing fast replenishment orders.

We also added Bearer token authentication for the Product API, enabling integrations with external platforms such as Channable that do not support OAuth2 authentication flows.

In Exact Online environments, webshop assortments are now automatically validated against the operational warehouse used for order processing, preventing invalid ERP exports for articles unavailable in the configured fulfillment warehouse.

Shoxl now supports a new type of product property for configurable and custom-made products: list-based property values.

Previously, product properties in Vendisto were always stored as free-text string values. This worked well for informational attributes, but offered limited control when users needed to actively select a predefined option during product configuration.

With this enhancement, properties can now be configured as a single-select list, allowing users to choose from predefined values directly on the article page.

Examples include:

  • Selecting a specific color from an approved list of available colors
  • Choosing a material type such as aluminum, stainless steel, or plastic
  • Selecting a finish like matte, gloss, or brushed
  • Choosing a predefined cable length or diameter for custom assemblies
  • Selecting a left/right orientation for configurable components

The selected value is stored as part of the configured product and can be transferred directly to the ERP system as part of the order line information.

This enables ERP-driven production, fulfillment, or customization processes to receive structured and validated configuration input instead of relying on manually entered free-text values.

A new webshop setting, SkipMinimumOrderValueForRepresentatives, has been introduced to provide more flexibility for internal sales representatives and account managers.

When this setting is enabled, representatives can place orders without being restricted by the configured minimum order value in the basket. If disabled, the standard minimum order validation remains active.

This is particularly useful in B2B environments where representatives place orders on behalf of customers and need the flexibility to handle exceptions that would normally not be allowed through the self-service channel.

Typical scenarios include:

  • Creating a small replacement or warranty order without requiring the customer to meet the standard order threshold
  • Processing urgent backorders for missing items from a previous shipment
  • Entering sample or test orders during commercial discussions
  • Supporting strategic customers with exceptional service orders

This allows organizations to maintain strict minimum order policies for regular webshop users, while still giving internal sales teams the operational flexibility needed for customer-specific situations.

The Order List module in Shoxl has been extended with support for saving predefined quantities as part of an order list.

Users can already create and manage multiple order lists within the My Account environment and quickly add all or selected products from those lists to the basket. With this enhancement, the configured quantities are now stored together with the products.

Previously, products added from an order list were always inserted with a default quantity of 1, requiring users to manually adjust quantities afterward.

With the new behavior, users can optionally save the exact basket composition, including quantities, and reuse it for future reorders.

This is particularly useful for customers who regularly place recurring replenishment orders with fixed quantities.

For example, a maintenance department may create a monthly replenishment list containing:

  • 50 pairs of safety gloves
  • 20 cleaning cartridges
  • 10 replacement filters
  • 5 liters of industrial lubricant

Instead of manually adjusting quantities during every reorder, the complete predefined order can now be added to the basket in a single action.

This streamlines repeat ordering processes and reduces manual input for frequently ordered assortments.

Shoxl supports advanced bundle configuration scenarios through the Article Selection Wizard (ASW) combined with configurable component relationships.

In this setup, users first select the main product variant on the article group page. The selected article then acts as the foundation for a configurable bundle.

Based on configured “is component of” relationships, the platform automatically loads all compatible component products linked to the selected base article.

These component structures support multiple configuration scenarios, including:

  • Mandatory components that must always be included
  • Optional add-ons that users can choose to include
  • Alternative component groups where one option must be selected from multiple compatible products

This makes it possible to configure complex product combinations directly from a single flow.

A typical example is the configuration of an industrial workstation:

  • The user first selects the workstation variant based on dimensions and load capacity
  • Compatible accessories are then loaded dynamically, such as monitor arms, power modules, cable trays, or drawer units
  • Some accessories are mandatory, while others are optional or selectable from multiple alternatives

The configured solution is presented as a single bundle within the basket for a streamlined user experience. Internally, however, the bundle is translated into separate order lines when transmitted to ERP systems that do not support native bundle structures.

As part of this functionality, an issue has been resolved where ASW could add incorrect bundle components when no valid base article had yet been explicitly selected.

The component flow has now been adjusted so that components are only activated and linked after a confirmed ASW article selection is completed.

This ensures that only components compatible with the selected base product become part of the final configuration.

Shoxl supports configurable product bundles where a main product can automatically include linked component articles through configured “is component of” relationships.

These component relationships can be used for mandatory parts, optional add-ons, or selectable alternatives that together form a complete commercial or technical solution.

When required components are configured, their quantities are often directly tied to the quantity of the main product.

For example:

  • A workstation may always require one mounting kit per desk
  • An industrial machine may require a mandatory safety module for each configured unit
  • A configurable lighting system may require one driver per selected fixture

An issue existed where the quantity of required components did not automatically stay aligned with the quantity of the main product after basket quantity changes.

This has been corrected. Required component quantities are now automatically synchronized with the quantity of the primary article in the basket.

This prevents incomplete bundle quantities and ensures the generated order remains technically and commercially consistent.

The Product API now supports token-based authentication for server-to-server product import scenarios.

This enables external tools that do not support OAuth2 to trigger product imports directly by sending a configured Bearer token in the authorization header.

A typical example is an integration with Channable, where product data can be exported from Channable and sent directly to the Product API using a static token-based credential.

The token is configured in the webshop security settings and can be linked to a default webshop user for auditing and logging purposes. An expiration date is required, and regular token rotation is recommended because the token functions as a long-lived shared secret.

If no Bearer token is provided, existing authentication flows continue to work unchanged.

Shoxl supports configurable product relationships that can be used to build advanced product structures, bundles, and configuration flows.

Two commonly used relationship types within these scenarios are Component and Supplement.

These relationship types are used to define how products relate to each other, for example:

  • Mandatory or optional bundle components
  • Accessories linked to a main product
  • Cross-sell or add-on products
  • Supplementary products that should be offered together with a primary article

Previously, all available configurable relationship types were always shown within product data management screens, even in environments where certain relationship types were not used at all.

This could lead to unnecessary complexity and confusion for product data administrators when configuring product relationships.

With this improvement, relationship types such as Component and Supplement can now be individually activated or deactivated.

Inactive relationship types are hidden from the interface, allowing organizations to simplify the product management experience and expose only the relationship structures that are actually relevant for their implementation.

The Article XML bulk import has been extended with support for importing and synchronizing DataPool fields.

This allows external product data sources to populate shop content such as product descriptions, titles, specifications, and other enriched article information directly through the XML import flow.

At the same time, Vendisto users can now selectively override imported DataPool content with custom webshop-specific values.

This creates a flexible setup where centralized product information remains synchronized from the external data source, while specific webshop content can still be tailored locally when needed.

A common example is SEO optimization.

An organization may use a centralized DataPool description such as:

  • “Industrial cordless drill with lithium-ion battery and ergonomic grip.”

For a specific webshop or market, this description can then be overridden with a more SEO-focused variant such as:

  • “Professional cordless drill for construction and installation projects, including high-capacity lithium battery and fast charger.”

This allows organizations to:

  • Optimize product titles and descriptions for search engines
  • Create market-specific or channel-specific content variations
  • Add commercial positioning without changing the central product source
  • Maintain centralized product synchronization while preserving local webshop flexibility

In addition to the new import capabilities, an issue affecting the synchronization of DataPool fields has also been resolved.

For Exact Online integrations, Shoxl now validates whether synchronized articles are available in the warehouse that is configured for webshop order processing.

Only articles that exist in the linked webshop warehouse are now made available in Vendisto and the webshop.

This improvement addresses a practical integration constraint within Exact Online. When orders are submitted through the Exact Online API, a warehouse must always be supplied as part of the order creation process.

If an article does not exist within that warehouse, Exact Online rejects the order creation request.

Previously, articles could still become visible in the webshop even when they were not available in the configured webshop warehouse, potentially leading to failed order exports.

With this change, only articles that can actually be processed through the configured operational warehouse are exposed online.

This is particularly relevant in environments where:

  • Multiple warehouses are used for different sales channels
  • Certain warehouses are reserved for physical stores or internal logistics
  • The webshop operates from a dedicated fulfillment warehouse
  • Specific assortments are intentionally limited to certain warehouse locations

This prevents invalid webshop orders and keeps the online assortment aligned with the warehouse structure used in Exact Online order processing.

An issue has been resolved in the advanced order history overview where filtering on delivery date did not return the expected results.

Due to an incorrect field mapping, the filter used the wrong underlying data field whenever users searched or filtered by delivery date.

This could lead to incomplete or incorrect order selections within the order history environment.

The filtering logic has been corrected so delivery date filters now properly match the intended delivery date information.

This is particularly relevant for users who rely on delivery date searches to:

  • Review upcoming deliveries
  • Track delayed or planned shipments
  • Verify historical delivery schedules
  • Locate orders for operational or customer service follow-up

Shoxl supports quantity rules where products must be ordered in predefined multiples, often referred to as AdditionQuantity rules.

This is commonly used for products that can only be supplied in fixed packaging units, production batches, or transport quantities.

Examples include:

  • Ordering cable reels in multiples of 100 meters
  • Purchasing tiles per full box instead of per piece
  • Supplying industrial fasteners in packaging units of 250
  • Ordering liquids per container size

An issue existed where automatic quantity corrections could reduce quantities to a lower valid multiple instead of increasing them to the next allowed quantity.

For example:

  • Required order multiple: 300
  • User quantity: 576
  • Previous behavior: quantity reduced to 300
  • New behavior: quantity automatically increased to 600

The adjustment logic has been changed so quantities are now rounded upward to the next valid order multiple instead of downward.

This prevents unintended quantity reductions and keeps basket quantities aligned with the configured commercial ordering rules.

Shoxl supports real-time ERP-based order calculations within the basket, allowing pricing, discounts, stock information, and commercial conditions to be retrieved directly from the ERP system while the basket is being updated.

In some ERP environments, however, real-time calculations may not be sufficiently fast for continuous basket updates.

For these situations, Shoxl supports a separate “Calculate Order” workflow.

Instead of recalculating the basket after every quantity change, users can first compose their basket and then manually trigger the ERP pricing and order validation request using a dedicated calculation button.

This approach is particularly useful in environments with:

  • Complex ERP pricing structures
  • Large baskets
  • Slow ERP response times
  • Heavy customer-specific pricing calculations

An issue existed where volume discount pricing was not correctly refreshed in the basket after quantity increases when the manual “Calculate Order” flow was used.

As a result, updated quantity-based discount tiers were not always shown immediately after recalculation.

This has been corrected, ensuring that volume discount prices are now properly recalculated and displayed when basket pricing is refreshed through the Calculate Order process.

Shoxl supports a second image on hover display option, where product images automatically switch to an alternative image when users move the mouse over the product image.

This is commonly used to show an additional product angle, detail view, lifestyle image, or variant-specific image without requiring users to open the product page.

This behavior already worked on article group level, where multiple product variants are presented together.

An issue existed where the same hover behavior did not work correctly on individual article level when variant images were used.

This has been corrected. The DisplaySecondImageOnHover setting now also works for variant images on article pages.


Sprint 73

April 10, 2026

This sprint focuses primarily on import/export flexibility, ERP synchronization improvements, and more scalable assortment management.

A major addition is support for partial article exports, allowing exports to be limited to specific classification structures instead of always processing the complete assortment.

We also introduced customer-specific free shipping thresholds, selective property exports for Microsoft Dynamics 365 Finance & Operations, and stable Article Group IDs for safer article group synchronization during import/export flows.

Additional improvements include better handling of GTIN and product identification data, cleanup improvements for assembled product structures, automatic skipping of single classification levels, Exact Online fallback address handling, and several fixes across Message Center, synchronization, and account management flows.

Article exports can now be limited to specific parts of the assortment instead of always exporting the complete article catalog.

A new “Articles to Export” selection has been added to the article export dialog, allowing exports to be generated for:

  • All articles
  • A selected classification structure

When exporting by classification, users can navigate the full classification hierarchy and optionally include unclassified articles as part of the export.

Vendisto partial article exports

This improvement is particularly relevant for environments with very large assortments containing hundreds of thousands of articles, where generating a complete export could become unnecessarily time-consuming when only a subset of the catalog was needed.

The new export flow makes it easier to work with targeted subsets for import, maintenance, enrichment, or external processing scenarios.

Free shipping thresholds can now be configured individually per customer instead of using a single global threshold for the entire shop.

A new configuration block has been added to the Vendisto Customer UI, allowing customer-specific franco delivery limits to be maintained directly per customer profile.

This makes it possible to support commercial agreements such as:

  • Different free shipping thresholds per customer
  • Always-free shipping for selected customers
  • Shipping costs only for specific customer groups

The functionality is particularly relevant for B2B environments where delivery conditions are part of negotiated customer agreements.

This extension also aligns Shoxl more closely with ERP-driven commercial models by supporting customer-specific delivery cost structures for ERP environments where this functionality is not available natively.

Orders can now be placed using only a visitation address when no separate delivery or invoice addresses are available in Exact Online.

Previously, the Shoxl Exact integration could automatically generate fallback delivery and invoice addresses for customers that only had a visitation address configured. This could lead to unnecessary or unintended address creation within Exact Online.

The integration behavior has been updated so that fallback addresses are no longer automatically created during synchronization or ordering flows.

When separate invoice or delivery addresses are required, these addresses can be explicitly maintained in Exact Online. Shoxl will automatically recognize and use them once available.

This results in cleaner address synchronization behavior and gives customers more direct control over how address structures are managed inside the ERP environment.

Shops and portals with only a single top-level classification can now automatically skip the initial classification overview screen.

When a visitor logs in to a shop containing only one classification tile, the platform will immediately open the underlying article group overview instead of first showing a classification selection screen.

This is particularly useful for smaller assortments where users primarily want direct access to the available products instead of navigating through an additional intermediate step.

Previously, similar behavior could only be achieved through homepage redirects. The navigation flow is now handled automatically by the platform itself.

GTIN and Type Number information can now be added independently within article page layouts.

Previously, both values were combined into a single layout block. This meant that hiding either the GTIN or the Type Number often required additional CSS customization or template adjustments.

The layout structure has now been split into two separate layout elements, allowing implementations to independently position, display, or omit:

  • Article GTIN
  • Article Type Number

This provides more flexibility when composing product detail layouts and simplifies implementations where only one of the two values should be shown.

External integrations and browser-based connections to the Vendisto API now work correctly again after restoring CORS support.

A configuration issue could previously block requests originating from external environments or frontend applications due to missing or incorrect CORS handling.

The API configuration has been updated to properly allow supported cross-origin requests again.

Additional improvements have also been made to login feedback handling. Authentication-related error messages are now better differentiated, making it easier to identify issues that are unrelated to invalid credentials.

Article imports from Excel will no longer fail due to GTIN validation errors.

The GTIN validation step has been removed from the article Excel import process after repeated situations where valid import scenarios were blocked by strict GTIN validation behavior.

This change makes it easier to import and maintain article data originating from external systems, supplier files, or ERP exports where GTIN values may be incomplete, differently formatted, or not consistently maintained.

It is also common practice in parts of the B2B market to use internally constructed or customer-specific GTIN values that do not formally pass GTIN checksum validation, despite being operationally valid within the business process.

The import process can now continue without rejecting articles solely because of GTIN validation issues.

Removed assembled product structures are now correctly cleaned up during full ERP cache imports.

Previously, situations could occur where deleted or obsolete assembled product records remained present in the ERP cache after a full import cycle.

The import cleanup logic has been corrected so that removed assembled products and related bill-of-material structures are now properly deleted when they no longer exist in the source data.

This prevents outdated assembled product relationships from remaining active after assortment or product structure changes in the ERP environment.

Article group imports and exports now support a dedicated Article Group ID column.

Previously, article group synchronization depended primarily on the article group title. Renaming an existing article group could therefore lead to duplicate group creation during import scenarios.

With the introduction of the optional Article Group ID field, article groups can now be matched using a stable identifier instead of relying solely on the displayed title.

This makes it possible to:

  • Rename existing article groups without creating duplicates
  • Maintain stable references during import and export flows
  • Manage assortments more safely across repeated synchronization cycles

The new field remains optional to preserve compatibility with existing import structures and legacy assortment files.

Asset descriptions linked to article groups are now correctly imported during article group import processes.

Previously, article group imports could successfully import the related assets while failing to apply the configured asset description metadata.

The import handling has been corrected so that asset descriptions are now properly stored and synchronized together with the imported article group assets.

Several improvements have been made to the handling of product identification data during article group imports and article Excel exports.

SupplierGLN and ManufacturerGLN values are now correctly processed during article group imports. Previously, these fields could be omitted during import, causing supplier and manufacturer identification data to remain unavailable after synchronization.

In addition, the Type Number field is now correctly included in article Excel exports. The column could previously be missing from exported datasets, limiting its use in external processing and product identification workflows.

These changes improve consistency of product identification data across import, export, and synchronization flows.

The representative account overview will now display correctly when the Message Center is enabled in the webshop.

This overview is used by representatives to access and switch between the customer accounts they are authorized to manage, allowing them to log in as a customer and place orders within the webshop on behalf of that customer.

Previously, enabling the Message Center could cause layout and rendering issues within this account selection overview after login, resulting in a visually broken or unstructured page.

The interaction between the Message Center components and the representative account selection flow has now been corrected so that both features function correctly together within the same webshop environment.

The unread message counter in the Message Center is now updated correctly when unread messages are archived or marked as read.

Previously, the unread message indication could remain incorrect after changing the status of a message, causing the displayed unread count to differ from the actual unread messages remaining in the Message Center.

The counter update logic has been corrected so that unread message totals are now refreshed immediately after message status changes.

Article exports to Microsoft Dynamics 365 Finance & Operations can now be limited to a specific set of product properties and attributes.

A new ArticlePropertyAttributes setting has been added to the Shoxl Finance & Operations integration, allowing implementations to define exactly which attributes should be included in the export.

Previously, all available article properties could be included during export, even in scenarios where only a limited subset was required by the ERP integration.

This makes it possible to reduce export payload size and avoid transferring unnecessary attribute data, particularly in environments with large product datasets or extensive property structures.

Newly imported article header labels from the ERP system will now correctly appear in the shop after import.

Under specific import scenarios, newly introduced article headers or property labels could be imported successfully into the platform while remaining unavailable in the webshop presentation layer.

The import and synchronization flow has been corrected so that newly added article header labels are now properly created and made available within the shop environment immediately after import.


Sprint 72

March 20, 2026

This sprint introduces major improvements around content management, product availability insight, and complex product and spare parts flows.

The new Custom Content Blocks module allows reusable multilingual content such as maintenance notifications and footer information to be managed directly from Vendisto and reused throughout the shop.

We also expanded support for configurable and spare parts-heavy product structures with a dedicated Spare Parts filtering component, improved article number search recognition, and list-based component selection.

On the ERP side, shops can now retrieve Available-to-Promise (ATP) availability dates directly from connected ERP systems. This sprint also adds support for multi-currency gross price exports for Microsoft Dynamics 365 Finance & Operations and customer-specific quantity rules within product information APIs.

Additional improvements include configurable QuoteForms, clearer basket discount visibility, expanded multilingual email support, configurable reCAPTCHA validation thresholds, and several validation and synchronization improvements across ordering and pricing flows.

We introduced a new Custom Content Blocks module in Vendisto, enabling shop owners to manage reusable content directly from the platform without requiring layout or code changes.

This functionality is designed for content that appears across fixed areas in the shop, such as:

  • Footer address information
  • Header notifications or maintenance messages
  • Reusable informational content
  • Temporary promotional or service announcements

Each Custom Content Block contains:

  • A unique tag used for placement inside the shop
  • Fully translatable content
  • Optional publication and archive dates
  • Reusable HTML content that can appear in multiple locations simultaneously

Vendisto custom content blocks

Custom Content Blocks can be inserted in two different ways:

  • Directly inside HTML content using the new custom tagging mechanism
  • As standalone elements within the shop layout configuration

This creates a more flexible content management flow where functional or informational content can be maintained independently from the technical shop implementation.

The module also supports scheduled visibility through publication and archive dates, allowing content to automatically appear or disappear at predefined moments.

Internally, the content blocks are synchronized to the webshop settings structure in RavenDB and rendered language-specific based on the active shop language.

The Spare Parts page now uses a dedicated Spare Parts PreFilter component, replacing the existing generic PreFilter implementation.

The previous component was not sufficiently flexible for Spare Parts scenarios involving dependent filters and accumulated product properties. In some situations, subfilters could be skipped or hidden when a configured property was not immediately available or when filter configurations were processed in a specific order.

The new component removes this dependency on configuration order. Available subfilters are now evaluated independently, ensuring that valid filter options remain accessible whenever matching assembled product data exists.

The implementation also improves handling of conditional subfilters. Filters that are not relevant for the current selection remain hidden until a selected product path makes them applicable.

To support this behavior, a new indexing structure was introduced for filtering on accumulated properties of assembled products.

This improvement is particularly relevant for Spare Parts environments with layered product structures, where multiple dependent properties and variant combinations are used to guide users toward the correct replacement parts.

The search functionality has been improved to better handle searches based on article numbers and manufacturer article numbers, even when formatting differs from the stored value.

Previously, searches could produce inconsistent results when users omitted spaces or special characters that were present in the original article number. This was particularly relevant for technical products and spare parts where article numbers are often entered manually.

Search indexing and result prioritization have been updated so that normalized article numbers are matched consistently across both autocomplete and full search results.

For example, the manufacturer article number 6205/C3 will now correctly return the intended product as the top result for all of the following search inputs:

  • 6205/C3
  • 6205C3
  • 6205 C3

The improvements apply to both autocomplete suggestions and the search results page, ensuring that users can find products regardless of whether separators, spaces, or formatting characters are included in the search query.

The ShoxlRest GetProductInformations endpoint has been extended with support for MinimumOrderQuantity and AdditionQuantity.

This makes it possible to expose customer-specific ordering constraints directly through the product information response. The functionality supports scenarios where different customer groups require different minimum purchase quantities or fixed ordering increments for the same product.

For example, a product can now enforce:

  • A minimum order quantity of 12 units
  • Ordering only in increments of 6 units
  • Different quantity rules depending on the assigned customer group or pricelist

The quantities are returned directly within the product information payload, allowing external integrations and storefront logic to apply the correct ordering behavior during product display, basket validation, and checkout flows.

This functionality is particularly relevant for ERP-driven B2B environments where packaging units, wholesale quantities, or customer-specific agreements determine how products may be ordered.

The basket and checkout totals overview can now display product-level discounts separately from general order discounts and voucher reductions.

A new layout element has been introduced that shows the combined item-level discount amount applied across all order lines in the basket.

This makes it possible to clearly distinguish between:

  • Discounts applied directly to products
  • Voucher-based discounts
  • General order-level discount calculations

The displayed amount is based on the TotalDiscountExclVat value returned by the CalculateOrder response and only includes discounts applied at article level.

This is particularly relevant for B2B pricing scenarios where customer-specific product discounts, net pricing agreements, and line-level discount structures are used alongside separate promotional or order-wide discount mechanisms.

Order-related information can now be transferred to Exact Online order line remarks in multiple configurable ways.

A new setting, OrderLineNotesMode, has been added to the Exact Online Batch Interface. This setting controls how the Notes/Remarks field on Exact Online order lines is populated during order export.

This makes it possible to include additional context directly on individual order lines, even in scenarios where the information originally exists at order level.

The following modes are available:

  • None — No mapping is applied to the order line Notes field. Existing integrations remain unchanged.
  • Comments — The order header comment is copied to the Notes field of every exported order line.
  • CustomOrderFields — All configured Custom OrderFields are added to the Notes field of every order line using a Name: Value structure.

This is particularly useful for integrations where operational information, references, delivery instructions, project identifiers, or custom checkout fields must remain visible at line level inside Exact Online after order synchronization.

Form submissions can now be filtered more accurately based on the calculated reCAPTCHA risk score.

A configurable reCAPTCHA threshold has been added, allowing shops to define when a submission should be accepted or blocked based on the returned Google reCAPTCHA score.

Previously, submissions with low trust scores could still pass validation because no configurable threshold was available within the implementation.

With this improvement, shops can now actively control how strict the validation should be for contact forms and other protected submission flows.

Additional logging has also been added to provide better visibility into:

  • The received reCAPTCHA score
  • Why a submission was accepted or rejected
  • Validation and scoring behavior during troubleshooting

This makes it easier to tune spam protection behavior in environments where automated submissions, bot traffic, or low-confidence form activity must be filtered more aggressively.

The QuoteForm can now be configured to support different field requirements per shop implementation.

This makes it possible to determine exactly which fields are shown in the quote request flow and which of those fields are mandatory for submission.

Previously, the QuoteForm used a fixed structure with limited flexibility around required input fields. With this improvement, shops can tailor the quote request process to their own business requirements and data collection needs.

Examples of configurable behavior include:

  • Making phone number fields optional or mandatory
  • Showing or hiding company-related fields
  • Controlling whether newsletter opt-in is displayed
  • Reducing the number of required fields for simpler quote flows

The configuration supports multiple field types including textboxes, checkboxes, radio buttons, and multiline comment fields. Field visibility and validation requirements are configured through the QuoteForm settings structure.

Component options can now be displayed as selectable lists instead of only dropdown menus.

Previously, component selection exclusively used dropdown fields for each component relation type. This worked well for smaller selections, but became less practical in scenarios with many component options or visually distinguishable variants.

The new implementation introduces a list view mode for component selection, aligned with the behavior already available in the Article Selection Wizard.

When enabled, component options can be presented as a visual list where each available value may include:

  • An icon or image
  • A directly visible option label
  • Property information shown through tooltips

This makes it easier to compare and select component variants without repeatedly opening dropdown menus, particularly for configurable products with multiple component dimensions or visually recognizable options.

Outdated price detail information is now automatically removed from the shop’s RavenDB performance database during synchronization.

Cleanup mechanisms already existed for articles, article groups, categories, and assets that were no longer active or available in Vendisto. However, obsolete price detail documents could still remain present in the RavenDB cache in certain scenarios involving frequent assortment or pricing changes.

The synchronization process between the Vendisto SQL database and the RavenDB performance database has now been extended to include automatic cleanup of outdated price detail records as well.

This prevents old or orphaned pricing information from remaining available in the performance database after pricing changes, assortment updates, or article removals in Vendisto.

Products that are temporarily unavailable can now display upcoming availability dates directly from the connected ERP system.

When the Available-to-Promise (ATP) functionality is enabled, the standard “Out of Stock” indication can be replaced with an ATP action that allows users to retrieve future availability information in real time.

After activation, the shop queries the connected ERP system to retrieve the next expected availability moments and quantities for the selected product.

This allows users to:

  • See when new stock is expected to become available
  • Determine whether waiting for replenishment is worthwhile
  • Make purchasing decisions based on planned incoming stock instead of only current inventory

The ATP functionality is implemented as a configurable layout element and can be used with ERP integrations that provide Available-to-Promise information.

Gross prices exported from Microsoft Dynamics 365 Finance & Operations can now be synchronized using multiple currencies instead of always defaulting to EUR.

A new configuration setting has been added to the integration layer, allowing shops to retrieve and process gross prices in the currency configured within the ERP environment.

Previously, gross price exports defaulted to EUR regardless of the original currency context in Finance & Operations.

This improvement is particularly relevant for international B2B environments where different customer groups, regions, or sales organizations operate with multiple currencies within the same ERP landscape.

New shops now automatically receive a complete and up-to-date set of transactional email templates during creation.

The Shopmanager mail service has been extended to automatically generate the required templates in Postmark, reducing manual setup work and ensuring that newly created shops immediately have the correct email infrastructure available.

Additional improvements have also been made to multilingual email support.

Basic template sets are now available to simplify onboarding of new shop environments, while two-factor authentication emails have been extended with support for additional languages.

This ensures that authentication and transactional communication can be delivered in the language expected by the end user, particularly in multi-language shop environments.

Basket merging after login now correctly validates product quantity rules before combining guest and user baskets.

Previously, situations could occur where products added to a guest basket exceeded configured stock or quantity restrictions after the basket was merged into the user’s existing basket during login.

This specifically affected scenarios involving:

  • Minimum order quantities
  • Fixed quantity increments
  • Maximum allowed quantities
  • Stock-based quantity validation

The basket merge process now validates and adjusts merged quantities before the final basket is created, preventing invalid combined quantities from triggering basket or checkout errors after login.

This is particularly relevant for B2B shops where products are frequently sold in fixed packaging units, order multiples, or quantity-controlled assortments.

Customers using NetPriceFiltering will no longer see incorrect “Excl. Tax” labels in the product price filters.

In specific situations following a RavenDB database and index upgrade, the price filter configuration could display outdated or incorrect tax-related labeling for customers working with inclusive tax pricing logic.

The filter behavior and related index handling have been corrected so that the displayed price filter labels now correctly align with the active pricing configuration used in the shop.

This prevents confusion in environments where customers filter products based on gross pricing instead of excluding VAT calculations.

Classification pages without a directly assigned image can now automatically display an image originating from their underlying classification structure.

Previously, parent classifications without their own image could remain without visual representation, even when suitable images were available on underlying child classifications.

The synchronization and image resolution logic has been updated so that classification nodes can inherit images from underlying classifications when no direct image is configured on the current level.

This ensures that category structures retain visual consistency even when images are only maintained deeper within the classification hierarchy.

Invalid delivery dates can no longer be selected within order flows that use the delivery scheme extension.

Under specific interaction sequences during checkout, it was previously possible to bypass delivery date restrictions and select a date that was not allowed according to the configured delivery scheme.

The validation flow has been corrected so that delivery date availability rules are consistently enforced throughout the complete ordering process.

This ensures that users can only finalize orders using delivery dates that are actually permitted within the configured delivery planning logic.


Sprint 71

February 27, 2026

Sprint 71 continues to strengthen Shoxl’s architecture around transactional communication, integration flexibility, and configurable sales processes.

A major architectural step is the introduction of a centralized Email Service. All transactional messages — including order confirmations, account activations, password resets, quote notifications, and 2FA codes — are now routed through a single Email API and delivered exclusively through Postmark. This consolidates the previously fragmented delivery routes and establishes a consistent foundation for monitoring, security, and template management.

The new email architecture also introduces webhook support for order and quote emails. These events can now be forwarded to external systems, allowing marketing platforms and automation tools to trigger follow-up communication or campaign workflows based on real shop activity.

On the sales process side, the Quote Checkout page has become fully configurable through layout settings. Fields can now be individually enabled, disabled, or marked as required, allowing organizations to tailor the quote request flow to their specific sales processes.

Finally, voucher integrations have been improved by including the actual voucher code in the data provided to email templates. This allows transactional emails and external platforms to reference the exact code used during checkout, enabling cleaner integrations with marketing automation tools such as Copernica and improving campaign tracking across systems.

The shop sends a wide range of transactional emails, including order confirmations, password resets, account activations, 2FA codes, quote requests, and contact form notifications. Until recently, these messages were handled through different technical routes.

Some emails were sent through Vendisto, many were already delivered through Postmark, and a smaller group still relied on SMTP on internal infrastructure. This made the overall setup harder to manage and less consistent in areas such as monitoring, authentication, logging, and template control.

In this sprint, the full email delivery architecture has been consolidated into one centralized flow.

All outgoing transactional emails now pass through a dedicated Email Service. This service acts as the single gateway for email traffic and provides a more uniform way to handle security, validation, and traceability.

All messages are delivered through Postmark. Vendisto is no longer part of the delivery route, and legacy SMTP-based sending has been removed.

With this change, all email templates are now managed in Postmark. Part of this was already in place, but the setup has now been completed for the full transactional email flow. Each environment uses its own dedicated Postmark server. Depending on the subscription, customers can receive access to that environment and manage the content and layout of their own transactional emails directly.

For more advanced scenarios, the architecture also supports webhook-based integrations. This makes it possible to send structured email data to external platforms that can enrich, generate, or distribute communication through their own flows.

The diagram below illustrates the new setup, in which both the Webshop and the Account API route email requests through the central Email API, after which delivery is handled through Postmark.

Email Service

The underlying request structure also makes the setup easier to extend for new email types and integrations. A request contains the email type, recipients, language, and the data needed by the template.

{ "Type": "AccountTwoFactor", "Recipients": { "To": [ "user@example.com" ] }, "LanguageId": 2057, "Data": { "Username": "TestAccount", "TwoFactorCode": "461595" } }

This functionality is currently available in beta for a selected test group. General availability is planned for Release 71.

The visible behavior for end users remains largely the same, but the underlying setup is now easier to maintain, easier to extend, and better suited for customer-specific email customization.

Order confirmations and quote-related emails were previously only processed through the internal email delivery flow. This limited the ability to integrate these events with external systems that may need to react to order or quote activity.

The Email API now supports sending requests to external endpoints (webhooks) when order or quote emails are generated.

This allows external systems to receive structured data whenever an order confirmation or quote event occurs. The webhook can then be used to trigger additional workflows such as sending emails through external marketing platforms, synchronizing voucher campaigns, or initiating follow-up processes.

By exposing these events through webhooks, the email architecture becomes more flexible and easier to integrate with external communication and automation tools.

The quote checkout previously required a fixed set of fields, making it difficult to adapt the form to different business processes or customer scenarios. In many situations, only minimal information is needed to submit a quote request.

The Quote Checkout page can now be fully configured through the layout settings. This allows the form to be composed using the same layout structure as other configurable pages in the platform.

All available fields can now be individually configured, making it possible to decide which fields are displayed and whether they are required or optional. This enables businesses to create a much more streamlined quote request flow when only limited information is necessary.

The layout configuration supports a wide range of customer data fields, including personal details, company information, delivery and invoice addresses, and contact information. Custom HTML blocks can also be added to structure the form and provide additional instructions or headings.

The following example shows how a field can be rendered in the Quote Checkout layout configuration:

{ "Element": { "Name": "CustomerData_CustomerDeliveryAddress_City", "Properties": { "RenderLabel": true, "IsEditable": true, "ClassName": "form-group col-xs-12 col-sm-12 col-md-6" } } }

By repeating this structure and changing the Name property, additional fields can be added to the form layout. Each field can be individually configured to control visibility, editability, and styling.

This flexible layout approach allows organizations to tailor the quote checkout form to their specific sales processes while maintaining full control over which information is collected from customers.

Order confirmation emails previously included the voucher label rather than the actual voucher code used during checkout. As a result, the exact code entered by the customer was not available in email templates or in downstream integrations.

The order line data sent to the email template system now also includes the voucher code itself. This makes it possible to show the exact code in transactional emails when needed and gives external systems access to the same value.

This creates clearer communication for customers, especially when the entered code is more recognizable than the voucher description or contains meaningful campaign information. It also enables broader integration scenarios in which voucher campaigns are managed outside the platform.

A common setup is to create vouchers in Vendisto, distribute them through an external marketing platform such as Copernica, and then inform that platform once the voucher has been redeemed in the Shoxl shop. This allows campaign distribution and redemption tracking to remain connected across systems.

The diagram below illustrates this flow.

Voucher Codes Distribution and Integration

 

By including the voucher code directly in the email template data, the platform can support this full cycle more effectively: voucher creation, campaign distribution, customer communication, and redemption feedback all remain aligned.

The following simplified example shows how the voucher code can be included in the order line data made available to the email template:

{ "OrderLines": [ { "ProductCode": "SKU-1001", "Description": "Spring promotion discount", "VoucherLabel": "Spring promotion", "VoucherCode": "SPRING10" } ] }

This makes the exact voucher code available not only for email presentation, but also for integrations that need to forward, register, or validate voucher activity across connected systems.

Property categories rendered on an article group page can show the unique values that exist across the available variants. However, when the Article Selection Wizard resulted in a single matching article, these displayed property values were not always updated to reflect the selected article.

This behavior has been fixed. When UpdatepropertiesOverview is enabled, the property overview now updates correctly after a specific article has been selected, including in layout scenarios where this did not work before.

As part of this behavior, the property value is only shown once the article number is known, in line with the existing behavior for article-specific information.

The following example shows the relevant setting:


{ "UpdatepropertiesOverview": true }

On the article group page, an article table can be displayed to list all articles within the group.

When the EnableMatchingPropertiesTransposition setting is enabled, properties that have the same value across all articles are moved out of the table and displayed in the detail section of the article group instead. This helps keep the article table focused on properties that differentiate the variants.

Due to a bug in the implementation of this setting, these matching properties were not shown in the article group detail section as intended.

This issue has been resolved, and matching properties are now correctly transposed and displayed when the feature is enabled.


{ "EnableMatchingPropertiesTransposition": true } 

The shop can be configured to display article properties on the article detail page. When a large number of properties is available, these can be grouped using Property Categories. Each category can be assigned to an article header, allowing properties to be organized into separate tabs on the article detail page.

Property Categories are managed in Vendisto, where their display order can also be defined.

An issue was identified where the configured sort order of Property Categories was not correctly applied on the article detail page. This behavior has been corrected so that the category order defined in Vendisto is now respected in the shop.

The price filter in the shop previously always used prices excluding VAT. This caused inconsistencies in shops where the “Show prices including VAT” setting was enabled, because the filter values did not match the prices displayed in the product listings.

This behavior has been corrected. The price filter now respects the active VAT display setting used in the shop.

  • When prices are displayed including VAT, the price filter values and filtering logic use prices including VAT.
  • When prices are displayed excluding VAT, the filter continues to use prices excluding VAT.

This applies to both gross and net price filtering.

Adding custom content in the platform often still requires layout changes in Raven, which means customers depend on support or development help for relatively simple content updates.

In this sprint, the management side for reusable Content Blocks has been introduced in Vendisto. Users can now create and manage HTML-based content blocks with their own name, language, status, and optional start and end date.

This makes it possible to prepare centrally managed content that can later be reused in multiple places, such as content pages, classifications, article groups, articles, news, or wiki-related content.

The content block management includes support for draft, published, and deleted statuses. Visibility is determined by publication status and, where configured, the active date range.

Each content block is stored per language, making multilingual content easier to manage in a structured way. To avoid conflicts, the combination of name and language must be unique.

The rendering of these content blocks in the shop will be added in the next sprint. That next step will make the blocks available through shortcode-based rendering and layout integration, so they can be used directly in storefront content and fixed layout areas.

This sprint therefore delivers the editorial foundation: customers can already start preparing and managing reusable content centrally, while storefront usage will follow in the next release.

Stock information could fail to load for products whose product numbers contain slashes. In these situations, the stock service returned valid data, but the article detail page displayed the status as “Unknown”.

The handling of product numbers containing slashes has been corrected, ensuring that stock information is now retrieved and displayed correctly on the article detail page.

An issue was identified in the Excel Order Upload functionality where the Select all option no longer worked. At the same time, the quantity selector in the upload interface was not activating as expected.

This issue has been resolved, restoring the correct behavior of the selection control and the quantity input in the Excel Order Upload interface.

An issue was identified where component articles with a VAT rate different from 21% could still be calculated using the 21% rate under certain conditions.

This behavior has been corrected so that component articles now use their configured VAT rate when calculating totals.

The meta description filtering introduced in earlier sprints was too strict and removed characters that should normally be preserved in meta descriptions.

The filtering logic has been adjusted to be less aggressive, allowing commonly used punctuation and formatting characters to remain in the generated meta description.

Search could sometimes fail in shops where a separate mobile version of the storefront was also available.

This issue has been resolved, restoring normal search behavior in these environments.

The list of related article types in Vendisto did not show all available relation types. Due to a paging issue, the first item in the list was consistently omitted.

This issue has been resolved, and the overview now displays the complete set of available related article types.

Related articles on the article group page could previously include items with the Component relation type. Because components are intended for product configuration rather than cross-selling, showing them in the general related articles overview created confusion.

This behavior has been corrected by separating the two use cases more clearly.

A dedicated component selection module is now available on the article group page. In this block, only relations with the type Component are shown, and they are rendered as dropdown selections to support the configuration flow.

The Related Articles slider and block now only display relations from other supported relation types. Component relations are excluded from this overview.

An issue occurred in the ERP Cache OrderHistory import where records containing an empty ProductDescription caused the import process to fail.

The import logic has been adjusted to allow empty ProductDescription values.

The ProductDescription element must still be present in the XML structure, even if it does not contain a value.


<OrderLine> <ProductCode>ABC-123</ProductCode> <ProductDescription></ProductDescription> <Quantity>1</Quantity> </OrderLine>

An issue was identified where the import processes for PriceLists and CustomerPrices could incorrectly report a failed import, even when the data had been processed successfully.

The reporting logic has been corrected so that the import status now accurately reflects the actual outcome of the import process.

The first order placed after a period of inactivity could take noticeably longer to process because the Vendisto service was not yet running.

The shop startup process now automatically initializes Vendisto, ensuring that the service is already active when the first order is placed.


Sprint 70

February 6, 2026

This sprint strengthens Shoxl’s core promise: extending ERP-driven commerce with control, scalability, and channel flexibility. We’ve focused on improving how data flows from ERP to storefront, how assortments are managed across channels, and how communication and checkout behavior adapt to real-world B2B scenarios.

A key addition is the new integrated Message Center, enabling targeted in-platform notifications based on authorization profiles. This introduces a structured communication layer within the shop, independent of ERP flows.

On the ERP side, we completed the technical foundation for Available-to-Promise (ATP) integration with Microsoft Dynamics F&O, enabling ERP-driven availability insight instead of static stock messaging. In Exact environments, we introduced classification-based export filtering, allowing multiple webshop scenarios to coexist while keeping Vendisto aligned to the intended assortment.

We also expanded channel flexibility with authorization-based product feed filtering, making it easier to define marketplace-specific assortments without separate feed logic. In payments, a direct integration with Rabobank OnlineKassa has been added alongside refined pickup-specific payment handling.

Operational stability has been strengthened with resumable ShoxlSync for large catalogs, improved stock validation logic, and multiple refinements across filters, classification dashboards, and storefront consistency.

To improve in-platform communication, we have introduced a fully integrated Message Center. This feature, demonstrated in the video below, allows users to view and manage notifications without leaving their current page, creating a seamless and non-disruptive experience.

 

 

The Message Center is accessible via a notification bell icon in the top-right corner of the header. When unread messages are available, a badge displays the number of new notifications. Clicking the icon opens a side panel that presents messages directly within the interface.

On desktop, the Message Center appears as a right-hand sidebar. On mobile devices, it opens as a full-screen overlay to ensure optimal readability. Messages are sorted from newest to oldest and include:

  • A title or short summary
  • The time of publication
  • An optional icon or avatar
  • An action to close or mark the message as read

If additional context is required, a notification can contain a “Read more” link directing the user to a relevant page within the platform. The link opens in the same browser window.

The side panel can be closed in multiple intuitive ways: by clicking outside the panel, clicking the notification icon again, or pressing the Escape key. Unread messages remain marked until the user explicitly closes them. The notification badge automatically updates and disappears when no unread messages remain.

Notifications can be targeted based on authorization profiles. Each message can be linked to one or more existing authorization profiles within the platform. When a user visits the website, the system evaluates their assigned profiles and displays only the relevant notifications.

Non-authenticated visitors receive only messages linked to the public profile. Logged-in users see both general messages and notifications specifically assigned to their authorization profiles. Importantly, when a user closes a message, that action is stored individually. Other users with the same authorization profile will continue to see the notification until they close it themselves.

Message management is handled within Vendisto through a dedicated “Notifications” section. Administrators can create, publish, archive, reactivate, and manage notifications in a structured overview similar to the existing news module. Each notification includes:

  • Title (required)
  • Message content (with optional link)
  • Linked authorization profiles
  • Status (draft, published, archived)
  • Publication date

For multilingual environments, administrators can define content per language within a single notification entry. This differs from the news module, where separate items are required per language. Optionally, translation services can be leveraged to automatically display messages in the appropriate language, reducing manual effort.

This feature is fully available and operates independently of ERP integrations. It provides a scalable communication layer within the platform, supporting both broad announcements and highly targeted, profile-based messaging.

For products that are temporarily out of stock, customers often want clarity on when new inventory will become available. This release establishes the foundation to display expected delivery dates directly on the product detail page, based on Available-to-Promise (ATP) calculations from the ERP.

In Microsoft Dynamics 365 Finance & Operations (F&O), ATP is calculated as the available inventory plus planned receipts minus quantities already committed to sales orders. When current stock is depleted but inbound inventory is planned, the first date with a positive ATP value represents the expected availability date.

With this enhancement, Shoxl becomes aware of ATP processing in the ERP. When the ATP feature is enabled and a product is unavailable, the standard “Out of Stock” message is replaced by an ATP action. Upon interaction, the platform queries the ERP in real time and retrieves the next date on which quantities become available.

If ATP information is present, the expected delivery date (for example: 19-05-2025) will be shown on the article detail page. This ensures customers receive transparent availability information instead of a generic unavailability message.

This implementation is initially delivered for F&O. Support includes both standard items and so-called KIT articles composed of multiple modules. For KIT products, ATP data is retrieved via the dedicated product availability endpoint, ensuring accurate availability calculations across combined components.

In this sprint, the technical foundation and ERP integration for ATP retrieval have been completed. The functional activation on the storefront is planned for the next release.

The ATP architecture is ERP-agnostic by design. While F&O is the first supported platform, the mechanism supports integration with other ERP systems such as SAP and Exact, which can be enabled based on demand.

This lays the groundwork for a more transparent stock experience, enabling customers to plan purchases based on reliable, ERP-driven availability data.

The video below illustrates how the classification process works within Vendisto. On the homepage, the “Unclassified” list highlights articles that still require classification before they can be properly used within the assortment structure.

 

 

In this overview, articles that were in a suspended (inactive) state were also displayed as “To Be Classified.” Although these articles were technically unclassified, suspended items do not require action and should not appear in the operational classification queue.

This created unnecessary noise in the dashboard and could lead to confusion about which articles actually required attention.

The filtering logic has been refined so that only articles with an active status are included in the “Unclassified” list. Suspended or otherwise inactive articles are now excluded from this overview.

The classification dashboard now presents a clean and actionable list, focused exclusively on active articles that genuinely require classification.

Currently, all available payment methods are shown during checkout, regardless of the selected delivery method. The only exception is “On Account,” which is linked to a payment condition retrieved from the ERP system and configured at customer level.

This setup does not allow specific payment methods to be restricted to Pickup only. As a result, payment options such as cash on pickup cannot be selectively displayed based on the chosen delivery method.

With this improvement, payment methods can now be explicitly linked to the Pickup delivery option. When customers select pickup, only the configured payment methods for pickup are shown.

In this case, the following payment methods are supported for pickup:

  • CASH_ON_PICKUP
  • BUY_ON_CREDIT (if applicable)

The place order request has been extended to include the correct PaymentMethodCode, ensuring the selected pickup payment method is correctly processed downstream.

This enhancement ensures that pickup-specific payment methods such as card and cash are fully supported and correctly handled within the checkout flow.

Rabobank OnlineKassa is the payment solution provided by Rabobank for accepting online payments. It supports commonly used payment methods such as iDEAL/Wero, credit cards, and other local or international options, and is typically used by merchants who want a direct contractual relationship with Rabobank as their acquiring bank.

Within the platform, online payments are usually processed through a broad range of Payment Service Providers (PSPs), including Pay.nl, Stripe, and Mollie. These PSPs act as intermediaries between the shop and the acquiring banks.

In this sprint, a direct integration with Rabobank OnlineKassa has been introduced. This allows merchants who use Rabobank as their primary payment provider to connect their shop directly to Rabobank’s payment environment, without routing transactions through an external PSP.

The integration supports the standard online payment flow, ensuring secure transaction handling, status feedback, and correct order processing within the shop environment.

This enables businesses that prefer or require a direct Rabobank setup to use their existing banking relationship while maintaining a fully integrated checkout experience.

In Exact, articles can be marked for webshop availability using the Webshop checkbox on the article card. Our integration currently exports exactly those articles: everything with the webshop flag enabled is imported into Vendisto.

The limitation is that Exact only provides one webshop flag, while the ERP can serve multiple webshop scenarios (for example a B2C webshop alongside a B2B portal). When the same checkbox is used for multiple channels, the Vendisto export can unintentionally include a much broader assortment than intended.

To support more precise assortment control, an additional export filter has been introduced based on Exact article classifications. This allows the Vendisto assortment to be narrowed down to articles that match one or more configured classification/value combinations (for example, only export articles where a specific classification is set to “Yes”).

If no classification filter is configured, the default behavior remains unchanged: all articles marked with the webshop flag are exported.

The Vendisto product feed can expose a complete set of article data in JSON or XML format for external platforms such as Channable, Amazon, and BOL. The feed may include detailed product information, pricing, and even customer-specific prices where applicable.

Feed generation now leverages the same authorization profiles that are used within the platform to control assortment visibility and content access for specific customer groups or individual customers.

By linking a product feed to an authorization profile, the feed will only contain articles that are assigned to that profile. This ensures that the assortment in the feed aligns exactly with the configured visibility rules.

This makes it possible to define targeted assortments for specific channels—for example, selecting which products should be offered on marketplaces such as BOL—without requiring separate feed logic or manual filtering.

ShoxlSync is the synchronization mechanism that transfers product information from Vendisto PIM to our cache database RavenDB. Within this process, product data is transformed into a read-optimized structure, ensuring that shop environments can retrieve information quickly and efficiently. In essence, ShoxlSync converts PIM-managed product data into a format specifically optimized for high-performance read access.

In environments with very large product collections (for example, more than 100,000 items), the synchronization process could consume substantial memory. In certain cases, this caused the process to time out before completion, resulting in only part of the assortment being synchronized.

Previously, when a synchronization was interrupted, restarting ShoxlSync would initiate the entire process from the beginning. This increased processing time and could lead to repeated timeouts in high-volume environments.

The synchronization mechanism has now been enhanced with resume functionality. If the process is interrupted due to memory constraints or timeouts, it can continue from the last successfully processed point instead of restarting entirely.

This improvement increases stability and ensures that even very large assortments can be synchronized reliably and efficiently.

On the article group overview page, the call-to-action buttons were not always consistent across similar items. In some cases, products that should have shown a quote request action displayed a standard “View” button instead.

This behavior was caused by logic that did not fully align with how certain related items were configured and rendered within the listing.

The button logic has been corrected to ensure consistent behavior. Quote-request items now reliably display the appropriate quote action, while regular items continue to show the standard view button.

For end-of-life articles with limited stock, the quantity validation in the basket was not consistently enforced when users manually entered a number in the quantity field.

When a customer entered a quantity higher than the available stock directly in the input field (for example, 50 units while only 38 were in stock), it was still possible to proceed to the next checkout step. The stock validation worked correctly when using the “+” and “–” buttons, but not when manually editing the quantity.

In addition, the validation state was not properly synchronized:

  • The “Next” button remained disabled after a stock overrun, even when the quantity was corrected below the available stock.
  • After refreshing the basket containing an over-ordered item, the stock warning disappeared and the order could proceed without proper stock validation.

The stock control logic has been corrected to ensure consistent validation, regardless of how the quantity is adjusted. Manual input, button controls, and basket refresh scenarios now all trigger the same stock validation behavior.

This prevents customers from continuing with quantities above the available stock and ensures clear, reliable feedback within the basket.

Product images shown in the order list were not always updated after changes were made to the article images in the system.

As a result, outdated or previously cached images could remain visible in the order overview, even though the correct and updated image was already available at article level.

The image handling logic for the order list has been adjusted to ensure that updated product images are correctly retrieved and displayed. Image references are now refreshed consistently, preventing outdated visuals from appearing in the order history.

This ensures that the order list accurately reflects the current product imagery across the platform.

The Shoxl shop supports bundled property filters, allowing multiple related product properties to be grouped into a single filter in the webshop. This keeps the filter panel structured and helps customers navigate large assortments more efficiently.

In certain scenarios, the product counts displayed next to filter options were not recalculated correctly after selecting a filter. As a result, the numbers shown did not always reflect the actual remaining product set.

The filter logic has been improved to ensure that product counts are dynamically and accurately updated after each filter selection. The displayed numbers now consistently represent the correct number of matching products.

This ensures a reliable and transparent filtering experience, especially when working with bundled filter configurations.


Sprint 69

January 16, 2026

This release strengthens Shoxl’s position as an ERP-driven commerce layer by expanding how we leverage structured ERP data in the shop.

The foundation for ERP-based spare parts search (starting with Microsoft Dynamics F&O) has been completed, enabling structured retrieval of spare parts directly from the Bill of Material. This lays the groundwork for a scalable aftersales flow aligned with ERP product structures.

At the same time, we enhanced the product configurator experience. Component selection now supports stock visibility, allowing users to see availability during configuration.

On the integration side, we further strengthened our Exact Online integration. Packaging unit synchronization has been improved to prevent unintended article creation for inactive units.

Finally, this sprint includes a substantial refactoring of key filter functionality within our shops. Multiple edge cases around sorting, filter reset, brand filtering, color visibility, and property value imports have been resolved. The result is more consistent filtering behavior, predictable search results, and a more robust experience across the platform.

We are introducing a new spare parts search capability that enables users to find replacement components for assembled products directly from the underlying Bill of Materials (BOM). This feature is designed to support complex, multi-component products and will make spare part ordering significantly more structured and intuitive.

The functionality is inspired by a structured spare parts flow where users:

  • Select a product category.
  • Refine by product subcategory.
  • Choose a specific product variant.
  • View all related spare parts based on the configured spare part BOM.

Instead of manually identifying individual components, the system will automatically retrieve spare parts from the ERP based on the active spare part BOM linked to the selected product. Only BOM versions marked as Spare Part = Yes and Active = Yes are considered leading. From there, all relevant BOM lines are extracted and presented as orderable items.

Technically, this is powered by integration with Microsoft Dynamics 365 Finance & Operations (F&O). The implementation retrieves:

  • BOM versions that qualify as active spare part lists.
  • All associated BOM lines that represent the actual spare parts.

Once a product variant is selected, the spare parts defined in its active spare part BOM become directly visible. These components can be added to the basket from the same interface, enabling a streamlined ordering process for aftersales and service scenarios.

In this release, the technical foundation for this capability has been completed. The underlying architecture, data retrieval logic, and ERP integration for F&O are in place. The functional rollout of the spare parts search interface is expected in the upcoming release.

Although the first implementation is focused on F&O, the design is platform-agnostic. The architecture supports expansion to other ERP platforms such as SAP and Exact, which can be enabled based on demand.

This lays the groundwork for a scalable and ERP-driven spare parts experience, fully aligned with structured product data in the source system.

The product configurator allows users to compose a product by selecting variants and optional components directly from the article group or product detail page. This creates a guided configuration flow where the correct variant is selected first, followed by the relevant components.

The component dropdowns can now optionally display the stock status of each individual component within the selector. This provides immediate insight into availability during configuration, helping users make informed choices before adding the composed product to the basket.

When working with multiple packaging units in Exact, each packaging unit linked to an item is created as a separate article in the portal. This allows customers to order the same product in different units, such as piece, box, or pallet.

If a packaging unit becomes inactive or expires in Exact, it should no longer be available for ordering. However, these inactive units could still be included in exports, potentially resulting in unintended article creation in the portal.

The Exact Online BatchInterface now synchronizes Unit master data. This enables the map-package-units-to-article-numbers flow to exclude inactive units from exports, preventing articles from being created for expired packaging units.

When displaying real-time stock levels in the webshop, negative stock values can appear if the ERP allows backorders. However, showing a negative quantity does not provide meaningful information to end users and may cause confusion.

A new ShowNegativeStock setting has been introduced to control how negative stock is handled in the webshop. This allows you to prevent negative quantities from being displayed, ensuring stock information remains clear and relevant for customers.

Within the optional ArticlesOverview layout, users can filter products by selecting a main category from the dropdown above the filter menu. The right pane then displays all products within that category, optionally including subcategories.

A bug caused the selected category filter to be lost after changing the sort order or navigating to another page in the product list.

This has been resolved. The net price and category filtering now remain active when sorting or switching pages, ensuring consistent and predictable product overviews.

On shops with a dedicated Brand page, users can select a brand image to view all products associated with that brand. This redirects to the search page with the selected brand applied as a filter.

When users subsequently refined the results using additional filters, the brand filter was unintentionally lost, causing all products to be displayed instead of only those belonging to the chosen brand.

This behavior has been corrected. The selected brand filter now remains active when applying additional filters, ensuring consistent and accurate search results.

In certain scenarios, color filter options remained visible even when no products were available in that color. These options were sometimes disabled instead of being fully removed, which could create confusion.

The color filter logic has been adjusted. Unavailable colors are now hidden from the filter, ensuring that only applicable options are shown to the customer.

On the article overview page, a selected filter could unintentionally reappear after resetting the filters and then changing the sort order of the results. This led to inconsistent filtering behavior.

This issue has been resolved. Filters now remain properly cleared after a reset, regardless of subsequent sorting actions.

Stock levels for article variants were not fully synchronized, which could result in incomplete or incorrect availability information for variant-based products.

Multi-key synchronization has been added to the Microsoft Navision BatchInterface. This allows stock quantities per article variant to be retrieved and synchronized correctly, ensuring accurate availability for products with multiple variants.

When managing relation types in Vendisto, the pagination and search functionality in the overview did not work correctly. This could give the impression that newly created related article types were limited or not fully visible.

The pagination and search behavior has been corrected. The relation type list now displays all available entries correctly and supports proper searching and navigation.


Sprint 68

December 29, 2025

Sprint 68 builds on Shoxl’s core strengths: turning ERP-driven processes into a smooth online sales and service experience, with full flexibility in how shops and portals are designed.

A major leap is the improved product configuration experience. The Article Selection Wizard and the Product Configurator now work as one flow on the article group page, so customers can select the right variant and immediately configure components without switching pages.

Stability has been improved where it matters most under heavy load. Webshops can be protected more effectively against aggressive external indexing, keeping storefronts responsive during peak crawler activity.

Product configuration has been significantly enhanced by combining the Article Selection Wizard (ASW) with the Components interface.

Previously, the ASW was available on the article group page to select the correct product variant based on properties. Component selection, however, was only available on the individual article page—after a specific article had been selected.

With this improvement, the Components selector is now directly integrated into the article group page. As soon as the ASW results in a single matching article, the component selection is automatically activated and displayed.



 

This creates a seamless configuration flow: users can first select the correct variant and immediately choose additional components—without navigating to a separate page.

The result is a faster and more intuitive product configuration experience, reducing clicks and streamlining complex product selection.

For configurable products, users can compose an article by selecting options or components on the product page. The chosen configuration is then displayed as a combined item in the basket.

When navigating back to the product page from the basket, the previously selected components were not shown. This meant users had to reconfigure the product from scratch.

The selected options are now correctly restored when returning to the product page. The configuration remains visible and editable, exactly as it was added to the basket.

This improvement makes it easier to review or adjust complex product configurations without losing previous selections, resulting in a smoother and more efficient buying experience.

The components interface allows users to configure a base product by selecting additional options or components. These selected options can influence the final product price.

In certain cases, the total amount for the configured bundle was not displayed correctly. While individual component prices could be selected, the calculated total was not shown in the interface.

The total price calculation is now correctly rendered within the components interface. Users immediately see the combined price of the base product and selected options.

This ensures full price transparency during product configuration and provides clearer insight into the financial impact of selected options.

The article group overview now supports sorting by article number. This provides an additional way to organize product listings, particularly useful when working with structured assortments or internally referenced product codes.

When sorting by article number, individual articles are ordered accordingly. If both articles and article groups are shown in the same overview, the article groups are automatically placed at the bottom of the list to maintain a clear structure.

This enhancement makes it easier to quickly locate specific products and improves efficiency when navigating larger product ranges.

When browsing the classification structure, the shop automatically advances to a lower classification node, article group, or article if only one option is available.

If multiple automatic steps were required, the navigation previously triggered a chain of 302 redirects. Each intermediate level caused an additional redirect before reaching the final destination.

This flow has been optimized to use a single redirect, even when multiple levels are skipped. This reduces the number of HTTP 302 responses generated during navigation.

When exporting account managers through the Exact BatchInterface, the status was not always set correctly upon creation. This required manual activation before the account manager could be used.

The export logic has been adjusted so that account managers are now created with the status set to Active by default.

This ensures that newly exported account managers are immediately available in Exact without additional administrative steps.

Some shops became unresponsive due to intensive indexing by external agents. These automated crawlers generated high resource consumption on the server, affecting overall performance and availability.

An investigation was conducted into blocking specific high-impact agents at IIS level. By configuring URL Rewrite rules in IIS, selected agents can automatically receive a 403 (Forbidden) response. This prevents unnecessary processing of their requests and significantly reduces server load.

The rules can be applied globally at server level or configured per website, depending on the desired scope. This provides flexibility while ensuring that legitimate traffic remains unaffected.

This approach helps safeguard shop performance, improving stability and responsiveness during periods of heavy automated traffic.

The reorder function in the order history did not always provide clear feedback when certain articles were no longer eligible for reorder. As a result, users were left without insight into why a reorder action could not be completed.

The feedback mechanism has been improved. When an article cannot be reordered, the user now receives clear and relevant information about the reason.

This makes the reorder process more transparent and prevents confusion when previously ordered items are no longer available under the same conditions.

The article import supports splitting and merging article groups using the Group ID column in the Excel import file.

During a merge, suspended variants could unintentionally switch to an active status. This occurred when the first article in the merged group previously belonged to a suspended article group.

The merge logic has been corrected. Variant statuses are now retained exactly as defined in the import, so suspended articles remain suspended after merging.

When orders are calculated in real time, integrations rely on consistent field names and complete address details. Small mismatches in the endpoint definition can lead to avoidable mapping work or failed validations.

A new CalculateOrderV3 endpoint definition is now available for implementation. It introduces a DivisionCode, includes invoice and delivery address information, and corrects several field name spellings.

  • DivisionCode support for scenarios with multiple divisions or entities.
  • More complete invoice and delivery address data in the contract.
  • Spelling corrections in field names to improve consistency and reduce mapping issues.

This helps integrations exchange cleaner, more reliable order data and reduces the risk of discrepancies between systems.

The interaction between Mollie webhooks and the order process has been aligned with the PlaceOrderMode configuration. Previously, webhook handling could behave independently of the selected order flow, which made payment processing harder to predict in certain scenarios.

Webhook behavior now follows the configured order placement mode. Whether an order is placed before payment, after payment, or without a PSP redirect, the webhook processing aligns with that selected flow. This ensures consistent handling between payment status updates and ERP order posting.

In addition, extra logging has been added to the webhook component. This provides more detailed insights into payment callbacks and simplifies troubleshooting when investigating payment-related behavior.

This results in a more predictable checkout experience and improved transparency when diagnosing payment or order flow issues.

In release 66, a global setting was introduced to hide all prices across the platform. This allows shops to completely suppress price visibility in scenarios where pricing should not be shown.

In the new basket layout, this setting was not yet fully respected in all configurations. As a result, prices could still appear in certain basket layout variations.

The basket logic has now been aligned with the global hide price setting. When price visibility is disabled, prices are consistently hidden in the basket—regardless of the selected layout.

This ensures the global pricing policy is enforced uniformly, supporting business models where pricing is conditional or restricted.

A new backend service has been implemented for the ImportExport Dashboard. This service processes and stores events generated by various import and export tasks.

All task-related events are logged in a dedicated database. These logs will be surfaced in the upcoming ImportExport Dashboard interface.

This enables structured tracking of completed import and export jobs, including access to detailed error and warning information per task.

When browsing through the article table, some product properties could temporarily disappear after navigating between pages. This made it harder to compare items and review key product details.

The table rendering has been corrected so that properties remain consistently visible when moving between pages.

This ensures a smoother browsing experience and helps users make selections based on complete product information.

The partial export in the Navision Batch Interface periodically retrieves all new or modified records. In high-traffic webshops, the volume of updates could grow significantly, causing export processes to overlap before previous runs were completed.

The export mechanism has been updated to support batched partial exports. Instead of processing all updates in a single run, records are now handled in controlled batches.

This prevents overlapping export jobs, reduces peak load on the integration layer, and ensures more stable processing during busy periods.


Sprint 67

December 5, 2025

Sprint 67 further strengthens Shoxl’s role as a seamless extension of ERP systems such as Exact Online and Microsoft Dynamics 365 Finance & Operations. Several improvements focus directly on aligning webshop behavior with real ERP business logic.

A key step is the refinement of dropshipment processing in both Exact and F&O environments. Orders with alternative delivery addresses now follow ERP expectations by default, preventing unwanted address creation and keeping account data structured and clean.

Security and access control have been tightened through centralized 2FA governance. Two-factor authentication can now be enforced at platform level while remaining configurable at user level.

For organizations operating multiple shops, classification-level authorization has been expanded to facilitate easier maintenance of large assortments per shop instance.

Finally, the daily commerce flow continues to mature. Among other things, the Article Selection Wizard has been refined for clarity and reliability.


When a shop user places an order on behalf of a customer and specifies a different delivery address, Exact Online automatically creates a new delivery address under that shop user’s account. This system behavior cannot be disabled and caused one-time dropshipment addresses to remain permanently linked to the account.

To resolve this, a new Dropshipment flag has been added to the Delivery Methods settings in the webshop. During checkout, users can indicate that an order is a dropshipment and provide an alternative delivery address.

In the Exact BatchInterface, a new setting called DropShipmentAccountNumber has been introduced. When an order is marked as a dropshipment, the delivery address and related contact details are created under a dedicated dropshipment account instead of the ordering user’s account.

This prevents one-time delivery addresses from cluttering regular account data, keeps customer records structured, and improves data quality within Exact Online.

In the Article Selection Wizard (ASW), certain property values are displayed visually—such as colors or other graphical indicators. In some cases, it was not immediately clear what a specific option represented based on the visual alone.

To improve clarity, the corresponding property value is now shown in a tooltip when hovering over these visual options. This applies to colors as well as other visually represented properties.

This enhancement makes variant selection more transparent and reduces uncertainty when choosing between visually similar options.

The Article Selection Wizard (ASW) is designed to help users quickly select the right product variant within an article group. When a product group contains multiple variants with different product properties, the ASW provides an alternative to a traditional article table with filters.

Instead of browsing a table, users can select property values through dropdowns or selectable pills. As selections are made, incompatible property values are automatically disabled. This makes it easy to narrow down to a valid product combination in just a few clicks.

In situations where icons were expected for property values but not available, the wizard did not properly fall back to displaying text values. As a result, certain options were not shown as intended.

The ASW now automatically switches to a text-based display when icons are missing. This guarantees that all product options remain visible and selectable, ensuring a smooth and reliable product selection experience.

Delivery schedules define which delivery dates are available in the shop and until when an order can be placed (cut-off time). A base schedule is configured per day of the week, with optional date-specific overrides such as holidays or custom delivery days. Overrides can apply to all customers or to specific customer selections, offering maximum flexibility in delivery planning.

When a large number of customers was linked to a delivery schedule, the detail screen in Vendisto could become unresponsive. Extensive customer collections caused the interface to freeze for a prolonged period, impacting usability.

The internal handling of customer collections within the delivery schedule component has been optimized. This ensures stable and responsive behavior, regardless of the number of customers associated with the schedule.

As a result, delivery schedules can now be managed smoothly—even for complex setups with large customer groups—supporting efficient campaign planning and reliable delivery management.

Stronger account security can now be managed more consistently across the platform. Two-factor authentication (2FA) behavior is configurable in a clearer and more centralized way.

The default 2FA setup is controlled through the Account API settings. This allows you to enforce two-factor authentication for all users or define the default authentication method through configuration. Changes no longer require adjustments in multiple locations.

  • Enforce 2FA platform-wide via configuration.
  • Set the default 2FA method centrally.
  • Adjust security behavior without custom development.

This approach simplifies security management, reduces configuration ambiguity, and ensures a consistent authentication experience for all users.

Users can now manage their own two-factor authentication (2FA) preference directly from the account environment. A new option has been added under My Account > General > Security, allowing users to enable or disable 2FA themselves.

This gives users greater flexibility in how they secure their accounts, while keeping the experience straightforward and transparent.

If 2FA is enforced at administrator level, the option is automatically disabled. This ensures that centrally defined security policies always take precedence.

The result is a better balance between user autonomy and centralized security control.

Classification node–level authorization has been extended to support multi-shop environments where multiple classifications exist within the same product structure.

Shoxl can now handle multiple classifications linked to different shop instances. During synchronization, product data from Vendisto (PIM) is distributed per classification to the corresponding shop database. This ensures that each shop receives only the data relevant to its assigned classification.

To prevent conflicting authorization behavior, multi-category support cannot be combined with classification node–level authorization. This combination has been disabled to ensure predictable and consistent access control.

This enhancement enables clearer separation between shop environments while maintaining structured and controlled product visibility.

Classification Excel import and export now support AuthorizationProfile columns. When the ClassificationNodeAuthorizations license is enabled and the UseMultiCategory setting is set to false, these columns are fully processed as part of the classification structure.

With this change, authorization configuration at classification level can be managed directly through the Classification import and export workflow.

When the ClassificationNodeAuthorizations license is active, AuthorizationProfiles are no longer handled through the Article import/export process. This ensures a clear separation between product data management and classification-level authorization control.

Automatic vouchers are applied when the basket total exceeds a predefined threshold. In certain scenarios, when the basket total later dropped below that threshold, the voucher handling logic behaved inconsistently.

This could lead to unexpected voucher removal and, in some cases, an error during checkout that prevented the order from being completed.

The threshold validation and voucher handling logic have been corrected. Basket recalculations now behave consistently, ensuring that checkout proceeds smoothly without unexpected errors.

This improvement safeguards promotional campaigns and prevents disruption in the checkout flow when basket totals change.

Within specific Microsoft Finance & Operations integrations, an alternative delivery address must always be handled as a dropshipment. The F&O setup assumes that any deviation from the default delivery address represents a dropshipment scenario.

To support this requirement, the webshop setting DropShipmentOnAlternativeAddress has been introduced. When enabled, the system automatically applies the DROPSHIPMENT delivery method whenever an alternative delivery address is used.

This logic is enforced in both the CalculateOrder and PlaceOrder processes, ensuring consistent behavior throughout the order flow and alignment with the F&O processing model.

The Vendisto Customer Export has been extended to include the Division Code when integrated with Microsoft Finance & Operations.

The DataAreaId from F&O is now exported as the Division Code through the F&O Batch Interface. This ensures that customer data reflects the correct organizational structure when processed externally.

By aligning export data with the division structure in F&O, integrations become more accurate and easier to manage across multiple legal entities or business units.

The Authenticator API has been extended to support the Microsoft Client Credentials flow. This enables the service to request and manage access tokens for Microsoft Finance & Operations.

By handling token retrieval centrally, integrations with F&O can rely on a consistent authentication approach across applications, reducing configuration effort and simplifying ongoing maintenance.

This enhancement strengthens the foundation for secure and scalable ERP connectivity.

In previous releases, authorization behavior had to be configured during deployment, with multiple possible setup options. While flexible, this added unnecessary complexity behind the scenes.

Authorization is now fully managed through a single central service. This ensures a consistent and reliable validation process across the entire platform.

What’s in it for you? A more stable and predictable platform experience. By removing configuration differences between environments, we reduce the risk of unexpected behavior and improve overall reliability—without requiring any action from your team.

The former authorization setting has therefore been removed, as it no longer serves a purpose.

The WebService now supports authentication through the Authenticator API. This introduces token-based authentication as an additional authentication mode for web service requests.

By integrating with the Authenticator API, authentication is handled in a centralized and secure manner. Tokens can be managed consistently, reducing dependency on alternative authentication mechanisms.

This enhancement strengthens security for integrations while simplifying authentication management across connected systems.

The Navision Batch Interface now determines the order line status dynamically based on shipment information received from Microsoft Navision.

The status is calculated by comparing the ordered quantity with the quantity that has been shipped. This ensures that order lines accurately reflect their actual fulfillment state.

  • If the full quantity has been shipped, the status is set to Shipped.
  • If only part of the quantity has been shipped, the status is set to Backorder.
  • If no quantity has been shipped, the status remains Open.

This improvement provides clearer order visibility and ensures that customers and internal users see an accurate fulfillment status at line level.

In certain classification layers, product tiles in the article group overview did not always display the correct prices immediately. This could lead to incomplete information being shown while browsing product categories.

The pricing logic behind the overview has been refined to ensure that all relevant prices are loaded consistently across classification levels.

This improvement provides a more reliable and transparent browsing experience, allowing customers to view accurate pricing information directly within the product overview.

In some cases, static lists displayed in the basket remained stuck on a “loading…” placeholder. The order interface data was not compiled correctly, preventing prices and related order information from being rendered.

The underlying logic responsible for assembling the order interface data has been corrected. Static lists in the basket now receive the required order information, including pricing details.

This ensures that basket contents are displayed completely and accurately, giving users immediate visibility into pricing without delays or confusion during checkout.

Discount calculations in the Exact BatchInterface did not fully align with the logic used in the webshop. Total order discounts were previously calculated by adding discount percentages together, which could lead to differences compared to the basket calculation.

The discount logic has been updated so that discounts are now applied sequentially, matching the calculation method used in the webshop basket.

This ensures that total order amounts are calculated consistently across both systems, preventing discrepancies and improving financial accuracy in order processing.


Sprint 66

November 14, 2025

Sprint 66 pushes Shoxl further as an enterprise-ready e-commerce platform.

This release expands ordering flexibility with support for ordering without visible prices — ideal for a wide range of B2B scenarios.

With the introduction of 2FA, Shoxl shops gain an extra layer of login security.

At the same time, important performance optimizations have been implemented, specifically aimed at integrations with ERP systems that are not designed for real-time shop interaction, such as SAP and Microsoft D365 F&O.

The result is greater control, improved security, and a noticeably lower impact on ERP system performance.

Webshop users can now place orders even when no prices are shown anywhere in the shop.

With the hide prices setting enabled, all pricing information is fully hidden across product pages, listings, the basket, and checkout. This includes product prices, discounts, taxes, and order totals.

Despite the absence of any visible prices, users can still complete the full ordering process. To avoid exposing amounts during payment, ordering in this scenario is limited to order on account.

This is particularly useful for situations such as internal ordering, sales representatives placing orders on behalf of customers, approval-based purchasing flows, or environments where pricing is agreed offline and should not be displayed in the shop.

Note: In some views, empty placeholders may remain where price elements would normally appear. This does not impact functionality and ensures that shops where prices are visible continue to behave as expected.

Two-factor authentication (2FA) is now available to add an extra layer of security to webshop logins.

2FA can be enabled per company by an administrator, and can also be managed by users in the MyAccount section. Once enabled, users confirm their login with an additional verification step.



 

For the initial rollout, 2FA uses email verification, which is a widely adopted approach in B2B environments. During login, a one-time verification code is sent to the user’s email address and must be entered to complete the sign-in.

Several settings are available to tailor the 2FA behavior per tenant, including the default 2FA type, whether 2FA is enforced for all users, the code expiration time, and the maximum number of allowed attempts. Integration with an email service is configured via the EmailServiceUrl setting.

Authorizations in the shop determine which products customers are allowed to see. This is controlled through authorization profiles that can be linked to both customers and products, ensuring that customers only see items that match their assigned profiles.

Managing these authorizations was previously limited to the product variant level, which made maintenance time-consuming and fragmented. This update introduces the ability to manage authorization profiles directly at the classification node level.

When an authorization profile is assigned to a classification node, it is automatically applied to all products and variants within that node. If this feature is enabled, an Authorizations block becomes available on the detail screen of the lowest classification nodes, making it easy to manage visibility in one central place.

This enhancement provides a more efficient and scalable way to control product visibility, reducing the need for repetitive configuration on individual products.

New user rights have been added to provide more control over who can place orders or request quotes in the webshop.

You can now hide the order button or the quote button for specific users. This ensures that selected users are unable to place orders or submit quote requests, while still allowing them to browse the shop.

An additional option allows all prices to be hidden for a specific user across the entire shop, including product pages and the basket. Users with this setting can still go through the ordering process, but without seeing any prices. To prevent prices from being exposed, the only available payment method for these users is order on account.

All three rights can be managed either through the import/export module in Vendisto or via the webshop’s user management module.

A new Limited Order Calculation setting has been introduced to reduce load on connected ERP systems.

When this setting is enabled, the shop only performs lightweight price retrieval while users are browsing and updating the basket. Full order calculations—such as totals, vouchers, and additional cost lines—are no longer executed automatically on every change.

Instead, a new Calculate Order button is available directly in the basket. Full calculations are performed only when this button is clicked, or automatically when the user proceeds to checkout.

This approach significantly reduces unnecessary ERP calls while still giving users full control over when a complete order calculation is performed.

The basket has been optimized to reduce unnecessary calls to connected ERP systems and improve overall performance.

Instead of repeatedly requesting separate price data, the basket now relies on calculated order results. This ensures that pricing, totals, and related order data are retrieved in a more consistent and efficient way.

To further improve responsiveness, in-memory caching has been added for both price data and calculated orders in the ERP connectors. Cached responses are reused for a configurable period, reducing latency when ERP responses are slow.

The cache duration for price data and calculated orders can be configured independently, allowing performance to be tuned per environment while keeping pricing information up to date.

To improve reliability when delivering BMECAT data to the 2BA platform, the ProductGroup API has been extended with a new XmlSchemaLocation setting.

When this setting is configured, the exported XML includes a reference to the corresponding XSD schema. This allows the AutomaticProductImportManager to validate the XML against the XSD before it is sent onward.

If the validation fails, an email is automatically sent with the validation errors. This helps resolve issues earlier in the process and ensures that only valid, BMECAT-compliant data is forwarded to 2BA.

Order history data is synchronized from Exact Online to keep order information up to date in the shop.

Previously, adding a Track & Trace code to an existing order did not trigger an incremental update in the order history export. As a result, newly added shipment information was not shown in the shop.

This has been improved so that Track & Trace updates now correctly trigger a partial synchronization. Order history is updated incrementally, ensuring shipment information becomes available as soon as it is added.

When exporting articles through the FO Batchinterface, the classification structure could previously not be adjusted, which limited flexibility in how product data was exported.

This update introduces a new configuration option that allows you to define the maximum classification depth for the FO Article Export. This makes it easier to tailor exports to specific integration or reporting needs.

By controlling the classification depth, exported data becomes more focused and better aligned with downstream systems.

In Vendisto, relationship types allow you to define how articles are connected to each other. These types can be configured freely, for example to indicate related or complementary products, and are used to structure how these relations are shown in the shop.

One specific relationship type is Component. This type is used to define which components should be ordered together with an article, either optionally or as a required part of the purchase.

In some situations, newly created relationship types of the Component type could no longer be selected when linking related articles. This made it impossible to configure component-based product selections.

This issue has been resolved by correcting the underlying user rights handling. Component relationship types can now be selected again as expected, allowing component configurations to be set up and used correctly.

The address book in MyAccount did not fully support all available address formats, which could lead to errors or incomplete address information being shown.

In some cases, opening the address book resulted in rendering errors, even though valid and complete addresses were available. In other situations, the address book loaded without errors but displayed addresses missing key details such as street name or house number.

This update improves how different address formats are handled. The address book now correctly supports both combined and separated street address types, ensuring addresses are displayed consistently and without errors.

As a result, address data is rendered more reliably across the address book, Vendisto, and the ordering flow in the shop.

In some areas of Vendisto, certain icons were not displayed correctly, which could make parts of the interface harder to understand.

This issue was caused by a missing font file that is required to render these icons.

The font file has been restored, ensuring that all icons are displayed consistently and the interface is visually complete again.

When exporting pricelists, prices were previously limited to two decimal places. This could lead to rounding differences, especially for discounted prices with higher precision.

In certain scenarios, these rounding differences added up in the basket when larger quantities were ordered, resulting in totals that did not match the expected amount. This was particularly noticeable for promotional pricing.

The pricelist export has been improved to retain full decimal precision when retrieving prices from the source system. This ensures more accurate pricing calculations and prevents cumulative rounding differences in the basket.

The import/export module in Vendisto allows order lists to be imported from Excel for efficient order management.

Due to an issue in the import logic, importing multiple order lists from a single Excel sheet was no longer possible. This limited the ability to process several order lists in one import action.

The import logic has been improved, restoring support for importing multiple order lists from one Excel file. This makes bulk imports reliable again and helps streamline order list management.

Product detail pages support multiple languages, allowing visitors to switch between available translations using the language selector.

In some situations, using the language switch on a product page did not change the displayed language. Although the page was reloaded, the content remained in the same language.

This behavior has been corrected so that the language switch now loads the selected language properly on product detail pages. As a result, translated product information is shown consistently when switching languages.

In some scenarios, customers are linked to a different debtor using the Invoice-to setting from Exact Online, which defines where invoices should be sent.

This update introduces support for inheriting pricing from the linked invoice-to debtor. When a customer has an invoice-to relationship configured, the shop will now automatically apply the prices and discounts from that associated debtor.

As a result, promotional prices and special price periods defined on the invoice-to price list are shown correctly, even if the customer’s own price list does not contain those articles.

This enhancement makes pricing behavior more consistent with invoice handling and provides greater flexibility for setups where ordering and invoicing are handled by different debtors.

Vendisto supports separate email settings for order confirmations and quote-related communication, allowing each flow to be configured independently.

In some cases, email settings from order confirmations were applied to quote requests and quote confirmations instead of using the dedicated quote email configuration. As a result, configured BCC email addresses were not included in quote emails.

This has been corrected so that quote requests and quote confirmations now use their own email settings as intended. BCC addresses configured for quotes are once again included, ensuring all recipients receive the correct communication.

When using accumulative discounts with tiered pricing, product pages show a starting (“from”) price alongside the discount tier table to help customers understand the pricing structure at a glance.

In certain configurations, the displayed starting price was calculated incorrectly. The “from” price could show the lowest achievable price instead of the price for the lowest quantity tier, even when the UseAccumulativeDiscountsPriceDisplayOverride setting was not enabled.

This has been improved so the “from” price is now aligned with the lowest quantity tier when tier information is shown. The price table continues to reflect the correct tier prices, while the headline price is displayed consistently with the intended configuration.

Vendisto supports customer-specific VAT percentages to handle special tax scenarios without impacting other customers.

In certain cases, setting a customer-specific VAT percentage could unintentionally override the shop’s gross price tax configuration. This caused incorrect prices to be displayed for other customers.

This behavior has been corrected so that customer-specific VAT settings are applied only to the intended customer. Global pricing and VAT configurations for the shop remain unaffected.

Customer contacts are synchronized through the Microsoft F&O Batch Interface to keep contact information consistent across systems.

To prevent duplicate entries, new logic has been added that automatically deduplicates customer contacts during import. Contacts are matched based on first name, middle name, last name, and email address.

This improvement helps keep customer contact data clean and avoids unnecessary duplicates in Vendisto.

Customer availability in Vendisto is synchronized with data from Microsoft Navision through the Batch Interface.

The logic that determines whether a customer is considered active has been updated to better align with NAV data. Customers are now marked as active only when the Blocked field in the CustomerCard endpoint has no value.

This ensures that customer status is interpreted consistently with NAV, providing more reliable control over which customers can access the shop.

The search autocomplete dropdown has been enhanced to provide more detailed product information.

Article numbers are now displayed alongside product names in the autocomplete search results. This makes it easier to quickly identify the correct article, especially when multiple products have similar names.

This improvement helps speed up searching and reduces the chance of selecting the wrong product.

When working with baskets that contain a large number of articles, it was not always clear that prices were being recalculated after changing quantities.

The quantity selector now immediately shows loading feedback as soon as a quantity is changed. This makes it clear that the basket is processing the update, even before price recalculation is completed.

As a result, users receive clearer visual feedback during basket updates, improving the overall experience when managing larger orders.


Sprint 65

October 24, 2025

This release strengthens the bridge between shops, ERP systems and data pools. It introduces smarter data exchange, flexible address handling, and a richer customer experience.

Address handling has been upgraded with a flexible Address Book setup, allowing you to decide whether delivery addresses are managed locally or by the ERP.

A brand-new Dealer Locator Module adds an interactive map, search, and filters—helping customers find nearby dealers in seconds.

On the integration side, automated Trade Record Delivery to 2BA is now live, enabling direct BMEcat-based data exports to the 2BA platform. Supporting this, the Product API Enhancements introduce new converters (for units and tax), formatted date/time fields, and extended language code options to make data exchange more compliant.

And there’s more, such as saving baskets to Order Lists and displaying “From/To” Prices using Exact Online pricelists.

This update introduces a more flexible and configurable address management system for shops and portals, allowing a clear distinction between addresses managed by the ERP system and those managed locally within the shop.

In systems such as Exact Online, all delivery addresses are fully controlled by the ERP. To prevent duplication or inconsistent data, shops using Exact are now configured with the new AddressManagement setting set to ERP. In this mode, newly entered delivery addresses are not stored locally — they will reappear after synchronization from the ERP. For other ERP systems, the setting can be configured as Local, allowing users to manage their own address book within the shop.

Each address now includes an addressOrigin value (ERP or Local), determining its behavior. ERP addresses are read-only and cannot be edited or removed. Local addresses can be added, modified, or deleted by the user.

A revamped address book

In the My Account section, address management has been enhanced to clearly separate billing and delivery addresses. Each section lists centrally managed (ERP) addresses first — marked with “Managed by [shop name]” — followed by locally managed addresses. ERP addresses show only the “Set as default” action (if not already selected), while local addresses support editing, deletion, and default selection. All address edits happen inline, with clear save and cancel options, and deletion requires confirmation.

This enhancement provides better alignment with various ERP behaviors while giving flexibility to manage addresses efficiently within the shop or portal environment.

A new Dealer Locator module has been introduced, allowing shops to display dealers on an interactive map. Dealer data can be imported and managed through Vendisto using the import/export module.

The module can be placed on any shop page by selecting the DealerLocator page type or by inserting it through custom HTML tagging in Vendisto. It includes a dynamic map with dealer pins, a dealer list, and both search and filtering functionality. Clicking a pin opens a popup showing the dealer’s name, address, and website.

The dealer list can be searched independently. When a search is performed, both the list and the map automatically update to show only matching dealers. Visitors can also filter dealers based on specific attributes such as having a showroom, delivering to private customers, or operating a webshop.

Entering a city or address refines the results to show dealers closest to that location. The number of displayed dealers can be configured through the webshop settings.

2BA is a standardized data platform for the construction and installation sector that enables manufacturers, wholesalers, and software suppliers to exchange rich product and pricing information based on the BMEcat ETIM format. Integrating with 2BA allows suppliers to automatically publish their product data — including technical specifications, trade information, and prices — in a format recognized across the industry.

With this release, the ProductGroup API has been extended to support configuration of the BMEcat XML structure used for trade record generation. This enhancement enables customers to automatically deliver complete and structured trade data as zipped archives to the 2BA SFTP server.

From this point, customer implementation specialists can configure and activate the 2BA connection for live environments.

To support the 2BA BMEcat 2005 ETIM export format, several improvements have been introduced to the Product API and ProductGroup API. Both APIs already allow export of product data in XML, Excel, and CSV formats using configuration documents that map internal database fields to standardized output structures.

Key enhancements include:

  • Lookup Converter: Enables mapping between input and output values through configurable conversion tables (e.g., converting “pc” to “038”). This is used for translating Unit Codes such as Order Unit and Content Unit.
  • Date/Time Fields: New System_Now token and Format property allow exporting the current date and/or time as part of the output file.
  • Tax Conversion: A new converter type exports tax percentages (e.g., “21”) as decimal values (“0.21”), improving compliance with BMEcat requirements.
  • Language Code Extension: Added support for three-letter ISO language codes (dut, eng, etc.) following ISO 639-2 standards, allowing XML attributes like lang="dut" in exports.
  • XML Configuration Improvements: The API definition now supports namespaces, root attributes, and nested settings. A new XmlRootField enables inclusion of import settings sections in XML output and supports exporting localized values using LcidValueFormat (e.g., lang="nl" instead of lang=1043).

Together, these enhancements provide the flexibility and precision required to generate fully compliant BMEcat exports, ensuring seamless synchronization of product and pricing data with the 2BA datapool.

A new feature allows users to save their entire shopping basket as an order list, making it easy to temporarily store an order and place it later.


Storing a basket as an order list


Users can create multiple order lists, each functioning like a personalized collection of frequently ordered products — similar to a favorites list, but more powerful. Entire order lists can be reloaded into the basket at any time, enabling quick and efficient reordering.

This enhancement offers greater flexibility for users who regularly place similar orders or want to prepare and organize future purchases in advance.

Exact Online supports multiple types of pricelists, each with a distinct purpose and hierarchy. A standard pricelist defines the base customer prices. A discount or promotion pricelist can temporarily override these base prices, while a special offer pricelist (“aanbieding”) applies short-term or campaign-specific prices. Pricelists can be linked to one another, where promotional lists reference the customer’s main standard list to determine the original prices.

When a standard pricelist of the type aanbieding is created, the shop now automatically displays the original (customer-specific) price as the “from” price and the price from the active standard pricelist as the “to” price.


Displaying from/to prices


This provides a clear and consistent way to show discounted pricing in the shop. It’s also possible to define a promotion period within a pricelist for a specific product, which produces the same “from/to” pricing effect.

Exact Online performs regular maintenance between 4:00 and 4:45 AM (CET). During this period, the service may be temporarily unavailable, which previously caused issues for customers operating in other time zones where this window overlaps with working hours.

When Exact Online does not respond, the system automatically retries order submissions several times. If these retries fail, the order is moved to the “failed orders” folder. While notifications were being sent, orders remained unavailable in Exact until manual action was taken.

To address this, email notifications in the Exact Batch Interface have been refined: alerts are now suppressed for expected HTTP responses such as Service Unavailable to avoid unnecessary warnings during planned maintenance.

Additionally, a new AppOffline setting has been introduced. This allows configuration of maintenance or downtime windows in the Exact Online Batch Interface, ensuring that retries and notifications behave predictably when Exact is temporarily offline.

This improvement prevents confusion and redundant alerts, particularly for international users affected by time zone differences.

The Vendisto Customer data model has been updated in preparation for upcoming credit limit functionality. These changes lay the groundwork for enforcing and displaying credit limits within the shop in a future release.

Both the Vendisto WebServices and XML import processes now support an extended <BuyOnCredit> structure that includes the following sub-elements:

<Enabled> <Limit> <Remaining> 

This new structure replaces the previous single-node format <BuyOnCredit>Y</BuyOnCredit> and provides a more detailed and standardized way to exchange credit-related data between ERP systems and Vendisto.

The implementation remains backward compatible, supporting both the old and new XML formats depending on version. The CustomersImport model has been upgraded to version 2.3, and the updated structure is now fully documented under that version. No changes have been made to the Excel import or export functionality.

These improvements enable seamless synchronization of customer credit information, paving the way for future enhancements where shops will actively use and monitor credit limits during ordering.

Added native support for a language switch dropdown, which can now be configured through the LanguageSwitchMode setting in Raven.

This enhancement allows shops to easily adjust the visual presentation of the language selector, aligning it with the site’s overall design and improving usability for multilingual users.

The Microsoft Navision stock export now correctly includes article variants by applying the Variant_Filter when retrieving inventory data.

This ensures that stock levels are accurately matched to specific product variants, preventing inconsistencies when multiple versions of the same item exist. The improvement enhances synchronization accuracy between NAV and the shop or portal, especially for environments that rely on detailed variant-level stock control.

In Vendisto, Raven indexing is no longer started or stopped during synchronization with the shop. This behavior, originally required for older Raven 3 implementations, is obsolete in Raven 5 and has been removed. The change reduces the risk of sync-related errors and improves overall stability.

Additionally, index creation and cleanup are now managed through a post-deploy script in Octopus, which triggers the new Raven Index Manager. The legacy Elmah logger and profiler have also been completely removed from the shop environment, further streamlining system performance and maintenance.

Resolved an issue where suspended or deleted articles could leave behind residual access permissions on categories. This caused users to see categories without any active products.

The system now properly removes obsolete authorizations, ensuring that only categories containing visible products are displayed to users. This improves the overall browsing experience and keeps category navigation clean and accurate.

In the My Account section of Shoxl shops and portals, users can access a Downloads area containing customer-specific or general downloadable files. Previously, the pagination in this overview was missing, limiting the visible list to a maximum of 10 items.

This issue has now been resolved. Pagination has been restored, ensuring that all available downloads — whether customer-specific or global — are displayed correctly and accessible to users.

Resolved an issue where external article numbers — defined via webshop settings or SQL mappings — were not included in the PlaceOrder JSON payload. This omission specifically affected shipping cost items, causing incomplete or inconsistent order data in certain integrations.

The external article numbers are now correctly included for all order lines, ensuring accurate synchronization with connected systems and consistent order processing.

Resolved an issue where stock validation did not function correctly when using the article table with checkboxes and the “Add selection to basket” button. This caused items with insufficient or zero stock to be added to the basket, even in shops configured to prevent ordering out-of-stock products.

The stock check logic now applies properly within the article table component, ensuring consistent behavior across all product views and preventing unavailable items from being ordered.

Resolved an issue that prevented orders from being placed when article descriptions contained illegal XML characters. These characters caused errors during order export and blocked processing for affected items.

Article descriptions are now automatically sanitized before being written to XML, ensuring that orders containing such items can be placed successfully without manual correction.

Resolved an issue where searching for partial article numbers could result in incomplete or empty search result pages. The search function now reliably returns all relevant matches when users enter fragments of an article number, ensuring consistent and accurate results across all product searches.

Improved the synchronization and clean-up process for outstanding invoice data. In some cases, outdated records were not being properly removed, which could cause incorrect open amounts to appear alongside invoices.

The enhanced data clean-up now ensures that obsolete invoice details are deleted as intended, resulting in accurate and up-to-date outstanding amounts throughout the invoicing overview.


Sprint 64

October 3, 2025

This release focuses on giving users more control, stronger security, and a smoother shopping experience.

Shops now support authorizations on article properties, allowing businesses to tailor exactly what information each customer can see. Logging in has also become easier—users can always sign in with their email address, even if it’s linked to multiple accounts , with streamlined activation and password resets built in. Search results are smarter too, prioritizing article numbers, titles, and key fields so customers find what they need faster.

On the security side, reCAPTCHA V3 is now active across all front-end pages, silently protecting forms from spam and abuse. And in order history, customers can filter by delivery date , making it easier than ever to track and review past orders.

Together, these updates strengthen trust, speed up daily tasks, and give customers a clearer, more efficient shopping journey.

Authorizations can now be applied to article properties, ensuring that properties are only shown to users who have access rights. When authorizations are defined, these are respected across the entire storefront, including product detail pages, filters, and article or group tiles.

The Vendisto API and database have been extended to support creating, updating, and retrieving properties with authorizations. These authorizations are automatically synchronized with the shop through fast-sync. If no authorization is set, the property remains visible to all users.

Note: This functionality is only available for customers with the Authorizations or AdvancedAuthorizations license modules.

Outcome: Properties in the shop are now shown only to authorized users, improving control and consistency while ensuring that existing functionality remains unaffected through regression testing.

Previously, logging in with an email address was only possible if that address was unique within the administration. Users with a shared email address could only log in through the representatives module, which required additional manual setup.

We have extended the login system so that email addresses no longer need to be unique. When an email address is linked to multiple customer accounts, the user is presented with a list of accounts they can access. This makes it possible to always log in using an email address instead of a username or debtor number.

In addition, account activation and password resets have been enhanced. For email addresses linked to multiple accounts, these actions can now be completed in one step. This was not previously supported, and required manual activation by administrators.

Outcome: Logging in, activating, and resetting passwords is now simpler and more consistent for all users, even when an email address is associated with multiple accounts.

The webshop search has been optimized to deliver more accurate and relevant results. Search queries now prioritize matches in a logical order: article number, GTIN/EAN, title, description, and finally properties. This ensures that products most closely matching the search terms appear at the top of the results.

Additionally, when multiple keywords are used, the search now applies an AND condition, showing only results where all terms apply. This makes it easier for users to quickly find the exact products they are looking for.

To improve protection against automated abuse, reCAPTCHA V3 has been activated across all front-end pages. This ensures that interactions such as newsletter subscriptions are safeguarded against spam and bot activity, while keeping the user experience seamless.

The order history has been enhanced with an additional option to filter by delivery date. This makes it easier for users to quickly find and review past orders based on when they were delivered.

The basket feedback did not always display the most recently added article due to a bug. This issue has been fixed, ensuring the latest item is always shown to the user. As part of the fix, several performance improvements were made, resulting in faster and smoother handling of basket-related actions.

For admins and representatives with access to thousands of customers, loading the customer list could take a long time, especially when logging in on Safari or iPhone. This has been improved by introducing lazy loading. The list now loads much faster while search functionality remains just as quick and responsive, even with very large datasets.

Previously, when moving a classification node in the tree, users had to manually reload the page before continuing with additional changes. This extra step has been removed. The tree now refreshes automatically after each move and reopens the last active location, making it easier and faster to manage multiple node adjustments in sequence.

The read-more functionality in article descriptions did not work properly when large descriptions contained HTML elements. In those cases, the description was not split correctly, causing the read-more button to appear only at the end of the full text or not at all. This has been corrected so that descriptions are now consistently truncated and expanded as intended.

Authorizations define which customers can access specific products, product properties, and content items. By combining authorization profiles with customer assignments, it becomes possible to shape entirely customer-specific shops where users only see elements they are allowed to access.

With this update, changes to authorizations in Vendisto are now reflected in the shop almost instantly thanks to an improved fast-sync process. This applies to both product-level authorizations and authorizations on product properties. Updates for customer authorizations will be optimized in a future release.

Outcome: Managing customer-specific access is faster and more efficient, ensuring that updates in Vendisto are visible in the shop without delay.

Exporting very large price lists with millions of product, customer, and price combinations could previously cause memory errors and system crashes. The price list XML export has been rewritten to handle memory more efficiently, ensuring greater stability and reliability even with extremely large datasets.

Outcome: Nightly synchronizations with high record counts (such as 1.4 million entries) now complete successfully without memory issues.

Customers reported that not all available color options were shown on product pages. This was caused by an indexing issue in the product data, which prevented the full set of variants from being displayed. The underlying problem has been corrected, ensuring that all color variants are now visible in the catalog.

In some cases, the article overview did not display VAT labels when showing from/to prices. This has been corrected so that VAT information is always visible alongside discounted prices.

Some users were not seeing the full set of categories available to them. This was caused by an error in the logic that generated the first-level dropdown menu when combined with user authorizations. The issue has been fixed, and the category menu now correctly displays all options a user has access to.

Article imports could fail in some environments. The root cause was a missing database stored procedure required during classification merging.

This has been corrected by ensuring the procedure is created and invoked during import. As a result, article imports now complete reliably without errors.

Article imports could fail due to timeouts while retrieving data during synchronization. The root cause was long-running database reads in the sync pipeline.

This has been addressed by optimizing the data retrieval path and improving timeout handling. Imports now complete reliably without timing out.

In the February release, some outdated upgrade scripts were removed to improve database compatibility. During this cleanup, one script required for bulk article imports was unintentionally excluded from new setups. This caused import errors in certain environments.

The issue has been corrected, and all required scripts are now included again, ensuring that article imports work as expected on new installations.

The Shoxl shop supports searching with customer-specific product numbers through the MatchCustomerProducts endpoint. In the SmartLynx integration of this API, two issues were resolved:

  • Errors when requesting CustomerProducts.
  • A problem that occurred when opening the basket in the shop.

With these fixes, the integration now works reliably without returning server errors.

The article synchronization process between Vendisto and the shop could trigger database timeouts, leading to errors during FastSync. This was caused by inefficient queries that performed excessive scans per row.

The queries have been optimized to reduce database load and improve efficiency. As a result, article synchronization is now faster and more reliable, even with large datasets.

When displaying the basket, the shop previously triggered too many calls to the ERP system. This could lead to slow response times, especially for shops using the real-time REST API with slower ERP systems.

The process has been optimized to deduplicate API calls, greatly reducing the load on the ERP system. As a result, basket performance is now faster and more reliable.


Sprint 63

September 12, 2025

 

This sprint brings a strong mix of usability upgrades and deeper ERP integrations, making the platform smoother for both customers and back-office teams.

On the shop side, repeat buyers will love the new option to save their basket as an order list—perfect for quickly reordering without starting from scratch. Checkout flows also received attention with the introduction of Pay.nl integration, giving merchants and shoppers access to a wide range of popular payment methods. And with account activation and password resets now fully routed through the Account API, account management has become more consistent and future-proof.

For ERP users, we’ve deepened our Navision integration with improved user tracking and precise discount handling, ensuring order and pricing data stays clean and reliable. At the same time, Exact Online users benefit from smarter synchronization and better rights validation, making it easier to keep systems in sync without unexpected interruptions.

Together, these updates focus on speed, clarity, and trust—helping your customers move faster through the shop while ensuring your business processes stay rock-solid behind the scenes.

 

Users often want to reuse a composed basket for future purchases without re-selecting items. To streamline repeat ordering, the basket now supports saving its full contents as an order list.

  • A new Save as Order List button appears in the basket header (icon placed before the trash/remove-all icon).
  • Clicking the button opens the standard dialog to select an existing order list or create a new one.
  • From the basket, all items are added to the chosen list in a single action.
  • After saving, you remain on the basket page.

This improves speed and consistency for frequent orders while keeping the familiar order list workflow.

We added full support for Pay.nl, a leading Dutch payment service provider offering a wide range of online payment methods. Pay.nl enables businesses to accept popular options such as iDEAL, credit cards, Bancontact, and many others through a single platform.

Our integration follows the advanced implementation route. This means the shop dynamically displays the payment methods configured in Pay.nl, just like in our Stripe integration. Methods are shown contextually, based on:

  • Country-specific availability of payment methods.
  • Customer-specific configuration rules.

This approach ensures that customers only see relevant payment options, providing a seamless checkout experience while giving merchants maximum flexibility in managing their payment setup.

Account activation and password reset processes have been fully integrated with the Account API. Previously, these actions were handled directly in Vendisto, but are now centralized within the API for improved consistency and maintainability.

  • Account activation requests are processed through the Account API.
  • Password reset flows are also routed via the API.
  • This ensures a unified approach for authentication-related actions.

The change streamlines account management and provides a more robust foundation for future enhancements.

A new shop setting PaymentDiscountExcludeShippingCosts has been introduced. This resolves discrepancies between the webshop and ERP systems such as Exact Online, where shipping costs are not included in payment discounts.

When the setting is enabled, payment discounts are applied only to the product total, excluding shipping costs. This ensures the calculated totals align perfectly across systems.

  • Configurable setting: PaymentDiscountExcludeShippingCosts.
  • Discount can be calculated with or without shipping costs included.
  • Unit tests cover the exclusion logic for accuracy and stability.
  • Fully documented in the SettingsManager for easy reference.

This flexibility accommodates different ERP rules and prevents mismatched totals between webshop orders and ERP invoices.

A new setting, SalesOrderUser, has been added. When a sales order is created, this fixed value is stored in the order header in the CreatedByUser field. This makes it easier to identify and filter orders in Microsoft Navision based on the user who initiated the order.

A dedicated Navision connector has been implemented that leverages the Nav cache to provide price information. Unlike the generic ErpCache connector, which calculated prices using normalized data and did not meet the discount requirements, this connector ensures that discounts are applied correctly. This guarantees that discounts are not included when line discounts are disabled.

A new setting has been introduced that allows customer numbers to be automatically prefixed with their corresponding DataAreaId. This ensures consistency in environments where multiple business units are active.

When orders are placed, the prefix is automatically stripped so that requests are processed correctly, while all customer-specific integrations such as price retrieval and order history continue to function seamlessly.

  • Customer numbers can be stored with a DataAreaId prefix.
  • Prefixes are removed automatically during order submission.
  • Price requests, order history, and other customer-specific processes remain unaffected.

This update reduces the risk of errors and guarantees smooth handling of customer data across different processes.

An issue in the article selection wizard has been resolved. Previously, when adding additional items to the basket, the system repeatedly added the first selected variant instead of the chosen items. The fix ensures that the correct items are now added as intended.

An issue in the article overview has been corrected. When switching between list and tile views, a custom page size was previously ignored and reset to the default value. The fix ensures that the webshop settings are now preserved when changing the view.

A problem in the shop has been fixed where the email address was missing when activating a user. The activation message now clearly displays the address to which the activation email was sent.

The Logo column in the ArticleGroup Excel import and export tasks was not being processed correctly. This functionality has now been fixed. Please note that an ArticleGroup can contain multiple Images, Icons, and Documents, but only one Logo.

The ManualTokenRequester—the tool that generates the initial token to access Exact—has been extended with additional checks on token rights. It now verifies whether the token has sufficient permissions for the endpoints used by the Exact Batch Interface.

We improved the user experience on product detail pages by adding a more user-friendly loading message while prices are being retrieved. This makes it clearer to customers that pricing information is on the way, instead of showing a blank or confusing placeholder.

An issue affecting order synchronization with Exact Online has been resolved. Illegal characters in order references previously caused XML generation to fail. These characters are now sanitized in advance, ensuring smooth and consistent order syncing.

A problem in the article overview has been fixed where the Add to Orderlist button was only active for the first item. As a result, other items could not be added to the order list. The fix ensures that the button now works correctly for all items in tile view.

An issue in the basket has been fixed where cost lines were not calculated correctly when tax was set to 0. This caused Recupel and Bebat totals to remain at zero. The fix ensures that these totals are now calculated accurately.

A problem was resolved where importing non-existent .min.css files triggered unnecessary URL parsing, leading to a fallback to the default language. Static files are now excluded from this process, preventing unwanted redirects and ensuring the correct language is maintained.

The Exact Online Batch Interface, which synchronizes data from Exact to the shop, has been optimized. In rare cases, the synchronization process stalled due to database timeouts when retrieving customer data. The efficiency of the related SQL queries has been improved, preventing these timeouts and ensuring smoother synchronization.

An issue has been fixed where representatives with full access but without specific rights could not view the quote representatives overview. The overview is now accessible to all representatives with the appropriate access level.

Customers can now be linked to multiple vouchers. An issue in the database interaction limited each customer to a single voucher association, which has been resolved.

  • Customer import correctly assigns multiple vouchers to the same customer.
  • Voucher API supports creating and updating multiple voucher links.
  • Duplicate associations are prevented and validations are consistent.

This improvement gives more flexibility in promotions and ensures reliable voucher assignments during bulk imports and API operations.

An outdated feature in Vendisto caused an extra, unstyled order confirmation email to be sent alongside the correct one. This redundant email has been removed.

  • Only the properly formatted order confirmation email is now sent.
  • Prevents confusion caused by duplicate messages.
  • Fix improves consistency and customer communication.

This ensures customers receive a single, clear, and professional confirmation after placing an order.

We introduced a new pricing service within Vendisto’s FO connector that replicates the price calculation logic of Dynamics 365 Finance & Operations. This ensures that the shop can display accurate prices, including all applicable line discounts, before an order is created.

With this update, customers immediately see their final discounted price in the shop, instead of only at checkout. The service works independently of the standard F&O e-commerce module, making it broadly applicable.

  • Replicates F&O’s complex price calculation engine in Vendisto.
  • Shows correct discount prices directly in the shop.
  • Works even without the F&O e-commerce module.

This improvement enhances transparency for customers and creates a smoother ordering experience.

VAT numbers for new registrations were sometimes rejected due to recurring overloads at the EU VIES service for certain member states, even when the number was valid. This led to confusing feedback in the form.

We improved the validation flow and messaging to handle these situations gracefully and keep onboarding moving.

  • Clear status feedback: The form now distinguishes between an invalid VAT number, a VAT number already registered in our system, and a temporarily unavailable VIES check.
  • VIES fallback: When VIES returns a concurrency/overload response (e.g., MS_MAX_CONCURRENT_REQ), the submission proceeds and the VAT field is marked as “not validated”.
  • Notification continuity: Registration emails are still sent with an explicit “VAT not validated” note so follow-up can occur without blocking the customer.
  • Better error handling: The form shows an informative message instead of a generic error, guiding the user to continue or try again later.

These changes prevent false rejections, reduce friction during registration, and provide transparent next steps when external VAT validation is temporarily unavailable.

The platform now supports mapping custom order fields directly to the order line level in Microsoft Dynamics 365 F&O. This allows additional product-specific details entered during the ordering process to be stored and processed accurately within F&O.

  • Custom fields entered in the shop are linked to order lines.
  • Improves accuracy of order processing with customer-specific details.
  • Provides more flexibility for handling unique product or delivery requirements.

This enhancement ensures that all relevant information is seamlessly transferred to F&O, supporting both operational efficiency and customer satisfaction.


Sprint 62

August 22, 2025

 

Release 62 delivers major upgrades to product presentation and platform reliability.

The Article Group Overview has a new flexible layout, letting you place prices, discounts, logos, and labels as independent elements in both tile and table views. Product detail pages are clearer too, with separate From/To prices and a configurable “Read more” for long descriptions.

Pricing transparency improves with Recupel and Bebat shown as separate basket lines, a new max-stock display setting, and discount percentages visible directly in article overviews.

Operational stability is stronger across the board with various improvements under the hood. To mention a few: the Basket/Order List codebase is modernized to TypeScript, YouTube thumbnail handling is streamlined and the new XCG currency code is fully supported — so even our Caribbean customers can now shop smoothly without missing a beat. 🎶🌴

 

We redesigned the ArticleGroupOverview (both tile and table) to use modular building blocks, giving you precise control over what appears where—without forcing everything into a single price block.

  • Separate price elements: display From/BeforeDiscountPrice and To/CurrentPrice as independent items.
  • Discount badge: show the discount percentage as its own element in both views.
  • Logo placement: logo can be positioned as a separate element (also in list view).
  • Article label: label can be rendered as a standalone element (tile and list view).

Alongside the layout flexibility, a series of reliability updates improves behavior and consistency:

  • Clickable wrappers fixed: the RenderWrapper: true behavior now applies correctly so elements remain clickable as intended.
  • Balanced layout: EqualizeHeights is disabled for the new layout to prevent misalignment.
  • Variant icon logic: the fast-forward/variant indicator only shows where it is actually relevant.
  • Clean list pricing: no “from” price for items that belong to an article group in list view.
  • Column composition: multiple elements can share a single column without each getting an extra table-column wrapper (alignment matches the quantity control behavior).
  • Add to basket: works correctly when OrderQuantity and OrderButton are placed as two separate elements.
  • Responsive structure: the single quantity button now receives the proper responsive-table-col wrapper and stays within the table layout.

Stock visibility can now be controlled with the MaxStockToShow setting. When the actual stock exceeds this configured maximum, the system displays the limit followed by a plus sign. This helps avoid exposing unnecessarily large inventory numbers while still showing availability clearly.

  • Type: Number
  • Example: Setting = 25 → shown as “25+” when stock is higher
  • Default: null (full stock is shown)

Hovering over an asset used to always show the asset name in a popup, which could clutter the interface. This behavior is now optional and can be controlled via the new ShowAssetTitle setting.

  • Type: Boolean
  • Default: false (title hidden)
  • Enable the setting to show asset names on hover when needed.

This provides cleaner visuals by default, while still allowing flexibility for cases where asset titles are useful.

The Caribbean guilder (XCG) was not recognized in the Microsoft .NET environment, as its globalization libraries do not yet include this new ISO 4217 code. This could cause missing or incorrect symbols when formatting amounts in XCG.

We addressed this by refactoring the currency handling and introducing an internal ISO 4217 fallback. This ensures XCG is displayed correctly across the application, regardless of .NET’s current limitations.

  • Correct display and formatting for XCG amounts.
  • Fallback mechanism for other unsupported ISO codes.
  • Cleaner and more reliable currency handling logic.

Product and article group descriptions can now be limited to a maximum number of visible characters. When this limit is reached, the text is truncated neatly—at the end of a sentence if possible, or at the nearest space rather than mid-word.

A “Read more” button is automatically added below truncated content, allowing users to expand the full description and collapse it again with “Read less.”

  • Configurable maximum character count per layout.
  • Clean truncation for a natural reading flow.
  • Expandable and collapsible descriptions for a smoother user experience.

The “Read more” control on product pages has been rebuilt to handle description content safely and predictably. The new logic keeps HTML tags intact, only shows the control when extra content actually exists, and maintains a clean toggle state between expand and collapse.

  • No tag-splitting: the expander never breaks HTML elements.
  • Control appears only when text extends beyond the collapsed limit.
  • Stable toggle behavior—content doesn’t shuffle or duplicate on repeated clicks.
  • CSS refined to prevent layout jumps during expand/collapse.

The result is a smoother reading experience and accurate visibility of the “Read more/less” link across product pages.

We refactored the YouTube thumbnail generator to read the play-overlay image from the embedded resource registry instead of the file system. This is an internal change—videos and thumbnails continue to appear as before.

  • Eliminates file path dependency for youtube-play.png.
  • More reliable thumbnail rendering across environments.
  • No impact on end-user behavior or layout.

In Belgium, Recupel and Bebat are environmental contribution fees: Recupel applies to electronic devices for recycling purposes, while Bebat covers the collection and recycling of batteries. These supplements are mandatory and added on top of the product price.

The basket now clearly lists these supplements as separate cost lines for applicable items. This makes the environmental fees transparent and ensures the total basket value accurately reflects all obligations.

  • Recupel and Bebat shown directly in the basket.
  • Supplements no longer hidden in the product price.
  • Clearer cost breakdown for customers.

What was missing

In the product detail view, the pricing information always appeared as a combined “From–To” range. This made it less clear compared to the product overview, where the values are shown separately.

What we improved

The product detail page now supports showing the From and To prices as distinct elements. This ensures consistency with the overview display and makes it easier for customers to understand the pricing structure at a glance.

  • Clearer presentation of minimum and maximum prices.
  • Consistent layout across product overview and detail pages.
  • Better transparency for users comparing price ranges.

It was previously only possible to display discounts within the product detail page. This meant that customers browsing through the article list could not immediately see which items had a discount applied.

We’ve added the option to show the discount percentage directly in the article overview, both in the table view and in the tile view. This makes promotions more visible and helps customers quickly spot discounted products while browsing.

  • Discount label visible in both ArticleListTable and ArticleListTile.
  • Improved visibility of promotions at a glance.
  • Consistent display across product list and detail views.

A change in the price display logic unintentionally caused tiered discounts to appear, even when the configuration setting to hide them was turned off. This created confusion for users who did not expect to see quantity-based pricing.

The logic has been corrected so that tiered prices are only displayed when explicitly enabled. This ensures consistent behavior between the configuration and what is shown to end users.

  • No more unexpected display of tiered discounts.
  • Clear alignment with the configured settings.
  • Improved reliability of the price presentation.

What was happening

In release 2025.7, creating a new page in Vendisto could fail with the message “This name is already in use for another page in this language.” A generic “An error has occurred” notice also appeared.

What we changed

We corrected the page-title validation and restored a missing search component so that the unique-name check runs reliably. Creating a new page now works as expected when the title is available.

  • Accurate validation of page titles (no false “already in use” messages).
  • Stable behavior when saving a new page.
  • Clear error reporting if a real conflict exists.

Notes for admins

The failure was linked to a missing dependency in the indexing layer, which caused the validation endpoint to throw an exception. This has been resolved.

Resetting selected filters could occasionally break the overview page due to a bug in query-string handling, resulting in an “undefined” state.

We updated the reset logic to sanitize and rebuild query parameters safely, restoring default filter states without errors.

  • No more “undefined” results after reset.
  • Consistent page load and accurate defaults.
  • Cleaner URLs with valid parameters only.

Submitting the newsletter form could fail due to changes on the Mailchimp side, resulting in an error on submit. The integration has been updated and made more resilient, so sign-ups go through as expected.

  • Updated Mailchimp API handling to align with current requirements.
  • Graceful error paths and input validation to avoid false failures.
  • Concise error logging in the Mailchimp interface for faster diagnosis.

When navigating to the final pages of a product list, the pagination controls could shift and display an inconsistent number of page links. This behavior has been corrected.

  • Stable pagination display across the entire list.
  • Same number of visible page links on first, middle, and last pages.
  • Smoother navigation for users browsing large catalogs.

We migrated the Basket/Order List codebase from JavaScript to TypeScript to improve stability, maintainability, and developer productivity. The migration adds strong typing and clearer interfaces without changing how users work with the feature.

  • Predictable behavior through compile-time checks and better error handling.
  • Cleaner, more modular code for faster future enhancements.
  • New styled message dialog replaces the old browser confirm(), allowing consistent branding.
  • Minor UX polish applied across the Order List interactions.

No functional breaking changes are expected; the Order List continues to work as before, with a smoother and more consistent experience.


Sprint 61

August 1, 2025

 

Release 61 brings valuable new capabilities to both product configuration and checkout logic.

Mandatory supplements can now be defined per article, making it easy to enforce the inclusion of required components or accessories — complete with quantity settings. NAV integration improvements ensure these supplements are correctly transferred via both the XML import and the PlaceOrder interface.

Additionally, environmental surcharges such as Recupel and Bebat are now handled more intelligently: they can be shown as separate lines and applied conditionally based on the customer’s billing country.

The article group overview also benefits from a more flexible layout system, offering better control over how list and tile views are presented.

 

The webshop now supports supplementary articles based on the component module. These supplements are mandatory and can have a defined quantity. They are currently configured via the RelatedArticle XML import.

The RelatedArticle XML import now supports a Quantity attribute. This makes it possible to define how many units of a related component or supplement are included in the relationship, enabling more accurate data transfer from NAV.

The Navision Batch Interface has been extended to support supplementary articles in the PlaceOrder request. This ensures that required components linked to a main product are correctly transmitted during order submission.

A new Category attribute was added to the ItemCharge element in the XML structure. This makes it possible to show environmental charges like Recupel or Bebat separately in the basket, under their own translatable label as defined in the resource file.

Environmental charges such as Recupel or Bebat can now be applied based on the customer’s billing country. This is configured by matching the ISO 3166-1 alpha-2 country code in the ItemCharge to the debtor’s country code.

If no country is specified, the charge applies to all customers by default.

The article group overview page has been migrated to the new layout system. Both list and tile views now benefit from more granular layout options, providing improved control over presentation and structure.

To ensure accurate data for temporary price lists, the Exact Batch Interface now performs a full daily sync of both price list headers and periods. This replaces the previous partial update and improves consistency of pricing information.

Increasing the quantity of a composite article—an item with selected components—in the order list did not trigger a price recalculation. This has now been fixed to ensure that the total price updates correctly whenever the quantity of such an article is adjusted.

In the order list view, using the "Select all" button did not automatically set the quantity fields, requiring manual input per item. This has been fixed: after selection, each item’s quantity is now prefilled with its minimum order quantity as expected.

When loading related articles, authorization settings were not properly enforced. This allowed users to see items they were not authorized to view. The logic now correctly filters related items based on the user’s access rights.

In the new classification layout, the first-level category dropdown above the filter column did not respect user authorization settings or the configured category order. This has now been corrected—only permitted categories are shown, and they appear in the intended sequence.

The new category overview did not apply the correct article sorting, causing items to appear in an unexpected order. This has now been fixed, and articles are once again displayed in the intended sequence.

Due to unexpected null values in the underlying data, the generation of the SEO JSON blob occasionally failed. This caused issues when loading the article overview page. The handling of nullable data has now been improved to ensure reliable SEO output and page stability.

The add_to_cart event for Google Tag Manager (GA4) was being triggered twice due to overlapping implementations. The outdated AddToCart event has now been removed, ensuring accurate event tracking for cart actions.

In the category overview using PagingType 1 (classic pagination), the page indicator incorrectly remained on page 1 regardless of navigation. This issue arose after introducing the new “load more” paging method. The display now correctly reflects the active page when classic paging is used.

In the category overview, the "load more" button was incorrectly shown even when all articles were already visible on the initial page. This has been fixed—if there is only one page of results, the button is now hidden as expected.


Sprint 60

July 11, 2025

 

Release 60 delivers a solid set of enhancements focused on performance, visibility, and integration.

To help your products stand out in search results, we’ve added extensive support for structured data, including rich snippets for product details, navigation, and listings. This improves how your shop is interpreted by search engines — leading to better rankings and more informative previews.

It’s now also possible to post orders to external endpoints, opening the door to streamlined workflows with automation platforms like Zapier. And for industries where pricing changes quickly, we’ve improved the frequency and reliability of customer-specific price synchronization.

Behind the scenes, this sprint included a significant QA effort — with special attention to upgrading dependencies, improving .NET performance, and ensuring platform stability across the board.

Read on to explore everything Sprint 60 brings to your shop and integrations.

 

The webshop now includes structured data (in JSON-LD format) on all major content types to improve SEO and visibility in search engines.

Structured data helps search engines better understand the content of a page, and allows products and categories to be shown more attractively in search results — including pricing, availability, and navigation context.

The structured data is automatically rendered for:

  • Breadcrumb paths (via BreadcrumbList)
  • Category overviews (as ItemList of categories)
  • Mixed article and article group listings (with schema.org Product and ListItem)
  • Product detail pages, including brand, description, price, stock and SKU

This enhancement ensures that all available product information is included in a format that search engines can read and index more effectively, boosting both relevance and click-through rate.

It is now possible to automatically post order messages to a configured external endpoint after an order is placed.

This enables further integration with external tools or automation platforms (e.g., Zapier) that can process the message on the receiving side.

Resolved an issue where customer-specific prices and pricelists were not updated every 15 minutes as expected. This was caused by system crashes during frequent synchronizations with Exact.

More frequent updates are now supported, which is especially useful in sectors with fast-changing prices, such as fresh produce trading.

Implemented synchronization of charge items in the Microsoft Navision Batch Interface. This enables the display of deposit and environmental disposal fees — such as Recupel and Bebat — in the shopping basket.

Recupel and Bebat are environmental programs that manage the collection and recycling of electrical appliances and batteries in Belgium. These fees are legally required and shown transparently during checkout.

The product detail page can now display a "from - to price", using the price from the first pricing tier.

This feature is available when a discount is applied — specifically when PriceWithCurrency and OriginalPriceWithCurrency differ. The setting "ShowFromToPrice" must be enabled to activate this display.

Additionally, it is now possible to show the discount percentage, provided this value is supplied by the ERP system.

Type: Boolean
Default: false

The ShoxlRestService has been upgraded from .NET 6.0 to .NET 8.0, as support for .NET 6 has ended.

In addition to long-term support, .NET 8 offers performance improvements, better memory efficiency, and enhanced APIs that contribute to improved stability and maintainability of the platform.

A significant number of outdated and vulnerable packages were removed from the Vendisto.WebServices project in this sprint, improving security, performance, and maintainability.

This update involved a major quality assurance effort to verify stability across all components and integrations.

The cleanup is part of our ongoing process: we continuously allocate sprint capacity to updating and validating third-party dependencies.

Fixed an issue in the Voucher API where users not linked to a specific voucher were still able to apply it. This was caused by an error in the underlying query logic.

Access control checks now correctly validate whether a user is authorized to use a given voucher.

Fixed several issues in the order list view that affected checkbox functionality, including the "Select all" option.

The bugs also impacted automatic behavior related to quantity input and price calculations. These have now been resolved to ensure consistent selection and accurate totals.

Fixed a rendering issue where the prefilter UI block (e.g., for category filters) would not become active when placed on a page using custom tagging.

This update ensures that stepped or hierarchical filter blocks behave as expected, even in custom-tagged page configurations.

Resolved an issue where graduated (tiered) pricing was no longer shown on the product detail page.

This was caused by a change in the price rendering logic, which inadvertently suppressed the display of quantity-based pricing tiers.

Fixed an issue where valid VAT numbers were being rejected during registration of new customers on the French webshop.

The root cause was a failure in the VIES VAT validation service (EU's VAT Information Exchange System). VIES relies on national systems for validation — in this case, the French VAT backend. That system returned a "quota exceeded" error after reaching its request threshold (rate limit), causing VIES to return an empty or failed response.

This failure has now been handled gracefully to avoid blocking legitimate customer registrations when the French VAT service is temporarily unavailable or throttled.

The email address of the user who placed the order is now included in the order data, alongside the customer-level email address.

This additional information is available to all integrations via the OrderedBy field and can be used for tracking, notifications, or reporting purposes.

The DeliveryAddressName field from the F&O OData interface is now mapped to the internal ShippingName2 field in order headers.

This allows more specific shipping destination names (such as internal departments or delivery locations) to be displayed in the webshop's order history.

In the next release, it will be possible to configure this field via the layout settings so it can be shown as the customer name in the order overview.


Sprint 59

June 20, 2025

 

Release 59 brings another round of valuable updates to your shop and how you manage it.

A major update of the classification page layout options now lets you display subcategories above the product list, creating a clearer navigation experience. Authorizations can now also be applied to product attributes, giving you more granular control. We've also expanded the article group import/export to support classifications — streamlining your product management even further.

Be sure to check out the full release notes to see what Sprint 59 brings to your setup.

 

Classification pages in the shop have been significantly enhanced with new layout capabilities. It is now possible to show not only subcategories, but also all articles from all underlying classification nodes—directly on the classification page.





Three new layout components have been introduced:

  • First-level dropdown: A navigational dropdown that always shows the first level of the current classification. It can be positioned freely on the page.
  • Subcategory list: A compact block layout of child categories, each with an image and title. The number of visible blocks can be configured, with a "Show all" button to reveal more.
  • All articles list: Displays all articles from the selected classification node and its children. This component can replace the traditional subcategory list and can be combined with it for richer navigation.

In addition, a new paging mode is available:

  • Load more paging: Instead of numbered pagination, users can incrementally load articles by clicking a "Load more" button. The control shows how many articles are currently shown and how many remain.

These components are configurable per classification node and allow shop administrators to define whether to show subcategories, products, or both. Shop-wide defaults can also be set to define behavior starting from a specific classification depth.

Vendisto already supports advanced authorization logic that allows you to control product visibility per user group. This capability has now been extended to individual article properties, giving you fine-grained control over which users can see which product details.

Authorizations can be configured manually in the Vendisto interface or programmatically via the API. Any changes—such as adding or removing authorizations—are automatically synced to the shop. This feature requires either the Authorizations or AdvancedAuthorizations module to be active.

Example use cases include:

  • Show only high-level product features to unauthenticated users, while showing full technical specifications to logged-in customers.
  • Display different price labels (e.g., advisory price) to different user groups based on their profile.

Note: This is the first step of a larger rollout. In an upcoming sprint, the shop will begin enforcing these authorizations during display and filtering.

A new option has been added for shop users to hide product prices both in article overviews and on article detail pages. This feature is intended for use in showroom or demo environments where displaying prices may not be appropriate.

The option is only available to authenticated shop users and can be toggled based on the context in which the shop is used.

Tiles in dynamic lists that display news items can now show additional information. New display options include:

  • Category
  • Subtitle
  • Tags
  • Source
  • A "read more" link

This makes news overviews more informative and engaging for users.

The ArticleGroup Excel import has been extended to support full classification structures, including:

  • Multiple classifications per article group
  • Multiple categories (nodes) per classification
  • Positioning of article groups within each classification node

The format now aligns with the Article Excel import, using dedicated columns for each classification level and position. Depending on the database structure, column names follow the pattern:

  • ClassificationLevel[n] and Position — for a single classification and category
  • ClassificationLevel[category]_[n] and Position[category] — for one classification and multiple categories
  • ClassificationLevel[classification]_[n] and Position[classification] — for multiple classifications
  • ClassificationLevel[classification]_[category]_[n] and Position[classification]_[category] — for multiple classifications with multiple categories

This enhancement ensures greater flexibility when importing structured product hierarchies into Vendisto.

A new option has been added to the ArticleGroup import to define how unknown classification paths should be handled during import:

  • Enabled: the importer will automatically create the classification path if it does not yet exist.
  • Disabled: the importer will generate a validation error for rows with unknown classification paths.

This enhancement offers more control and flexibility when importing data into environments with incomplete or evolving classification structures.

The ArticleGroup import supports Excel files with multiple classification nodes across multiple classifications. To ensure data consistency, the import process now performs detailed validation on all Classification, ClassificationLevel, and Position columns.

If any inconsistencies are found, the import will be aborted. Instead, the system returns the uploaded Excel file with an additional Error message column. Problematic rows are highlighted in red to help you quickly identify and correct the issues.

After importing articles into Vendisto, the classification structure is synchronized to the shop’s performance database. For large classifications, this process runs in multiple batches.

Previously, the synchronization could fail due to timeouts when handling large data sets. To address this, the batch size used during classification structure synchronization is now configurable. This allows for better handling of large imports and more stable processing.

Although VAT rates should ideally be managed in the ERP system, that’s not always feasible—especially for products with different VAT rates across countries. For example, a product might be taxed at a high rate in one country and at a reduced rate in another. Some ERP systems, noticeably Exact Online, lack the flexibility to handle such variations.

To support multi-country shops more effectively, Vendisto now allows regional VAT rates to be defined per product during article group import. This ensures correct VAT handling without relying solely on the ERP system.

The brand filter is no longer a fixed element in the filter UI. Instead, shops are encouraged to use a product property to represent brand—just like any other product characteristic. This provides much more flexibility, including full control over filter placement, visibility, and behavior.

The former hardcoded brand filter offered limited configuration and always appeared in a fixed position. While it is still technically available for backwards compatibility, it is no longer used by default in new shops or templates.

Authorization profiles control the visibility of products and content based on the customer's access rights. Previously, Vendisto allowed these profiles to be managed on both the product and the product variant level.

To simplify profile management and avoid redundancy, support for product-level authorization profiles has been removed. From now on, only product variant–level authorization is used.

As part of this simplification, the related AuthorizationProfile columns have also been removed from the ArticleGroup Excel import and export.

A bug in the basket logic prevented products with only optional extras—where no selection was required—from being added to the basket unless at least one option was chosen. This has been corrected. Such products can now be ordered without selecting any options.

The article selection wizard includes an option to automatically update the main product image when a specific article is selected. This functionality was unintentionally broken due to a recent change, causing the image not to update correctly.

The issue has been resolved, and the gallery image now updates as expected when using the selection wizard.

When viewing a news detail page, a "back to overview" button is shown to help users return to the news list. In some cases, this button redirected incorrectly—leading to a 404 error or the homepage.

This issue has been resolved. The back button now reliably returns users to the correct news overview page.

Articles imported from Exact Online can now reflect the statuses "Temporarily Not Available" and "End of Life". This allows products to be hidden from the shop when they are temporarily unavailable or no longer offered.

Because Exact Online does not natively support these statuses, a custom free field is used to carry this information. To enable the feature, the setting ArticleAvailabilityStatusFreeFieldNumber must be configured by Shoxl. The designated free field should then contain one of the following exact values:

  • TemporaryNotAvailable
  • EndOfLife

These values will be interpreted automatically during the import process and applied to the corresponding articles in the shop.

We’ve expanded the D365 Finance & Operations interface to support more complete and localized product data management. These enhancements enable deeper integration and improve data quality across systems.

The following additions are now available via OData endpoints:

  • Multilingual product category support, including hierarchy structure via:
    • ProductCategories
    • EcoResCategoryTranslationBiEntities
    • ProductCategoryAssignments
  • Product-specific attachments and images via:
    • ReleasedProductDocumentAttachments
  • Enriched product metadata through article attributes via:
    • ProductAttributeValuesV3

These changes provide better support for multilingual, media-rich, and attribute-based product data across different operational contexts.

The XML Place Order interface now supports CustomOrderFields, which were previously only available via the REST-based PlaceOrder call.

This extension was introduced to support the batch integration with Dynamics 365 F&O, which relies on the XML interface and require access to custom order metadata.

Vendisto now includes a fallback language system for article descriptions during export. When a language code (LCID) is required but not found, the system will attempt to resolve the LCID based on the language code attached to the entity.

If the language cannot be resolved, the first language defined in the system (as configured in Octopus via the Languages variable) will be used as fallback.

This ensures that exports always include a valid language, even when translation data is incomplete. The supported language codes are: nl, fr, fi, de, en.

The Shoxl platform consists of a set of different web applications and web APIs that we continuously improve and extend with new functionality.

To streamline the management of all upcoming features, user stories, and bug fixes, these work items are organized into sprints as part of the Scrum development methodology.

At the end of each sprint, we create a new release for most of our applications. Although we use high-end tooling to support the release process, some tasks still require manual intervention—such as updating internal references between different Shoxl projects.

To reduce this manual effort and accelerate the process, we have started the development of the Shoxl.ReleaseManager. This tool aims to automate those repetitive steps and further streamline our release pipeline.

To ensure complete product data in all languages, Vendisto uses a fallback mechanism that fills in untranslated content—such as classification nodes, product names, variant labels, and image titles—with text from the default language.

The ShopManager tool, used during new shop rollouts, will now automatically configure this fallback language for all non-default languages. This allows shops to launch with full product structure even before translations are available, and translate later at their own pace.

The shop uses Postmark to send transactional emails, such as order confirmations and password resets. These emails are based on templates that can be customized depending on the shop’s license.

During the rollout of new shops, the ShopManager tool automatically creates a corresponding Postmark mailserver account. A bug was causing this account creation to fail. This issue has now been resolved.


Sprint 58

May 30, 2025

 

Sprint 58 brings powerful upgrades to the order history, with advanced filtering, sorting, and smart search options. We’ve also improved packaging unit handling in our interface with Exact Online, extended our Microsoft D365 F&O interface with support for product data, and ensured performance stability with heavy traffic caused by search engines indexing your site.

Plenty of smaller features and fixes too — from VAT accuracy to external image syncing to multi-currency price exports.

👉 See something useful? Reach out to Shoxl — we’re here to help you get the most from our evolving e-commerce platform.

 

The order overview has been upgraded with an advanced view that helps users quickly locate relevant orders through enhanced search, filter, and sort capabilities.

This new view includes:

  • Search functionality by order number, customer reference, article number/name, and order date.
  • Filters by order status (e.g. All, Open, Delivered, In progress).
  • Sorting options on all order-level columns, both ascending and descending.
  • Improved paging and significantly better performance.




The search requires a minimum of one character and displays a clear result set, including a customizable "no results" message when applicable. Long result lists include a “show more” option to reveal additional items in batches of 20. A clear filter icon allows users to quickly reset search and filter inputs.

This functionality is only available when the Shoxl ERP caching layer is active and must be explicitly enabled through the LayoutSettings.

In Exact Online, it's possible to define multiple package units for a single article (e.g., units, boxes, pallets). To represent these in the shop, the Exact Batch Interface can create separate articles for each package unit. Each of these receives a unique name—typically the article description followed by the unit size—since Exact does not assign a unique GTIN/EAN to each packaging variation, but the shop requires unique identifiers.

Until now, each of these generated articles was placed in its own article group, resulting in multiple single-item groups. This approach ensured consistency with the shop's structure (which always expects article groups and their variants), but it also meant that no variant selection page was shown.

A new feature now allows these related articles—each with a different package unit—to be grouped automatically together under a single article group using the MapPackageUnits:GroupArticles setting in the Exact Batch Interface. This results in a true variant experience for visitors when multiple packaging options exist.

The article group page then displays all variants, allowing users to choose between package units through icons, a dropdown menu, or a list format—depending on the shop's configuration.

We’ve introduced a deeper integration with product master data in Microsoft Dynamics 365 Finance & Operations, making it possible to manage commercial product content directly from F&O—similar to how a PIM system would operate.

This advanced interface allows for:

  • Multilingual product category support and full category hierarchy integration via OData endpoints.
  • Access to product images and attachments through ReleasedProductDocumentAttachments.
  • Retrieval of article-level attributes via ProductAttributeValuesV3, enabling enriched metadata and filtering.

These enhancements bridge the gap between ERP-managed product data and rich e-commerce presentation, supporting localized content, better filtering, and consistent product experiences across markets.

An OData layer has been introduced on top of the Shoxl Webservices used to retrieve order history data from the ERP cache, the cache we use to store ERP data in the background to speed up retrieval and display.

OData (Open Data Protocol) is a standard protocol for querying and updating data using RESTful APIs. It allows clients to request only the data they need, apply filters, sort results, and handle paging—all using a consistent and widely supported format.

With this new layer, it is now possible to access order history data more flexibly and efficiently. The OData implementation supports advanced filtering, field selection, and pagination (such as skipping or limiting results), making it ideal for integrations and reporting tools.

This feature requires the ERP Cache connector to be active and an API key to be configured for secure access.

The article group import functionality has been extended to support multiple classifications, including the ability to specify article group positions per classification path.

Previously, the import format supported a single Position field, which was not sufficient when dealing with multiple classifications or deeper category structures. With this enhancement, the import can now handle multiple classification paths and assign specific positions within each path.

To achieve this, the import format now allows repeated pairs of fields: ClassificationPath_1, Position_1, ClassificationPath_2, Position_2, etc. These fields map to the ClassificationNodePosition and ArticleGroupPosition values in the ClassificationNodeArticleGroup table.

In systems with multiple classifications, an additional level of indexing is used: for example, ClassificationPath_1_1 and Position_1_1. The first number indicates the classification index, while the second indicates the position within that classification structure.

The classification path includes both the path itself and the name of the classification. The import supports the following scenarios:

  • Single classification and single category
  • Multiple categories within a single classification
  • Multiple classifications
  • Multiple classifications with multiple categories

After the import, all updated article group positions are automatically synchronized to the shop.

Vendisto supports assigning an article group to multiple classifications when configured accordingly. However, the bulk Excel import function in the PIM encountered an issue when different classifications contained identical node names at the top level of the structure.

This caused the importer to match article groups with the wrong classification, which in turn resulted in incorrect categorization and—in some cases—a generic "Unknown error" during import.

This problem has now been resolved. The import logic has been updated to correctly distinguish between identical node names across multiple classification trees, ensuring accurate classification assignment during bulk import operations.

Shops often receive background traffic from search engines that scan and index product and content pages. In certain cases, this indexing activity caused unnecessary load, which could lead to performance degradation or temporary unresponsiveness.

This issue has been resolved by optimizing the way such traffic is handled. The shop now processes background indexing more efficiently, maintaining stable performance even during periods of intensive crawling by search engines.

In Exact Online, it's possible to assign the same email address to multiple contacts within a single customer account. This can lead to duplicate user creation attempts when ImportContactMode is enabled, as each contact would trigger the creation of a user with the same email and user ID—causing import errors.

To resolve this, a deduplication mechanism has been implemented. When ImportContactMode is not set to None, the system will now create exactly one user per unique email address within a customer, based on the combined set of the main contact and associated contacts.

Email addresses must always be unique within a single customer. This is necessary because email can be used as a login credential in the shop. The Shoxl platform supports login via either debtor number or email address—but email-based login only works correctly when the address is unique within the customer's scope.

An email address may appear in multiple customer accounts. If a user logs in with such an email address, and that address is linked to several customers, the system will prompt the user to select the correct account from a list.

This enhancement ensures a consistent import process, prevents duplicate user errors, and guarantees correct login behavior based on unique user identities.

In the Vendisto platform, users—not companies—log in to the shop. When a customer is imported without any associated contacts, a default user is automatically created to enable login.

Previously, if contact data was imported at a later stage, Vendisto would create a user account for each contact and delete any users not included in the import—based on the assumption that the contact user list was complete. As a result, the initially created default user was removed.

This caused confusion for customers who had already started using the shop with the automatically created default user account. Once contacts were supplied, the default user could suddenly no longer log in, even though the credentials were still familiar to the customer.

This behavior has now been corrected. The system will preserve the default user that was created during the initial import, even if contacts are imported at a later time. This ensures uninterrupted access for users who were already logging in before contact data became available.

Resolved an issue in the quote request flow where the payment method was automatically preselected as "Buy on Credit" if it was available for the customer. If this method had a configured payment discount, the discount was incorrectly applied during the quote process—even though no actual payment was being made at that stage.

This caused unintended pricing behavior and confusion during quoting. The logic has been adjusted so that payment discounts are no longer applied in the quote flow.

As a result, quotes now reflect the correct pricing without prematurely factoring in payment-related discounts.

The Microsoft Navision Batch Interface has been updated to correctly handle non-product order lines, such as shipping costs.

Previously, all order lines—including cost lines—were assigned a LocationCode. However, Navision does not support location codes on non-inventory items, which caused the order to be rejected with an error.

The system now omits the LocationCode for lines that are not linked to physical products, ensuring smooth order processing in Navision.

The PriceList export in the Batch Interface has been updated to correctly support multiple currencies per item. Although the XML format already allowed this, the internal implementation did not fully process prices defined in different currencies.

With this improvement, customer prices can now be exported with multiple currency values—for example, both USD and EUR—within the same export block. Each NettoPricePerItemExclVat and DiscountAmountPerItemExclVat field includes a Currency attribute to clearly indicate the applicable currency.

This enhancement enables better international pricing support and integration with systems that require multi-currency price structures.

A bug has been resolved that affected the interaction between quantity selection and the "Add to Basket" button in order lists (used to manage favorites).

Users could increase or decrease the quantity using the plus/minus buttons, which correctly activated the "Add to Basket" button. However, when entering a quantity manually via keyboard input, the button became inactive—preventing the product from being added to the basket.

This issue has been fixed. Both manual input and use of the plus/minus controls now consistently activate the "Add to Basket" button, ensuring smooth ordering from order lists.

Resolved an issue in the Exact Batch Interface where the Customer Price export incorrectly applied an exchange rate conversion based on the article’s default currency, rather than the currency specified for the actual customer price.

This resulted in prices being exported with unintended currency conversions, leading to incorrect price data being returned to the shop or external systems.

The export logic now correctly uses the currency associated with each price entry, ensuring that no unnecessary or incorrect exchange rate conversions are applied.

Resolved an issue in the shopping basket where the total VAT amount was not recalculated after increasing the quantity of an item.

This caused the displayed VAT to remain incorrect until the page was refreshed or reloaded. The logic has now been corrected to immediately update the VAT total in real-time when quantities are adjusted, ensuring accurate tax display at all times.

Product images in the Shoxl shop can be uploaded and managed directly in Vendisto. Some customers, however, manage product images externally and reference them using image URLs instead of uploading them.

Previously, the synchronization from Vendisto to the Shoxl performance database did not correctly process externally hosted image URLs. As a result, images were sometimes missing on the product overview pages, even though they were visible on the article group page.

This issue has now been resolved. Images provided via external URLs are now properly handled during synchronization and consistently shown in all parts of the shop.

A bug in the Vendisto article import process caused classification nodes to be matched using their title instead of their internal name. This led to the creation of duplicate nodes whenever the displayed title differed from the system name.

This issue has now been fixed. Classification nodes are correctly matched based on their name, preventing unintended duplicates during import.

Resolved an issue where downloadable files could not be saved correctly in Vendisto when the user interface language was set to anything other than Dutch.

This problem was caused by language-dependent handling in the file creation process. The logic has now been corrected to ensure that downloads function properly regardless of the selected UI language.


Sprint 57

May 9, 2025

 

Sprint 57 brings smarter variant selection directly in article tiles, making ordering faster and more intuitive. Behind the scenes, we’ve made key progress on multi-shop PIMsupport and improved handling of packaging units in Exact Online. And we completed our Microsoft Navision integration.

Plenty of smaller enhancements too — worth a look!

👉 See something useful? Reach out to Shoxl, we’re here to help you benefit fully from the ongoing improvements to our e-commerce platform.

 

The article group overview page previously only showed the number of available variants per article group, without the option to select a specific one.

It is now possible to select and order a specific variant directly from the tile (or row, in list view). The selection dropdown is based on a product property that uniquely identifies each variant within the group—allowing for immediate and precise ordering.


Variant Ordering in Article Tiles


On both the article group overview page and the article group detail page, articles can be added directly to the shopping cart when the Quick Order functionality is enabled. The presence of elements such as the order button, pricing, product features, and stock information may vary per article group.

To ensure a clean and consistent layout, technical improvements have been made. Article cards now maintain equal height without relying on scripts, regardless of which elements are shown.

On article group overview pages, article groups with only one article can be ordered directly and typically show stock availability. When an article group contains multiple variants, users must first navigate to the detail page to select and order a variant.

In some cases, when both types of article groups were shown together in the same overview, the stock status was not displayed for groups with just one article—despite it being possible to show it there. This has now been corrected: stock information is displayed consistently for article groups with a single article.

Previously, the Exact Online integration included a setting that enforced ordering in the highest packaging unit when multiple units were defined for an article. In the webshop, this could be displayed in two ways: either purchasing in the largest packaging unit with its corresponding price, or purchasing per base unit with a calculated unit price, while requiring a multiple of the packaging quantity.

This approach has now been replaced by a more flexible and transparent setup. In Exact, you can now define a minimum number of base units per order, as well as the increment in which the item must be purchased. Additionally, if multiple packaging units are specified for a single item, each unit is now shown as a separate article in the webshop.

This change eliminates the need for the old ‘PriceUnitType’ setting and simplifies both setup and ordering logic.

In the upcoming release, articles representing different packaging units will automatically be grouped into a new article group. The minimum order quantity setting will continue to apply when ordering per base unit.

Static product lists embedded in content pages can now display the full order interface, including the order button and quantity selector.

This ensures consistent ordering functionality, regardless of where the list is used within the webshop.

The ArticleGroup Excel export has been updated to support both multiple classifications and multiple category assignments per classification.

Instead of using a single 'Classification Path' column with slash-separated values, the export now follows the same structure as the article export. Classification and level data are split into separate columns using a structured naming convention.

This includes:

  • Level_[category position]_[n] for single-classification setups with multiple category levels
  • Level_[classification position]_[n] for multi-classification setups with one category per classification
  • Level_[classification position]_[category position]_[n] for combined cases

The export also includes corresponding Classification_[n] columns to identify classification roots, enabling full import compatibility.

Vendisto now supports the import and display of customer-specific VAT rates.

This allows tailored tax handling per customer, based on external system configuration.

Uploading images in Vendisto would fail when the filename already existed, even if the upload was valid. This blocked users from replacing or updating existing images via the UI.

The issue has been resolved, allowing seamless uploads regardless of whether the filename already exists.

In environments where multiple shops are connected to a central PIM system—each with its own local (slave) PIM—it is now possible to block article data from being imported into the slave system.

This allows shops to import only locally relevant data, such as lifecycle status, while excluding centrally managed product content from the article XML feed.

It is now possible to place orders to Vendisto using the BuyOnCredit payment method in environments with multishop configuration.

This extends compatibility of the BuyOnCredit method with newer order routing logic across shops.

The ShippingCostAPI now correctly falls back to the general shipping cost configuration when no specific rates are defined for a user's linked pricelist.

This fallback already applied to guest accounts and is now consistently applied to all user types.

In certain configurations involving article groups and the article selection wizard, external image URLs were not displayed correctly. This was partly due to invalid characters in the image paths.

The handling of external images has been improved to ensure they are now properly shown in both overview and detail pages, regardless of the component combination used.

Users with full access rights were previously unable to open quote details, despite having the correct permissions.

This has been resolved so that authorized users can now view all quote details as expected.

News categories consisting of multiple words were not filtered correctly in the webshop. As a result, clicking on such a category did not always return the expected articles.

This issue has been resolved. News category filters now work properly, regardless of the number of words in the category name.

When a classification node or product is renamed in Vendisto, the corresponding shop URL changes. The previous URL is then stored as a historic reference, intended to automatically redirect to the updated URL.

A bug in this redirection process has been resolved. Historic URLs now reliably redirect to the correct new location when accessed by users.

When a classification node or product is renamed in Vendisto, the corresponding URL in the shop changes. The system automatically registers the old URL as a historic reference.

If a user accesses the old URL, the shop now correctly redirects to the updated URL.

An XML-based import option for product relations has been added, following the same structure and behavior as the existing Excel import.

This allows external systems to synchronize product relationships in a single step, without leaving outdated data behind.

The Microsoft Navision integration now supports ordering article variants. Previously, variants were not available in the webshop when using this ERP connection.

This enables full support for product variant structures in both browsing and order processing.

Within the Microsoft Navision integration, variant articles managed now support fallback pricing. If no price is defined for a variant, the system will automatically use the base article’s price.

This ensures consistent pricing behavior, even when variant-specific prices are omitted in the data source.

When logged in as a representative, the user dropdown menu now correctly displays 'Choose another customer' instead of 'Sign out'. This matches the behavior already present in the customer portal.

Previously, when a user switched from 'List View' to another display mode (such as 'Tile View'), the setting would revert back to the default view after applying a filter.

This behavior has been corrected. The selected display mode now stays active when filters are used.

In cases where a product had no image of its own, the webshop would automatically use the image from the first variant during synchronization to the performance database.

This mechanism did not trigger when the main product had a PDF document but no image. This has now been corrected: images from variants are once again used as fallback, even if a PDF is present at the main product level.

The view_item event in Google Tag Manager was not triggered in certain cases, causing product views to be missed in tracking.

This has been corrected so the tag now loads reliably across all relevant pages.

Orders that included component articles were incorrectly flagged as failed during the purchase tracking step. This led to confusion in order confirmation reporting.

The logic has been updated to properly recognize and process these types of orders.

When a guest account places an order, the integration between the shop and Exact Online can automatically create a corresponding customer record.

Previously, these records were created without a country setting, causing Exact to apply the default country code 'NL'—even for international customers. The country is now correctly derived from the invoice address.

The article table component could fail to render when the layout included AccumulatedProperties and one or more articles had no properties defined.

This scenario is now handled gracefully, preventing layout errors in such cases.


Sprint 56

April 18, 2025

 

This release brings powerful new personalization options, including customer- and product-specific content, to create even more tailored shopping experiences.

We've also expanded control over what logged-in and non-logged-in users see, such as stock visibility, giving you greater flexibility.

Our improved Dynamics F&O integration makes it easier and faster to connect new installations.

And as always, we've resolved several minor issues to keep everything running smoothly.

 

For articles that include multiple components, a direct "Add to order list" button is not always appropriate. We've updated the article overview pages (both list and tile views) to replace this button with a "View" button for such articles, guiding users to the detailed product page first.

With the Authorized Contents Template, you can show different content to different users or user groups based on their authorization profiles. Here's how it works:

A content block is linked to a specific authorization profile. Customers or customer groups are also linked to authorization profiles. After logging in, a customer will only see the content for which they have access according to their assigned profile. This allows you to deliver highly personalized content experiences within the webshop.

This mechanism operates in the same way as product authorizations in Shoxl: the system can be configured so that users only see the products linked to their authorization profile. With Shoxl’s authorization features, you can effectively offer every user their own personalized version of the shop.

We also fixed several issues related to the handling of authorized content blocks, ensuring that authorized content is now correctly displayed according to user profiles.

Dynamic content in Vendisto allows you to add product-specific information directly to product pages. It works by defining a layout with content blocks, where each block is linked to an editor in the "Dynamic Content" tab within the Vendisto CMS for that product. This gives you maximum flexibility to enrich product pages with tailored content.

Previously, a bug in the classification module prevented users from adding new subclassifications when dynamic content was active. The save button remained disabled, blocking the addition of new classification nodes. This issue has now been resolved, allowing full use of both classification management and dynamic content editing.

We introduced a new configuration option to tailor how stock information is shown to different user types. In the webshop settings, you can now define separately for anonymous visitors (passers-by) and logged-in users whether they see:

  • ColorIcons (stock status through color icons)
  • Numbers (exact stock quantity)
  • ColorIconsAndNumbers (both status and quantity)

This allows you to offer more detailed stock insights to logged-in customers while keeping information for anonymous visitors more general.

Google Tag Manager (GTM) simplifies managing tracking scripts on websites. Previously, enabling the "MeasureViewBasket" setting could cause crashes in the shopping basket when handling products composed of multiple components.

The GTM tracking code has been updated and now correctly processes these bundled products.

We've introduced the option to set distinct MultiSafePay API keys per country, based on the customer's invoice address. This enhancement provides greater flexibility in managing your payment processing across different regions.

Support for the Polish payment method Przelewy24 has been added to the webshop settings. You can now easily enable and configure this option for your customers during checkout.

The various F&O endpoints now provide timestamps along with their data. This improvement enables our caching layers to selectively import only updated records, making data synchronization faster and more efficient.

Microsoft Dynamics 365 F&O is highly configurable, which can lead to variations in how data is structured between customers. We have now developed a generic mechanism that interacts directly with the oData layer, making it possible to support multiple F&O setups without the need for customer-specific adjustments.

We resolved several issues that occurred when paging through search results after applying a price filter. Previously, the minimum and maximum prices set via the slider or input fields were incorrectly converted to integer values after moving to another page.

Now, the minimum and maximum price values remain accurate throughout navigation, and are correctly based on CustomerPrices or PriceList prices when applicable.

Some webshops use multiple classifications within the Vendisto PIM to manage different storefronts from a single system. Previously, these classifications were stored in a random order, causing the default PIM classification to not always appear first.

We have now introduced a mechanism to position classifications in a logical sequence in the database, ensuring consistent and predictable ordering.

Postmark is a reliable email delivery platform used by Shoxl to ensure smooth and dependable email communication. When placing a pickup order as a guest user, the confirmation email previously showed the customer's invoice address instead of the store's pickup address.

This has now been corrected. Confirmation emails for pickup orders placed by guest users clearly show the correct store pickup address.

A robots.txt file instructs web crawlers (search engine spiders) which pages or files they should or shouldn't access on your website. By default, the Shoxl platform automatically generates this file to ensure essential directives are always included.

We've introduced greater flexibility: You can now manually create your own robots.txt file. When this custom version is present, the platform will no longer overwrite it, giving you full control over specific crawler instructions.

Category pages previously experienced crashes when articles contained properties defined in multiple languages. This issue has been resolved, ensuring category pages remain stable regardless of language-specific attributes.

In Shoxl, article tables are fully configurable: you can define exactly which columns are shown by using our layout language — the same language used to design overall page layouts.

Previously, columns in article tables could get stuck on "loading" when viewed by users who were not logged in. This issue has been resolved. Additionally, a new LogInToView layout setting has been introduced, allowing any column to display a login button instead, redirecting anonymous users to the login page.

In Vendisto, images can be managed at different levels of the product structure: at the product variant, product, or classification node level. The webshop displays these images on the relevant pages and, when a product image is missing, automatically substitutes it with the image from the first product variant.

A bug that sometimes prevented this substitution from occurring has now been fixed. All article groups now correctly display an image in the overview, even when a direct product image is missing.

Delivery schedules can include overrides to block specific dates from being selectable. A bug previously caused some of these overrides to be ignored, allowing blocked dates to appear as available. This issue has now been fixed, and all exceptions are correctly enforced.

Previously, it was not possible to add an article composed of multiple components to the basket together with one of its standalone components. This issue has now been resolved, allowing both the bundled article and its individual components to be added to the basket simultaneously.

In Vendisto, the Batch Upload function for images could crash when uploading more than 100 images at once. This issue has been fixed, ensuring smooth and reliable uploads even for larger batches.

When ordering an article with components, using the back button from the basket did not correctly restore the selected configuration. As a result, the article page failed to load the appropriate price and stock information. This issue has been fixed, and returning to the article page now fully restores all selections and displays accurate data.

We developed a more memory-efficient version of the article export function, reducing server load when exporting articles to Excel. During this update, we also fixed a bug where articles imported from the ERP system without a Title element were unintentionally omitted from the bulk export. All articles are now correctly included in exports, regardless of title presence.

To prevent outdated data from being served, we've introduced an "expire after" setting (in hours) for cached responses from the Product and Product Group APIs. This ensures that order book information remains fresh and up-to-date without requiring manual cache clearing.

We fixed an issue where the Country field on the customer registration form was not always visibly marked as required, even though it was technically mandatory. The form now clearly indicates that the Country field must be completed.

We fixed an issue where products that had a customer-specific net price but no gross price could not be added to the basket. The order button now correctly becomes active as long as a valid customer-specific price is available.

We've optimized the synchronization process for images and other assets between Vendisto and the shop. Updates are now faster and more reliable, ensuring that new and updated product images are reflected in the webshop with minimal delay.


Sprint 55

March 28, 2025

Sprint 55 was all about enhancing quality and user experience. Highlights include improved handling of bundled products, making it effortless to combine a base product with required or optional components. We've also extended the capabilities of our PIM system, paving the way for smoother integrations with popular data distribution platforms like Channable. And uploading your order books? That's now faster and more efficient than ever!

In the shop, a component relationship can be established between a base product and related articles. This setup changes the behavior on the product detail page: components can be selected via dropdowns and added to the basket along with the base product. These components can be optional or mandatory. In the basket, the base product and its selected components are shown as a single line, which can later be split into individual order lines depending on the ERP system's capabilities.


Exact Online Item Charges


An issue arose where clicking back to a product with selected components from the basket failed to properly initialize the product detail page. As a result, the order interface appeared disabled and users could not modify or reorder the product setup.


Exact Online Item Charges


This behavior has been corrected. Returning to a product with selected components now properly initializes the page, allowing users to interact with the order interface as expected.

The basket encountered issues where removing a bundle item did not properly remove the associated product due to a flaw in the basket logic.

This behavior has been corrected. When a bundle is removed, the associated product is now correctly deleted from the basket as expected.

In Vendisto, new relation types, such as "replacement" or "complementary," can be defined. These relation types are categorized either as "related" or "component."

Previously, a timing issue in the Vendisto UI made it difficult to add related items correctly. This experience has been improved: the "Add Related Product" button is now more responsive and reliably available when setting up new relations.

This enhancement streamlines the process of linking related products, making it faster and more intuitive for users.

Channable is an online feed management and automation platform that helps companies distribute their product data to marketplaces, comparison websites, and advertising platforms. Within our setup, Channable connects directly to our generic Product API to retrieve product information for feed generation and distribution.

We have enhanced the AutomaticProductImportManager tool by introducing a small parser that supports dynamic placeholders in filenames. The available placeholders are:

  • {TIME}
  • {DATE}
  • {DATETIME}
  • {TIMESTAMP}

These placeholders allow greater flexibility: feeds can now have either dynamic filenames (based on the timestamp or date) or static filenames, depending on the configuration.

This improvement simplifies integration with platforms like Channable and provides more control over feed file management.

The article XML file forms a crucial part of the automated data stream between ERP systems and the shop. Imported article data is stored in the Vendisto PIM database, which then synchronizes with the shop.

Within Vendisto PIM, article data can be enriched with additional properties and assets, such as images and documents. Articles can also be activated, suspended, or deleted through the concept of a "lifetime state."

We have enhanced the Article XML import functionality by introducing a new setting: ArticleDefaultLifetimeState. This new feature allows users to define a default lifetime state for newly imported articles if the state is not explicitly set in the XML. Previously, new articles without a specified state were automatically set to 'Active'. Now, administrators can configure whether such articles should default to 'Suspended', offering greater control over article activation workflows.

This functionality was developed in response to customer needs for better control over article visibility immediately after import.

During article imports, merging two article groups while simultaneously updating their group names could incorrectly trigger a validation error. This situation has now been improved to allow both operations to be performed smoothly without errors.

VAT rates are typically determined based on the region to which goods or services are delivered. However, in some business cases, VAT handling needs to be adjusted on a per-customer basis. For example, special VAT agreements may apply to educational institutions, healthcare providers, export customers, or resellers operating under specific tax exemptions.

To address these needs, we are extending the platform to support customer-specific VAT rates. The foundation for this functionality has now been laid: customer-specific VAT percentages can already be stored in the Vendisto database, and the Exact Batch Interface has been extended to import these rates from Exact systems.

This enhancement paves the way for even more flexible and accurate tax handling across different customer groups.

Previously, the free delivery threshold did not consistently account for discounts, which could lead to incorrect eligibility for free delivery. This behavior has been improved: discounts are now correctly factored in when calculating whether an order meets the free delivery conditions. This adjustment ensures a more accurate and fair application of delivery policies for all customers.

Some products were not orderable because the basket button on certain article detail pages contained an incorrect link. This resulted in users being unable to place orders directly from those pages.

The issue has been corrected. The basket button now properly links to the ordering process, ensuring that products can be added to the basket without problems.

Navigating from the sidebasket now correctly points to the selected variant instead of the default product.

Cloudflare's Rocket Loader is a feature that improves website performance by optimizing the loading order of JavaScript. It asynchronously loads scripts and prioritizes page rendering, helping to speed up the initial display of content for users.

However, Rocket Loader can sometimes interfere with custom JavaScript functionality by changing the execution order of scripts. This caused issues with our webshop's scripting behavior.

We have now added support to ensure that the webshop runs correctly alongside Cloudflare’s Rocket Loader optimization, maintaining full functionality without scripting conflicts.

Users were unable to reorder items from their order history due to an error in the Shoxl REST service layer. This issue interrupted the reorder process, preventing customers from quickly duplicating previous orders.

The problem has been corrected, and the reorder functionality now works as expected, allowing users to easily place repeat orders from their history.

The "lists" functionality allows article and article group lists to be displayed at various positions in a Shoxl shop or portal. Depending on the chosen configuration, these tiles can also show article attributes and (gross or customer-specific) prices. If prices are not yet available, a "loading..." placeholder is shown temporarily.

However, if prices could not be retrieved or were not allowed to be displayed, the "loading..." placeholder would remain visible indefinitely, causing confusion.

This behavior has been improved. The placeholder is now properly removed when prices cannot or should not be shown, ensuring a cleaner and clearer user experience.

In earlier setups, images imported from Exact Online required a file extension (such as .jpg or .png) to be included in the asset name. Without this extension, the system could not correctly recognize or handle the imported files.

We have improved this process: the file type is now automatically detected based on the content header of the imported asset. This means that manual addition of extensions is no longer necessary, making the import process more reliable and user-friendly.

This enhancement simplifies asset management and reduces the risk of import errors, improving the overall efficiency of product data handling.

One of the essential principles of the Shoxl platform is that the shop does not duplicate functionality already present in the connected ERP system. This approach ensures consistency, simplifies maintenance, and avoids potential conflicts between systems. It also means that, especially when completing an order, the shop should ask the ERP whether any additional costs or discounts apply. This communication happens via the CalculateOrder request.

An issue had arisen where the CalculateOrder request incorrectly added a null entry to the list of order lines.

This behavior has now been corrected, ensuring clean and accurate communication with the ERP system for a reliable calculation of the final order.

OAuth2 is a widely used standard for secure authorization. It enables users to grant limited access to their resources on one site to another site without exposing their credentials. OAuth2 plays a crucial role in modern authentication flows by ensuring secure and manageable access to protected APIs and applications.

To enhance the configurability and ease of deployment of our OAuth2 server, we have expanded the available logging functionality. This improvement provides better insight into authentication flows and system behavior, making it easier to troubleshoot and fine-tune configurations during deployment and maintenance.

Within the Shoxl platform, several generations of CSV upload processing have been developed. The latest generation significantly improves speed and efficiency. This advanced method has now also been applied to the Order Book functionality.

The Order Book allows customers to download a fully configurable Excel file that lists their personalized product assortment. Customers can easily compile a new order by filling in quantities for the desired products and uploading the file again. The selected items are automatically placed in the shopping basket in the specified quantities.

We have introduced the 'EnableFastCsvUpload' setting for the Excel Order Book, ensuring faster and smoother handling of uploads for even the largest customer catalogs.

The products and product variants in Vendisto are structured within a classification tree that can span multiple levels, depending on the shop configuration. Images can be assigned at different levels: Product, Product Variant, or Classification Node.

When a product lacks an image, the shop previously displayed the image from the first product variant. Similarly, a classification node without an image would inherit the image of the first product classified beneath it. Higher-level nodes would inherit from the first child node.

We have now enhanced this mechanism: product variants' images are properly propagated upwards to ensure products and classifications always display a relevant image when no specific image was assigned.

---

The structure for products and variants allows assigning images at multiple hierarchy levels. In cases where no image was available for a product, a fallback mechanism ensures an image is still displayed, pulling from associated variants or classifications.

An improvement was made to strengthen this fallback logic, ensuring that images are accurately inherited from lower levels when needed. This change enhances the visual consistency across the storefront, even when direct images are missing.

---

Vendisto organizes products into a tree structure with classifications. Images can be attached at the product or classification level. If an entity had no assigned image, the system would fetch the first available image from linked articles or classifications.

We refined this inheritance behavior to better handle missing images, ensuring that the first available product variant image is now properly displayed at higher classification levels when necessary.

A Shoxl shop features an article group overview page that lists all article groups. This overview is available in both List View and Tile View. If an article group contains only one article, that article can be purchased directly from the overview page (if configured accordingly). For article groups with multiple variants, the number of available variants is shown, and users must click through to select a variant before purchasing.

When the overview included both single-article groups and multi-variant groups, a problem occurred: no prices were displayed for the articles that could be purchased directly. This happened because the rendering logic was inconsistent depending on whether a row contained an article or an article group. The layout would also misalign columns.

We improved the rendering logic to ensure that prices are now correctly displayed in all cases. The layout has also been harmonized so that all rows contain a consistent number of columns, ensuring a clear and uniform presentation.

In previous versions, optional components linked to articles were not correctly added when users compiled order lists. This led to incomplete orders being created when optional items were expected.

The handling of optional components has now been improved. When articles are added to an order list, any optional components selected by the user are correctly included, ensuring a complete and accurate order list experience.

A bug was fixed where articles could be added to an orderlist without selecting mandatory components. This ensures that all required fields are now properly validated before items are added, preventing incomplete or incorrect entries.

When using the quote functionality, users who were already logged in could sometimes incorrectly see the "log in and order" button. This behavior has been corrected to ensure a smooth flow.

Additionally, the product overview was unable to display the "request quote" button and defaulted to showing the standard order interface. We have improved this behavior: the overview can now correctly show a mix of "request quote" buttons and standard ordering options, depending on the individual article settings. This update has been applied to both the list view and the thumbnail view.

Resolved an issue where the news overview incorrectly included archived news items. This resulted in the display of outdated content, incorrect filter counts, and misleading category options. The filter now exclusively shows active, published news items to maintain content relevance and clarity for users.

We identified and corrected a bug in the handling of delivery dates during the checkout process. Customers were previously able to select a delivery date that would later be rejected when finalizing the order, making it impossible to complete purchases for certain dates. This issue has now been resolved to ensure a seamless and reliable order placement experience.

To optimize pricing data storage and handling, the ErpCache price service has been enhanced. In addition to detailed pricing per customer and product, it now supports customer-specific discounts applied at the product group level, based on the standard price list prices.

This improvement reduces the amount of data needed, particularly in cases where customers are assigned to groups with defined product group discounts, minimizing storage load while maintaining accurate price calculations.


Sprint 54

March 7, 2025

In Sprint 54, our development team took a deep dive into improving integrations with both Microsoft Dynamics F&O and its older sibling, Dynamics NAV (the proud ancestor of Business Central). Meanwhile, our shop users received a shiny new feature—a deceptively simple but technically heroic price filter based on customer-specific pricing.

Oh, and we casually threw in Finnish language support, significantly upping our Finnish skills in the process. So, if you’re ever tempted to conquer Finland, we've got your back—or should we say, your "selkä"!

A price filter can now be configured as part of the Shoxl shop. This filter allows users to select articles within a specified price range, either by adjusting a slider or manually entering minimum and maximum values.

Previously, the filter only worked on gross prices. Now, the functionality has been extended to support filtering based on net prices.

To use this feature, the ERP system's price model must be mapped to PriceLists and customer-specific prices. The expectation is that customer-specific prices serve as exceptions to the standard PriceList prices. However, if ERP price calculations require a customer-specific price for every product/customer combination, this solution (and net price-based filtering) may not be viable.

Future enhancements planned on the Shoxl product roadmap include implementing a default pricelist and supporting customer discount percentages to further improve this functionality.

The shop includes a setting that determines which net price is displayed on search result tiles after filtering or searching. For products with multiple quantity discount prices, this setting allows the system to show either:

  • The lowest cumulative discount price
  • The price of the cumulative discount with the lowest quantity (the unit price)

Previously, the net price filter did not follow this setting, leading to inconsistencies in price display. This has now been corrected—the net price filter will now respect the configured setting, ensuring consistent price representation across the shop.

The shop now supports the Finnish language, allowing users to navigate and interact with the platform in Finnish.

This enhancement improves accessibility for Finnish-speaking customers and ensures a better user experience in their preferred language.

Currently, the Shoxl shop sends various emails, including contact form confirmations, password reset emails, order confirmations, and quote-related messages. These emails are sent through a mix of external mail services and internal mail servers.

To improve efficiency and reliability, a dedicated email microservice is being developed. This new service will centralize all email sending, ensuring better management and consistency.

The initial development has started in this sprint, with full functionality planned for upcoming releases. A key benefit for shop administrators will be the ability to customize all email templates directly.

Previously, gross prices were incorrectly retrieved due to a mix-up in DataareaId values. Price calculations for gross prices also relied on the PriceAgreement entity, which could pull data from multiple divisions. If the system was set to retrieve price agreements from both Division A and B while gross prices were only meant to come from Division A, the final price calculation mistakenly included prices from Division B as well.

This issue has now been fixed by ensuring that only price agreements that match the same Division ID as the gross prices are considered in calculations.

Gross prices were not being exported because of missing permissions on the TaxEntity. This entity is required for gross price calculations, and without proper access, the export process failed.

Another issue was that price currencies were not handled correctly. The exporter only supported a single currency instead of multiple, limiting its functionality.

Solution:

  • Permissions to the TaxEntity have now been granted, ensuring proper gross price calculation and export.
  • The exporter now correctly supports multiple currencies, resolving the limitation.

These fixes ensure that gross prices are now exported correctly and without restrictions.

The batch interface for F&O relies on OData metadata to determine which entities and fields can be accessed. When a customer modifies the standard entity configuration by adding a new field, the locally cached metadata must be updated by retrieving the latest version from the customer's backend.

To streamline this process, the batch interface now includes a recovery mode. When an OData error is detected, the recovery mode automatically downloads the updated metadata and replaces the outdated cache. This ensures that changes in the customer's entity configuration are handled dynamically without manual intervention.

In the Shoxl cache, pricelists and price agreements result in storing a price for every combination of user, article, and quantity. While this setup ensures very fast response times, it can also lead to extremely large databases when dealing with a high number of users, multiple pricelists, and extensive quantity discounts.

To address this, an initial improvement has been implemented where the cache now utilizes pricelists more efficiently. This approach helps reduce database size while maintaining fast performance. This feature will be GA in the next release.

Sales representatives associated with a customer are now included as Global Access Users in the BatchCustomer export for Microsoft Navision Batch Integration. Additionally, an option has been introduced to configure Global Access settings.

In the customer interface, a salesperson_code is used. The question remains whether NAV can also provide an email address for each salesperson. If not, the system will map salesperson codes to email addresses or names that still need to be retrieved from FACE.

Furthermore, it is now possible to manually assign representatives to each customer. A combination of both automated retrieval from NAV and manual assignment should work seamlessly.

Permissions for sales representatives and regular users can now be managed during shop deployment, with Access Users being identified by their email addresses.

The quote overview was missing when a user had no permissions assigned. This led to confusion, as users without explicit quote-related rights were unable to see any relevant information.

To improve this, the system now ensures that users without specific quote permissions can still access the quote overview if they have general access.

This adjustment enhances transparency and provides a more consistent user experience.

Previously, the order history displayed incorrect VAT amounts due to a miscalculation. The system mistakenly used a percentage range of 0-100 instead of the correct 0-1 range when applying VAT to order totals. As a result, instead of adding 21% VAT, the system multiplied the total amount by 21.

This issue has now been resolved, ensuring that VAT is correctly calculated and displayed in the order history.

A new version of CalculateOrder (/V2/CalculateOrder) has been implemented, which supports decimal quantities. This allows more flexibility when processing orders that require non-integer values.

The system now determines which version to use based on the setting ShoxlRestCallV2CalculateOrderMethod:

  • If set to True, /V2/CalculateOrder is used.
  • If set to False, the system falls back to /V1/CalculateOrder.

This enhancement ensures better handling of decimal order quantities while maintaining backward compatibility.

A new option has been added to control the loading of price, stock, and order interfaces for items in static lists. This setting allows administrators to enable or disable price calls on these lists.

By disabling price calls, this feature helps reduce the load on slower back-end systems, improving overall performance and responsiveness.

Previously, the customer import process in Vendisto could cause duplicate pricelist records to be created in the database. This led to inconsistencies in price authorizations and potential pricing errors.

This issue has now been resolved, ensuring that the import process correctly checks for existing records before adding new pricelist authorizations.

When using the article selection wizard, the price and order UI did not load when clicking on the main image or link from an article group overview. This caused important product details such as SKU, price, and stock information to be missing from the page.

This has been corrected, ensuring that all relevant product details are properly displayed when navigating from the article group page.

Contact forms were not appearing after the page loaded. This issue was caused by the system failing to use the DefaultForm while, at the same time, attempting to validate custom form fields only on form submission instead of during page load.

The implementation has been adjusted to ensure that form validation occurs correctly during the page load process, allowing contact forms to display as expected.

Certain user pages did not redirect to the login page when accessed by a non-logged-in user. Instead, these pages either displayed an error message or redirected to the homepage, causing confusion.

This behavior has now been corrected. Users who attempt to access restricted pages without being logged in are now properly redirected to the login page.


Sprint 53

February 14, 2025

Sprint 53 brings exciting enhancements to help you boost conversions and improve your e-commerce experience:

📌 Check out the full list and reach out if there’s anything that could benefit your business!

Shoxl now offers a new way to display an empty shopping basket. Instead of showing the default basket layout, users can configure a separate page with a custom message and two call-to-action buttons: "Login" and "Continue Shopping." This feature provides a clearer, more guided shopping experience for visitors.

Exact Online Item Charges

In general, customer-specific discounts should be managed in the ERP system. However, Exact Online always applies such discounts directly to the price of each order line. Some Shoxl users prefer to display the discount separately in the order totals for commercial reasons, rather than embedding it in individual product prices. Since Exact Online does not support this approach, we have extended its functionality.

With this update, you can now specify a customer discount in Vendisto. This discount will be transferred to Exact Online and will appear in the discount section of the order totals, rather than being factored into the line-item prices. This aligns with our core philosophy: if the ERP system lacks a specific capability, we enhance it to meet our customers' needs.

Exact Online Item Charges

During Exact Online’s scheduled maintenance window (4:00 - 5:00 AM), the system was generating unnecessary email notifications due to service unavailability.

To prevent this, email notifications in the Exact Batch Interface have been disabled for specific HTTP responses, such as Service Unavailable. This ensures that only relevant alerts are sent, reducing unnecessary notifications.

It is now possible to apply authorization profiles to the OrderBook Excel download. This ensures that every user gets a personalized catalog, containing only the products they are authorized to see.

Since this Excel file can also be used to upload an order, this improvement helps streamline the ordering process while maintaining the correct access restrictions. Additionally, a loading spinner has been added to provide better feedback during the download process.

The search engine now supports exact match searches by using quotation marks (""). Previously, the system automatically added wildcards to every search term, which sometimes led to too many results.

With this update, users can now search for an exact phrase by enclosing it in quotation marks. This provides more precise search results, ensuring that only exact matches are returned.

Vendisto supports multi-classification for products across multiple shops, with a central PIM acting as the data source. A database inconsistency caused classification exports to be incomplete when products were assigned to multiple classifications. This issue has been resolved, ensuring that all classifications, including root classifications, are correctly included in bulk exports.
An issue in the PIM system caused duplicate classification categories to be created when importing new article groups. This has now been resolved, ensuring that categories are correctly assigned without unnecessary duplicates.

A bug prevented redirects from functioning correctly if they did not include a classification (e.g., /NL/). This issue has now been resolved, ensuring that such redirects work as expected.

However, redirects for existing pages will not work. This is because the system always checks whether a page exists before looking for a redirect. If the original page is still present, no redirection occurs. This behavior follows best practices to ensure that valid pages remain accessible while only missing pages trigger redirects.

Previously, Vendisto automatically converted all relative URLs in the Visual Page Editor into absolute URLs by prefixing them with the Vendisto domain. This caused issues when copying and pasting links within the editor.

This behavior has now been corrected. Relative URLs will remain unchanged, ensuring that links function as expected without being altered unnecessarily.

The API now allows full management of OAuth2 audiences, providing more control over application access levels. Users can create, read, edit, and delete audiences directly via the API, making it easier to adjust authentication settings as needed.

Additionally, a new overview and search function has been added, enabling users to quickly find and manage existing OAuth2 audiences within the system.

A bug caused article imports to fail when asset category labels were missing translations. To prevent this, a proper fallback mechanism has been implemented. If a translation is unavailable, the system will now use a default value instead of generating an error.
A bug prevented guest users from successfully applying a voucher during checkout, resulting in an error. This issue has now been resolved, ensuring that vouchers can be used by both registered customers and guest users without problems.
Settings that were no longer referenced have been removed to improve system maintainability and prevent unnecessary configuration clutter. A summary of the removed settings is available in the documentation.
A bug caused the voucher discount to incorrectly include VAT when sending orders to Exact Online. This issue has now been fixed, ensuring that the discount is applied correctly without unintended tax calculations.

A bug caused classification documents to be overwritten when new menu items were added. Additionally, catalog pages could disappear when synchronizing data from the central PIM to multiple shop instances.

This issue has now been resolved, ensuring that classification documents remain intact and catalog pages are preserved during synchronization.

A bug caused English-language resources to be missing from the asset dropdown in Vendisto, making it difficult for users to select the correct assets in an English-language environment.

This issue has now been resolved, ensuring that all necessary resources are available in the dropdown as expected.

The system now utilizes the ArticleOrderConfiguration entity in Microsoft Dynamics F&O to enforce minimum order quantities and addition quantities per product. This ensures that products can only be ordered in predefined increments, improving consistency and preventing incorrect order quantities.

This update also integrates these settings with the gross price per product, ensuring that pricing calculations align with the configured order quantities in Microsoft Dynamics F&O.

When placing an order, some fields that cannot be modified from outside the system should be changed. As a workaround, users can refresh metadata using one of two methods:

  1. Start the batch interface with the --clearMeta parameter.
  2. Manually delete the metadata file (Metadata.trimmed.xml) from the system folder and restart the batch interface.

This ensures the correct value is applied without manual intervention.

The Account API has been extended to include customer-specific discounts. This allows external systems to retrieve and update customer discounts directly via the API, ensuring seamless integration with other platforms.

Sprint 52

January 24, 2025

Sprint 52 introduces exciting new features, including an expansion of Vendisto PIM with shop-specific classifications. This enhancement enables multiple shops to be powered by product data from a single Vendisto installation.

Additionally, a solid foundation has been established for price filters based on customer-specific pricing. Previously, filtering was only possible using gross prices.

Finally, it's worth mentioning that support for item charges, such as deposit fees, is now also available for products sold in multiple packaging units.

All this and much more in Release 52!

By default, PIM data in Vendisto is synchronized with the Shoxl shop's performance database. However, some customers manage a central PIM system and need to distribute product data selectively across multiple shops - and thus, multiple performance databases.

With this update, products in Vendisto PIM can now be assigned to specific classifications, ensuring that each shop only receives the assortment relevant to its classification.

This new feature allows for precise control over product availability in multi-shop environments, automatically syncing data to the correct shop (performance) databases based on configured classifications.

Exact Online Item Charges

The ShoxlPro importer now supports CustomerPrice and PriceList imports, allowing the price filter to operate based on net prices rather than gross prices.

With the Exact Batch Interface extended for CustomerPrices and PriceLists exports, filtering results now correctly reflect the selected price range using net prices.

This enhancement ensures that price filtering is fully aligned with actual customer-specific pricing, making it more accurate and relevant for users.
When exporting items with multiple packaging units, it is possible to create separate articles in the shop, each with an item number suffixed by the packaging unit. These packaging units often have different item charges ("statiegeld") associated with them.

With this update, the Exact Online Batch Interface now correctly collects and applies the appropriate ItemCharge values for each generated item when "EnableItemPriceToArticleMapping" is set to true.

This ensures that the correct deposit fees ("statiegeld") are assigned based on the packaging unit, improving pricing accuracy and compliance within the shop.

Exact Online Item Charges

PriceListAuthorizations control which products a user can see in the shop by limiting the assortment to the price list assigned to that customer.

With unit mapping, the articles listed in price lists do not directly exist in the Shoxl shop. Instead, when importing items, they are suffixed with the packaging unit. This caused issues where the system could not correctly match price list entries to available products.

To resolve this, the Exact Batch Interface has been improved to accurately map item numbers with their corresponding unit suffixes in the PriceListAuthorizations lookup.

Additionally, price list and gross price exports now function without errors, ensuring that items with suffixed packaging units are correctly processed and matched to their corresponding price lists.
Temporary price lists now automatically deactivate in the shop after their expiration date. Additionally, a mechanism removes outdated Price List entries when they are not included in a non-partial PriceList XML import, ensuring accurate pricing and proper lifecycle management.
Shop visitors can no longer register multiple accounts with the same email address. If an email is already in use, the form prevents submission and prompts the user to log in or activate their existing account.
Users can now select a value directly from the article overview page, opening the article detail page with the chosen value preselected. For example, when browsing t-shirts, users can select a color before entering the detail view, streamlining the selection process.
Previously, when adjusting sorting, paging, or display mode, only the modified setting was sent to the backend, causing the sorting to reset to default when changing other parameters like quantity.

This has now been fixed by ensuring that the entire query string (including sortMember, sortDirection, pageSize, and display mode) is always appended. Additionally, this improvement allows users to share product listing links with consistent sorting and display settings, ensuring the same article view for other customers.
The article table now immediately reflects the selected language without requiring a page refresh. Previously, it displayed values from the previously selected language until manually refreshed.
The calculation of element heights in overview pages has been improved to ensure correct spacing. Previously, incorrect height settings caused article numbers to overlap with titles.
The article overview now renders correctly, ensuring a seamless browsing experience. Previously, invalid HTML affected page functionality, which has been resolved for better usability.
The "next" button in the article selection wizard now disables more quickly when required. Previously, a delay allowed users to click it when the action should not have been available.
The alternative delivery address is now correctly preserved when navigating through the order process. Previously, returning to a previous step caused the entered address to be lost. This issue has been resolved, ensuring a smoother checkout experience.
  • Delivery Scheme Overrides Now Applied Correctly
    Webshop users can now successfully apply overrides to the default delivery scheme. Previously, an issue prevented this, but correct delivery settings are now enforced.
  • Accurate Delivery Schedule Retrieval
    A date format issue occasionally caused incorrect delivery schedules to be displayed. This has been resolved, ensuring visitors always see the correct schedule.
  • Improved Date Validation in Delivery Schedule API
    The delivery schedule API now correctly validates dates, preventing errors caused by format mismatches. This ensures accurate delivery date checks.
An issue caused links in the classification menu to appear in the wrong order instead of following the specified order in Vendisto. This has now been fixed, ensuring accurate link placement.
The system now correctly enforces minimum order values and quantity increments. Previously, users could bypass these restrictions, allowing invalid quantities to be added to the basket.
The HTML structure of the order history interface has been updated, improving styling and layout. These enhancements provide a better visual experience, especially for mobile users.
An issue previously prevented users from adding a single article to the basket from an order list. This has now been resolved, restoring full functionality.
When adding a bundle (an article with components) to an order list, all components are now correctly included. Previously, only the main article was added due to an issue in the order list logic. This has now been resolved.
The login process now works reliably with ReCaptcha v3. Previously, a conflict between form improvements and legacy scripts caused login failures, which has been resolved for a smoother authentication experience.
The customer registration form validation now functions as expected. Previously, recent form updates caused valid submissions to be blocked, preventing registration. This issue has been resolved.
Previously, some pages intended for authorized users were accessible to non-authorized users through a workaround. Security measures have been improved to ensure that only authorized users can access these pages.
Knowledge items now retain the correct publication state after updates. Previously, some items were incorrectly set to "published" due to a synchronization issue between Vendisto and ShoxlPro. This has been resolved, ensuring accurate status management.
An additional check in the Vendisto Customer Importer now ensures that activation emails are not sent to users linked to blocked customers, preventing unauthorized access.
The Exact Batch Interface now prevents exporting empty article properties when VendistoPimEnabled is active. This ensures these properties can be deleted when no longer needed.
When deploying the Exact Batch Interface, an optional initial sync will now be executed. This sync exports the 60 most recently modified entities across key data types:
  • Articles
  • Batch Customers
  • Batch Gross Prices
  • Customers
  • Price Lists
This allows the testing phase to begin before all data is fully available, significantly reducing waiting time during deployment.
A uniform request retry mechanism has been implemented in the Exact Batch Interface using Polly.

This ensures better handling of temporary failures by automatically retrying failed requests, improving stability and reliability in communication with Exact Online.
Previously, Exact Online did not support shipping costs through the API, requiring a separate "shipping cost article" to be created as an order line.

With recent changes in Exact Online, shipping costs are now a recognized concept, allowing them to be written directly to the shipping cost line.

As a result, the option to create a separate order line for shipping costs has been removed from the Exact Batch Interface, ensuring better integration and more accurate order pricing.
The VatPercentage node in the F&O Batch Interface now correctly displays percentage values instead of decimal values, ensuring accurate tax calculations in the gross prices XML.
The default currency is now automatically imported from SAP. If the default currency is unavailable, an alternative currency is used, with a fallback option ensuring proper currency selection.
The Vendisto start page now includes updated links to support hubs and user guides, making it easier for users to find relevant assistance and resources.
A timing issue previously caused incorrect labels to appear in the language selection interface. This has now been resolved, ensuring accurate label display.
Orders with more than 50 lines are now fully visible in the Vendisto order detail screen. Previously, only the first 50 lines were shown. Pagination has been added to ensure all order lines can be accessed.

Sprint 51

December 13, 2024

This sprint, we’re excited to deliver full support for Item Charges. These are cost lines automatically added to orders based on predefined business rules in the ERP system. Item Charges are now also visible in the shop, ensuring accurate order calculations.

Additionally, we have finalized work on customer-specific minimum order values. You can now specify the basket total value required for individual customers to proceed with placing an order.

Finally, we resolved several bugs that impacted performance and usability. For details, check out the full list of release notes!

Item charges are surcharges automatically added to orders based on specified business rules defined in the ERP system. Examples of such surcharges include disposal fees, which are collected by the supplier and routed to a clearing party. Another example is recycling fees, such as those applied to electronic equipment. Some item charges, like disposal fees, are exempt from VAT.

Shoxl shops can display item charges by querying the ERP system to determine, based on the basket contents, whether item charges apply. The ERP system then returns the applicable charges. However, not all ERP systems support such queries through their API—Exact Online is one example. This system does not allow for queries like: "Hey, take a look at this basket. Are there any costs associated with it that I should show in the shop?"

In such cases, the shop needs to calculate the applicable item charges itself.

This functionality has now been implemented for Exact Online. We collect all specified item charges, apply them to the products they are linked to, and display them in the shop.

Exact Online Item Charges

A new cost line, "ItemCharge," has been introduced in the webshop. This addition enables item charges fees to be included as part of the order total, ensuring clarity for both customers and order processors.
A new cost line, "ItemCharge," has been added to the OrderLine node in the Order XML files. This addition improves transparency and allows deposits to be correctly processed as part of order data.
The ERP Cache importer now supports the processing of ItemCharge XML files. This enhancement allows additional charge data to be imported seamlessly, improving compatibility with new XML formats.
A new export action type, "ItemCharge," has been added. When enabled, it executes fully once per day. The export now tracks all articles to identify changes in surcharges, including detecting modified surcharges. This design ensures flexibility, supporting both deposit fees and other types of surcharges.
It is now possible to specify a minimum order amount at the individual customer level. Previously, we supported minimum order amounts for all customers, as well as for customer groups sharing the same price list. This functionality has now been extended to individual customers.

Management of customer-specific minimum order amounts can be handled in the ERP system or in Vendisto. For instance, in Exact Online, you can create a customer classification to define the minimum order amounts.

In the screenshot below, a minimum order value of € 2000 for this customer results in a red warning box and a deactivated "Next Step" button as long as the Basket Value (excluding VAT, excluding surcharges) is lower than this threshold.

Exact Online Customer-Specific Mimimum Order Amounts

A new property, CustomerMinimumOrderValue, has been added to the Account API. This improvement allows for better integration and management of minimum order values directly through the API.
The "VendistoPimEnabled" setting now includes article titles under their group node in the XML when set to false. This eliminates the need for manual updates to article group titles after changes in Exact Online.
The ScanApp release and deployment pipeline packages have been updated. These updates streamline the deployment process, ensuring faster and more reliable releases.
If Google Tag Manager was enabled in the shop, users experienced login failures. This issue has been resolved, ensuring seamless access for all users.
Users were incorrectly redirected to a minified CSS file after logging out and attempting to log in again. This issue has been resolved, ensuring proper redirection to the main page.
The language toggle in the shop now correctly reflects the selected language, avoids duplicating selections, and properly translates header content.
An issue in the webshop caused article variant properties to be incorrectly sorted on the article detail page. This issue has been resolved, ensuring that article variants now appear in the correct order, improving clarity and user experience.
The Article XML Bulk Import now appends an index number to duplicate headers. This change prevents errors caused by duplicate GTIN properties, improving the reliability of the import process for customers.
Order XMLs processed by the Exact Online Batch Interface are now protected against unauthorized changes. This enhancement improves security and minimizes the risk of errors during the processing of order data.
The Exact Online Batch Interface sync feature has been optimized to only synchronize relevant entity types. This change aligns the synchronization process with the --actiontype flag, improving efficiency and performance.
In the checkout process, unregistered customers clicking the "Change Data" link on the "Select Payment" page were incorrectly redirected to the login page. This issue has been resolved, ensuring a smoother checkout experience for customers.
An issue was fixed where discrepancies between gross and net price order units prevented products from being added to the basket. This fix ensures that products can now be added correctly regardless of price configuration.
Due to a bug, overrides added to the default delivery scheme could not be displayed in the webshop. This issue has been resolved, ensuring proper display of custom delivery schemes.
When transferring article data between ERP or PIM and Vendisto, the Article XML bulk importer now correctly handles article states. Previously, if the state attribute was missing, Deleted or Suspended articles were incorrectly set to Active. This issue has been fixed: for existing articles, the state remains unchanged when the attribute is absent, and for new articles, the state defaults to Active.
The ProductGroup API has been updated to export the unique names of various properties. This fix ensures that shop data exported in article XML format can be correctly imported into decentralized Vendisto installations. When configured, this API now serves as a reliable data feed for dependent shops, improving synchronization and data management.
Spelling errors in the Vendisto news overview have been corrected. This update improves the clarity and professionalism of displayed news content.
The non-functional "Remember Password" checkbox has been removed from the system. This change eliminates unnecessary UI elements, streamlining the user interface for a cleaner experience.

Sprint 50

November 22, 2024

We’ve increased our release frequency from once a month to every 3 weeks. This means new features will reach you faster, and case overviews will be shorter and clearer, making updates more manageable and insightful.

Highlights of the current Sprint include support the introduction of a schedule for opening times of pick-up locations; support for synchronizing multiple PIM-installations; and we started work on the option to specify customer-specific minimum order values.

The delivery schedule module now supports defining separate schedules for pickup orders. Previously, only a single schedule was available for both pickup and delivery. Clients can now create distinct schedules, set specific deadlines, and define overrides for each option. If no pickup schedule is specified, the delivery schedule will be applied by default
The shop now dynamically loads different schedules when a visitor switches between delivery and pickup, ensuring accurate scheduling for each option.
After manipulation of PIM data (product data) in Vendisto, the data is now automatically synchronized with the Shoxl shop's performance database. For customers managing a central set of PIM data, this data can be configured to distribute seamlessly across multiple shops during the Shoxl shop deployment process.
A synchronization mechanism has been developed to distribute central shop PIM data as a product feed to other shops sharing the same assortment. This process involves importing Article XML data using the Article XML Bulk importer. Additionally, bugs that occurred after changes in article grouping have been fixed, ensuring smooth data synchronization.
The optional field 'MinimumOrderQuantity' has been implemented for customers in Vendisto. It can be imported through XML and viewed in Vendisto when the 'customerminimumordervalue' license is linked.
The webservice previously mapped costlines incorrectly to the order XML in the ERP Batch Interfaces, leading to data inconsistencies. This issue has been resolved by ensuring accurate costline mapping during order processing.
When using the multi-classification option to assign articles to multiple categories, authorization checks previously failed. The system only validated the main category, causing other categories to be marked as unauthorized. This issue has now been resolved to ensure proper authorization across all assigned categories.
The "select all" option previously failed to select articles when filters were applied to an article table. This issue has been resolved, and the functionality now operates correctly with active filters.

The name of the delivery location is determined based on field availability:

  • If the Company field is filled, the Company name will be used.
  • If any of the Firstname, Middlename, or Lastname fields are available, the location name will be a concatenation of these fields (e.g., Firstname Middlename Lastname).
  • If none of these fields are populated, a GUID will be assigned as the location name to ensure uniqueness.
A new appsetting (configurable through Octopus) has been introduced as an array of strings. When a user's payment term code matches one of the defined codes, the user gains the ability to BuyOnCredit. The customer export XML will then classify the customer as a Buy On Credit entity. The setting was initially named DisableBuyOnCreditEnableCodes but has been revised to BuyOnCreditCodes
Downloads of certain files, such as PDFs or images, previously forced manual downloads instead of opening in a browser tab. This has been resolved by implementing a new download handler. Additionally, filenames are now included in the download URLs to improve indexing by search engines.
The Automatic Shop Importer monitors configured directories, such as FTP folders, for new import files and sends them to the appropriate importers. It also reports the results to a configured set of recipients, including the shop owner. To reduce email clutter, notifications are now limited to failed imports only, preventing successful imports from polluting the mail system.
The voucher import process has been reworked to enhance user experience by improving the Excel structure and providing clearer import feedback in Vendisto.
A synchronization offset (e.g., "30d" for 30 days) has been implemented for order history. This prevents syncing every order to the exact cache, optimizing resource utilization.
The obsolete flag --disableSyncedArticlesCompare has been removed. This flag previously caused certain changes to be excluded during a full article export.
Automatic database migrations in the Exact Batch Interface have been removed to prevent potential data loss during activities like debugging or parallel deployments.
Improved error logging in the Exact Batch Interface by displaying the full stack trace and applying clearer log formatting for better readability and troubleshooting.
Resolved an issue where the OutstandingItem ERP cache export would incorrectly remove existing items when the entry count exceeded 50.

Release 2024.10

October 2024

This releases features the option to show products in multiple categories within the same classification. Categories and positions within categories can be managed in Vendisto through the user interface, or using Excel imports and exports.

On the integration side of things, we have focused on our interfaces with Exact Online and Microsoft Dynamics Finance & Operations.

Vendisto can now classify a product (articlegroup) in multiple categories, enhancing product findability by allowing multiple paths to access it within the shop.



The topmost category is designated as the "main" category. Users can adjust the category order by drag-and-drop in the Vendisto product detail screen or through the import/export functionality. Additionally, a new dialog allows users to set the default position of products within categories, visible in the shop when the default category sort order is selected.
The (bulk) Excel export has been extended in order to support multiple classifications and multiple categories per classification.
Traditionally the export supported a number of Level_[n] columns to define the different classification levels of the classified articlegroup.
The Level columns were postfixed with a _[n] where n defines the depth of the classification level.
E.g. Level_1, Level_2, and Level_3.
The export now supports multiple categories per classification.
For databases with one classification, the Level columns are numbered according to the Level_[category position]_[n] scheme:
The position attribute defines the position of the category of the classified articlegroup.
For an articlegroup that is classified in multiple categories, the first category will be used as the default for the shown crumb path.
E.g. Level_1_1, Level_1_2, Level_1_3, Level_2_1, Level_2_2, and Level_1_3.
The export also supports the classification in multiple classifications.
For databases with multiple classifications, and only one classified category per classification per articlegroup, the Level columns are numbered according to the Level_[classification position]_[n].
The importer will interpret the first number after the level as the classification position if classification_[classification position] columns are added to the Excel sheet.
E.g. Classification_1, Level_1_1, Level_1_2, Level_1_3, Classification_2, Level_2_1, Level_2_2, and Level_2_3.
The two above solutions can also be combined for databases with multiple classifications per articlegroup and multiple classified categories per classification.
Level_[classification position]_[category position]_[n]
E.g. Classification_1, Level_1_1, Level_1_2,
An issue was resolved where untranslated classification entries were not being included in the classification translations export. Now, both translated and untranslated classifications are accurately reflected in the export.
The Excel import feature now supports multiple categories per classification. Traditionally, the import used Level_[n] columns to define classification levels of the article group, where the Level columns were suffixed with [n] to indicate classification depth (e.g., Level_1, Level_2, Level_3). With the update, the Level columns follow the Level[category position]_[n] scheme for databases with a single classification, where the position attribute indicates the category’s position within the article group. For article groups classified in multiple categories, the first category is set as the default in the breadcrumb path (e.g., Level_1_1, Level_1_2, Level_1_3, Level_2_1, Level_2_2).
We are implementing a new version of the article importer (the article bulk importer) that has an improved performance when importing articles into Vendisto.
For some of the implementations, this importer is already in production but not for all shops since the importer is still lacking some of the functionality.
With this update, the article bulk XML import now supports the ArticleGroupDefaultTitle import setting.
The ArticleGroupDefaultTitle can be set to Undefined (this is the default value), ArticleNumber, and ArticleTitle. If set to ArticleNumber, this setting specifies that for new articles the ArticleNumber will be used as the title of the ArticleGroup when creating an articlegroup for the article if no Title element is present on the ArticleGroup XML. The same applies for ArticleTitle.
The Article Bulk import now supports the EnableArticleGroupSplitting import setting. If EnableArticleGroupSplitting is set to Y (default value N), the article import requires that all of the articlegroup's articles are present in the article group node in the XML import. Articles not present in the node will be split from the articlegroup after updating the article. Setting this to N enables updating a single article with XML from the ERP without splitting it from the articlegroup.
After the multicategory implementation of the classic article XML import, the import incorrectly attempted to classify XML articlegroups that had no classification node. This is now corrected.
The shop now uses a server-based version 3 of the Google reCAPTCHA. This helps protect Shoxl shops from automated abuse and malicious activities. It prevents bots from submitting forms, reduces spam, protetcts account sign-ups, and enhances security.

Shoxl shops now support Google reCAPTCHA v3



Learn more (from our Google friends)
A new setting, EnableFastCsvUpload, has been added to improve CSV upload performance by disabling net price calculations in the shop. This enhancement speeds up the upload process, especially beneficial for configurations with slower connectors.
Introduced a processing state for the "Add Selection to Basket" button during the CSV upload process. This provides clear visual feedback to indicate that the action is in progress.
Price list-based authorizations now support price list names that contain spaces. Previously, using a price list name with spaces caused the Vendisto customer importer to crash; this issue has now been resolved.
New functionality has been added to the Exact batch interface to automatically trim white spaces after country codes when retrieving customer information and addresses. This improvement enhances data accuracy for Intrastat reporting
For guest accounts, the house number addition entered in the invoice address field is now correctly displayed only once in the delivery address when "Same as Invoice Address" is selected.
The Payment Reference generated by payment service providers is now included in the order XML, making it available for both Exact Online and Microsoft F&O Place Order integrations. This reference can optionally appear in the order reference field in Microsoft F&O and is always available in the payment reference field in Exact Online.
Our integrations now support linking multiple administrations to a single shop. This is useful, for example, when a company decides to split its administration for different countries into separate administrations. In Microsoft Dynamics, this would result in different Data Area IDs; in Exact Online, this would involve various Division Codes. For each entity type, it is now possible to specify the source of the data, and orders can be directed to different administrations.
Performance and reliability for Shoxl Fast Sync have been improved, resolving issues that caused time-outs and errors during Vendisto data syncing. Optimizations in database queries and various code enhancements now provide a faster and more reliable syncing process.
An issue was resolved where cumulative quantity discount prices were incorrectly displayed as "from-to" prices on the article group overview page. The prices are now shown accurately according to the discount structure.
Previously, the article group overview and search pages sometimes displayed multiple prices for authenticated visitors. This issue has been resolved, ensuring each item displays the correct price.
Previously, selecting an article in the article selection wizard could lead to an error while retrieving price information, resulting in an unusable order interface. This issue has now been addressed to ensure a smooth and functional ordering experience.
Previously, the order button in the article selection table would not activate if the stock column was not displayed, making it impossible to place an order. This functionality has now been improved to allow orders even when the stock column is not rendered.
Improvements have been made to the article table, where the quantity selector input now applies correctly when adding articles to the basket. Additionally, the spinner is removed from the "Add selection to Basket" button, and feedback is provided when articles are successfully added to the basket.
An issue in the shop prevented some users from moving from the customer data form to the next step in the order process, as the "Next" button remained disabled.
The memory limit for MSSQL databases on dedicated servers has been reduced to 6GB to address memory-related issues.
It is now possible to upload documents of the type CSV, and make them available to visitors of the shop.
The process for transforming an EZ-base Artlink file into an article import XML file has been automated, with configuration set up for direct import. A previous issue where the mapping tool crashed when handling files without an index number in the filename has been resolved, and a new version of the tool has been released.
Previously, when trying to create a new news category on Telerex-Staging without any existing categories, the creation process would fail. This issue was specific to cases with no other news categories and has now been resolved, allowing category creation in an empty news category list
Fixed a bug where spaces in a news category title would incorrectly split the title into two separate categories in the news overview.
Order confirmation emails include a section for the chosen payment method. The content of this section now depends on the selected method. For example, if an online payment method is chosen, a payment link will be included. If a customer opts for "buy on account" and does not select a payment method, this section will be omitted.
In certain cases, large orders could be placed in the shop, but the confirmation email would not be sent due to a limitation on the number of key-value pairs allowed in a JSON message. To address this, an option to increase the JSON limit has been added to the shop, ensuring confirmation emails are sent for large orders.
For quick data entry, Shoxl allows users to navigate between input fields using the tab key. Previously, this tabbing function did not account for user-defined sorting options within the list, causing the tabbing order to break when the list was sorted in different ways. This issue has now been fixed.
The shop provides a quick link method for accessing article detail pages (/article/articlenumber). Previously, this quick link method failed in cases where a language classification (e.g., "nl") was prefixed to the URL. This issue has now been resolved.
An issue that prevented the Quotes Overview page from opening due to an incorrect pop-up reference in the code has been resolved, ensuring the page loads as expected.
The Shoxl REST Connector PlaceOrder now includes nodes for CompanyName, CompanyVatNumber, and CompanyCocNumber, enabling better handling of company-specific information in orders.
The intermediate webservice layer between the shop and ERP system can now be configured to communicate in multiple ways: either through a realtime interface (using REST or SOAP API) or via an ERP Cache database. Following a software component upgrade, issues with the SOAP API mapping that affected realtime data retrieval were resolved, ensuring full compatibility across configurations.
The Shoxl Rest SmartLynx Connector now includes support for DatabaseName and DatabaseAlias settings. These values are added to the request body for all requests, allowing for more detailed data handling and customization in the connector.
An issue on the Shop's User Management page caused an error when no users were invited. The page now loads correctly, even if the invited users list is empty.
Resolved an issue in the shop where orders without tax were incorrectly sent to Vendisto and the ERP connector, with tax details still included in the data.
The voucher API and the associated shop components handling voucher API calls have been improved for better error handling, ensuring a more stable experience. Additionally, voucher API logging has been enhanced to provide better support options in case of issues.

Release 2024.09

September 2024

In the September release, a highly requested shop feature is now available: the ability to create custom lists of articles, article groups, and product categories that can be displayed in various areas of the shop.

Furthermore, we have introduced support for Google sitemaps to better handle larger product ranges and made several improvements to the management of vouchers and delivery schedules.

On the ingration side of things, we have focused on our interfaces with Exact Online and Microsoft Dynamics Finance & Operations. Exact Online now supports bundled products, while F&O includes support for managing multiple administrations (or divisions) within a single shop.

Additionally, we are in the final stages of developing an import facility that supports products appearing in multiple categories within a classification. This extensive upgrade will be GA (generally available) in the October release.

 

 

In Shoxl shops, it is possible to use lists of articles, article groups, and product categories. These lists can be populated dynamically (by defining a query that returns items of various types) or statically (by manually listing the items that should appear in the list). Such lists can be used in various positions on the site for multiple purposes.

A good example would be defining a list of articles on offer, a list of new articles added to the assortment, or a list of articles related to the one a visitor is viewing. The following video show a homepage that starts with some fixed content, followed by three lists: a list of product categories, followed by a list of popular products, and ending with a list of product innovations.



Previously, users could populate these lists themselves, but the lists had to be created by Shoxl first. Now, it is possible to create lists directly through the Vendisto interface.
When a new release was rolled out, under specific circumstances, users would encounter a yellow error message stating, "Request does not contain correct security headers." As a result, it would be impossible to log in. This issue has now been resolved
The Google sitemap has been improved in several areas:
  • We now support multi-language nodes and a multi-language sitemap.
  • Additional modules, such as news and wiki, have been added to the sitemap.
  • An issue where duplicate URLs could be added to the sitemap has been fixed.
  • The sitemap will now automatically be split into several separate sitemaps, with a sitemap index, if the maximum size defined by Google is exceeded.
  • The rendering of the sitemap has received a performance boost.
The bulk Excel import was limited to a small number of classification levels using Level_[n] columns, where "n" indicated the depth of classification (e.g., Level_1, Level_2, Level_3). This system didn't support multiple categories per classification or multiple classifications per article group. The import process has been enhanced to support multiple categories per classification and now works with databases containing either a single or multiple classifications.

When both B2C and B2B customers can make purchases in a shop, B2C customers are sometimes allowed to buy in smaller quantities than B2B customers. Thus a customer may add items to their basket while still anonymous (under B2C rules), and then log in as a B2B customer. After logging in, the smaller quantities they added earlier may no longer meet the minimum quantity requirements for B2B customers. In such instances, the quantities in the basket must be adjusted to comply with the B2B purchasing rules.

Now, a notification popup appears to summarize automatic quantity adjustments when certain conditions are met. These adjustments occur under the following circumstances:

  • An anonymous user logs in.
  • The user's account is linked to price agreements.
  • These price agreements cover products in the user's basket.
  • The minimum order quantity is not met and/or the additional quantity is not divisible by the current article quantity.

This feature ensures that quantity requirements are automatically adjusted to meet minimum order thresholds.

The basket feedback dropdown previously required manual closure, which could interrupt the user's shopping experience. Now, the dropdown will automatically close after three seconds by default, streamlining the process for users.
Due to some back-end systems having delays in processing requests, users would occasionally click buttons multiple times, resulting in unnecessary calls to the back-end.

This issue has been addressed by adding a visible "processing" indicator and disabling buttons after the first click on some pages. This prevents users from clicking multiple times while their request is being processed.
The character limit for the CompanyVatNumber field in Vendisto Orders has been extended. This change allows customers with VAT numbers longer than 15 characters to complete their orders without encountering an error.
An issue occurred where French customers were unable to place orders, receiving the error message: "The database does not contain all required data."

This problem was caused by the shipping cost API not properly handling exceptions when selecting a country for which no pricelist-bound shipping cost rule had been defined. This issue has been addressed, ensuring that the system now handles such exceptions correctly, allowing orders to be placed without errors.
The article overview page did not always display prices with VAT correctly. This issue has been resolved, and prices including VAT are displayed accurately.
A bug in the stock check process for shops that only allow ordering of in-stock items made it possible for visitors to add unavailable articles to their basket. This happened because the initial stock check performed on page load was not functioning correctly. The issue has been resolved, ensuring that only available articles can be added to the basket.
Article lists in the shop sometimes failed to load price information correctly, depending on their location within the shop. This issue has now been resolved, ensuring that price information is consistently displayed across all locations.
The Exact Batch Interface previously did not support the synchronization of assembled items. Now, assembled item synchronization has been added to the Exact Batch Interface, utilizing the AssemblyBillOfMaterialHeader and AssemblyBillOfMaterialMaterials entities. This improves the integration and handling of assembled products within the interface.
XML export for assembled items did not include the codes of their component products. The export has been updated to include these codes, improving the accuracy and completeness of the exported data.
The stock level of an assembled product only reflected its own stock, which could be misleading when availability of its component parts varied. A new setting, ErpCachePreferLowestPartProductStock, ensures the stock level of an assembled product reflects the lowest stock of its components for a more accurate view of availability.
An issue with incorrect gross price filtering affected the Exact Batch Interface, causing inaccurate gross price exports. The problem has been fixed by prioritizing the default unit.
Inactive customers and relations of a different type than regular customers were being retrieved from Exact Online, leading to inaccurate data. To address this, stricter account synchronization has been implemented in the Exact Batch Interface. A new setting, AlwaysCreateNewAccountForPasserBy, enforces the creation of a new account for passersby, even if the company name is already known. This ensures proper distinction between customer types and better data integrity.
In the F&O Batch Interface, if an article is excluded from the full export/import but still exists in Vendisto, it will now automatically be assigned a 'Suspended' status. This change ensures that articles no longer included in the export are properly flagged for further action.
A new feature has been introduced in the F&O Batch Interface, allowing administrators to specify which warehouses the stock should be synchronized from. This is enabled through the new WarehouseCodes setting, which allows targeted stock synchronization from specific warehouses, providing more control over stock management.
A new "Cross-Company" setting has been introduced in the Finance and Operation (F&O) ERP Cache. This feature allows administrators to query multiple administrations (dataAreaId) at once, providing greater flexibility and efficiency when working with data across different companies.
A bug caused the import of newly added or updated Voucher/Customer links to fail in Vendisto. These links are used to associate specific vouchers with individual customers, allowing for personalized discounts, special offers, or targeted promotions. The issue has been resolved, ensuring that all newly added or updated links are correctly imported and processed.
An error in the automatic voucher check allowed users with no available vouchers to use an automatic voucher when placing an order. This issue has now been fixed, ensuring that only eligible users linked to a voucher can apply it during checkout. Additionally, several technical improvements and refactoring have been made, enhancing the system’s maintainability and readability.

The Voucher Customer Excel import phas been extended with several important validations to improve data accuracy:

  • Resolved Import Issues: Fixed broken functionality in the Excel import.
  • Redemption Limit Validation: Ensured that voucher redemption limits are validated as non-negative numbers.
  • Duplicate Entry Detection: Added validation to identify and prevent duplicate customer-voucher links.
  • Non-Existent Voucher Validation: Added checks for invalid or non-existent voucher codes.
  • Customer Validation: Ensured that non-existent customers (based on debtor number) are identified during import.
Several bugs in the handling of events within the delivery schedule module in Vendisto have been fixed. These bugs were affecting the functionality used to link customers to a schedule and to add or edit schedule overrides. The fixes ensure that delivery schedules and exceptions now work as intended, improving the overall functionality and reliability of the module.
When a customer was unlinked from a delivery schedule, it triggered an exception that affected all customers associated with the delivery schedule system. This bug has been fixed, ensuring that unlinking a customer from a delivery schedule only impacts the selected customer and does not affect the system or other customers.
Archived wiki items might reappear when the position of the wiki category was changed. This issue has been resolved, ensuring that archived wiki items remain hidden and do not reappear when the order is changed on the wiki category page. Archived items are properly ignored, maintaining a clean and organized wiki structure.
The wiki category positions are no longer handled as one large sequence across all languages. Instead, each language has its own ordering system.

For example, if there are three category items in two languages, both languages will have their own positions (1, 2, 3), ensuring better organization and management across different languages.

Release 2024.08

August 2024

The August release focused on enhancing integration capabilities and resolving minor issues. Highlights include:

For a complete overview, take a look at the full release notes!

 

New functionality has been added to both the Exact Batch Interface and F&O Batch Interface, allowing for the immediate export of updated stock for ordered items after a successful order placement. This feature can be enabled through a setting. This feature replaces the update of stock positions at fixed intervals.
Exact Online has the option to define product bundles consisting of individual articles that each have their own stock. The composite article can never be delivered in a quantity greater than the component with the lowest stock. This new feature calculates the available stock at the product bundle level.
A new feature has been implemented in Vendisto where a price list code (under a customer) is automatically created if it is not already known. Once the price list is created, it will be linked to the customer.
A new setting, SyncGoodsDeliveryAndDropShipment, has been introduced. This setting syncs the relevant entities to export a track-and-trace code under order lines included in the Order History XML Export. By default, this setting is turned off, as many customers do not require this functionality or cannot provide the necessary Exact Online permissions.
In the Exact Online Batch Interface, a bug has been fixed that previously prevented guest customers from placing pickup orders.
Resolved an issue where deleted 'Article Extra Descriptions' in Exact Online were not being properly removed within the export to the Shop.
Two new layout options have been added: a hidden search box option where the search box will appear after clicking a button in the header of the shop and a "sticky" header option where the header will stick to the top of the browser window when scrolling.
Shoxl has the option to automatically activate vouchers for selected customers. The voucher interface is then not shown, so the customer does not have to enter a code to apply a voucher. This functionality can, for example, be used to automatically give discounts for larger purchases. In this case, a bug has been fixed where the value returned by the voucher API would cause the basket to crash.
In Vendisto, it is possible to classify a product in multiple classification nodes. As a result, the product will be visible in the shop via different paths when following the various classification nodes. Each product will therefore have a different URL since the classification path is part of the product URL. However, the URL of the underlying articles will be the same for each of these products since only the article number is part of the article (product variant) URL. Because these URLs are the same, they will lead to only one - the main - classification node, which is the first in the list of classified nodes for the product.
Vendisto has the so-called order grid. After selecting colors from a list of available colors, a grid is built showing all variants available in the respective color, which can be ordered directly. When selecting a filter on the article group overview page and then selecting an article detail page with an order grid, all available articles would be preselected in the order grid instead of just the first article. The article detail page would display tabs for empty property groups; this has been changed so that only buttons for tabs with filled property groups will be displayed.
The order list UI on a page containing an article selection wizard would no longer be loaded and would remain disabled.
Entity columns in the F&O Batch Interface have been trimmed to reduce database space usage and enhance the efficiency of OData entity retrieval.
The Productgroup API can define an export in JSON format. This export failed when translations of product categories were missing. This has been corrected.
Shoxl has the ability to compile lists of products and place them in various locations in the shop. This can be used, for example, to display promotions. It could happen that, as a result of scripting/timing issues, prices were not displayed and the text "loading" remained visible. This has been corrected. Due to timing issues, in some cases, the price retrieval method did not work correctly and was susceptible to timing issues.
Added functionality to return a 'Post Calculation' label when selecting a country not configured in the Shipping Cost API.
With the switch "incl/excl VAT," a shop can quickly switch between prices including VAT and prices excluding VAT. However, this switch did not work correctly on shopping cart pages, where the ex-VAT price remained visible even when choosing to show prices including VAT.
Fixed an issue where filter expressions were not functioning correctly for TreeSync children within the F&O Batch Interface.
The F&O Batch Interface now saves the latest skip value after each sync iteration. This allows the sync process to resume from the point it left off if the maximum iteration limit was reached during the previous run.
The F&O Batch Interface now supports article synchronization based on a specified attribute. This is configured through the "ArticleExportAttribute" setting, which should contain the name of the desired attribute for synchronization.
Microsoft F&O Batch Interface: The data type DateTimeOffset has been introduced, replacing DateTime, to ensure safe and timezone-independent synchronization of entities based on the Modified property.
Implemented an exception handler in the Multivers Batch Interface to address an issue where the OData layer crashes while retrieving all invoices from a certain year.
The Invoice Sync & Export functionality in the Multivers Batch Interface has been temporarily disabled due to an issue causing the entire application to crash when receiving unexpected faulty responses from Multivers.

Release 2024.07

July 2024

The July 2024 release of the Shoxl e-commerce platform introduces several powerful new features and enhancements.

Key updates include the ability to dynamically toggle between displaying prices inclusive or exclusive of VAT, catering to both B2B and B2C customers. We've also added the option to use price lists as the basis for displaying customer-specific assortments. Additionally, shipment costs can now be calculated based on customer segments, determined by their association with specific price lists or even by debtor number. 

Furthermore, we've made major upgrades to our interfaces with Microsoft Dynamics F&O and SAP ByD, which now utilize the OData interfaces of these platforms.

Visitors are now able to switch between a view that shows all prices excluding VAT (the standard for B2B) to a view including VAT. This feature is particularly useful when shows address both B2C and B2B segments. This was a major change to a lot of sections of the shop, since every spot that shows prices had to be adapted.

Toggle between prices including and excluding VAT


The prices on the locations:
  • Discount tables
  • OrderLists
  • FavoritesLists
  • Basket preview
do now have labels for 'including' / 'excluding' vat
The Shoxl shop is able to use price lists for managing customer authorizations. This feature can be configured to display only the products included in a specific price list to the customers associated with that list. By implementing this, you can create customer-specific catalogs or assortments, ensuring that each customer only sees the products that are relevant to them.

In the example below, our customer Grapedistrict uses this technology to present each customer with a dedicated wine assortment.

Customer-specific assortments based on pricelist




In this specific case, we fixed an issue where the default setting for authorization profiles was incorrectly set to 'Allow' in Vendisto. The default is now correctly set to 'Deny'.
Introduced the CreateUnknownAuthorizationProfiles ImportSetting in the Article XML, enabling the creation of non-existing authorization profiles when articles are imported into Vendisto.
Fixed an issue in the Exact BatchInterface to prevent crashes when exporting gross prices from articles that do not have a valid base price.

A powerful new feature now offers granular control over payment costs through customizable filters. This functionality is designed to provide enhanced flexibility and precision in managing payment costs. With this feature, payment costs can now be adjusted based on the specific price list a customer is associated with, as well as the customer's debtor number. This allows for more tailored financial management, ensuring that payment costs are aligned with each customer's unique profile.

Key Features

  • Flexible Filtering Criteria
    • Filters can be applied based on PriceList and DebtorNumber.
    • Each criterion supports both WhiteList and BlackList configurations.
  • WhiteList and BlackList Options
    • WhiteList: Ensures strict inclusion by requiring a match with the specified PriceList or DebtorNumber.
    • BlackList: Excludes specific entries without requiring a match unless there is a direct conflict.
  • Priority Handling
    • When both WhiteList and BlackList are populated, the BlackList takes precedence.
    • This ensures that any conflicting entries are excluded according to the BlackList rules.
  • Combined Filtering
    • Filters can be applied simultaneously on both PriceList and DebtorNumber.
    • This allows for complex filtering scenarios, such as requiring a user to be linked to a specific PriceList while also excluding certain DebtorNumbers.

Usage Examples

  • No Filters Applied
    • If both WhiteList and BlackList are empty, or if PaymentCostsFilters is null, no filters will be applied.
  • Single Filter Applied
    • WhiteList Only: Filters are applied only when there is a match with the specified PriceList or DebtorNumber.
    • BlackList Only: Filters are applied when there is a match with the BlackList. If no match is found, the filter is not applied.
  • Combined Filters
    • Both Lists Populated: The BlackList takes precedence over the WhiteList. Entries present in both lists will be excluded.

Example Configuration

{
"PaymentCostsFilters": {
"PriceList": {
"WhiteList": [ "PriceListA" ],
"BlackList": []
},
"DebtorNumber": {
"WhiteList": [],
"BlackList": [ "20021204" ]
}
}

  • Users linked to PriceListA are included unless they have DebtorNumber 20021204, in which case they are excluded due to the DebtorNumber BlackList.

Benefits

  • Enhanced Control: Provides granular control over which users are subject to payment costs based on their PriceList or DebtorNumber.
  • Improved Flexibility: Allows for complex filtering scenarios to be easily implemented and managed.
  • Priority Management: Ensures that exclusions are handled effectively with the BlackList taking precedence.

We hope this new feature enhances your experience and provides the flexibility and control needed to manage payment costs effectively. For more details and usage guidelines, please refer to the full documentation.

The Excel importer for our new APIs has been completely rebuilt. The updated importer now includes the capability to validate incoming data. If any issues are detected, an HTTP 400 error will be returned, along with an Excel file where the problematic records are highlighted in red. This new importer has been initially implemented for the shipping costs import function.
Shipping Costs can now be linked to pricelists. This way it is possible to vary shipping costs between customer segments. As an example: assume every B2B customer is linked to a (B2B) pricelist, and B2C customers pay regular gross prices. With this new function it becomes possible to charge shipping costs to only B2C customers.
If we find a pricelist that does not yet exist in our cache, we will create one. But when it's an orphan, we will not remove it
The integration with Microsoft Dynamics F&O has been updated to use the F&O Odata interface. We now handle Customers, Prices, Pricelists, Stock, Orders, Invoices and a subset of Article properties through this interface.
  • Implemented OData for the SapByD Webservice.
  • Fixed a bug where suspended articles could not be set to active due to sharing an article group in Vendisto, but not in the exported XML.
  • Fixed the duplicate ArticleGroupDefaultTitle bug in the Article XML
  • Set Order Origin to Internet when a customer selects the Bank Transfer payment method while placing an order (SapByD Webservice)
A better error handling has been created for CSV upload articles that have a quantity that is lower than the minimum order quantity in an attempt to make the results clearer for the user.
The revamped article table did not correctly handle transposed properties. Properties with the same value across all articles in a table are moved to a specific section of the page. For example, if every article has the color 'Yellow,' this section will state: 'Color: Yellow.' The 'Color' column should then be removed from the article table, but it remained visible. This issue has now been resolved.
The logic for the (initial) sorting of the article table contained a bug resulting in the fact that the table only sorted the visible page instead of sorting before applying the paging.
Introduced two new fields for order lines, UnitCost and UnitCenter. These fields can be configured in the settings and will be included when placing an order. The setting names are identical to the field names.
Added a validation check in the Exact Batch Interface to ensure that exported stock items are located in one or more configured warehouses.
When for some reason a salesorder could not be placed in Exact, the Shoxl WebService error logging did not show the exact reason of the failure. We made some changes to the logging mechanism so that this exception is now written to the logfile.

When importing an article XML file via the bulk XML import, the importsettings as defined in the XML file are now used as settings for the import.
The order quantity input in order lists that also use the (checkbox) selection interface did not handle the minimum order quantity logic correctly.
The order grid had some performance issues due to the fact that too many requests to the server were triggered.
Fixed a faulty conditional statement regarding the mapping of default addresses in the SapB1 BatchInterface (Vendisto Customer Export)
Price sorting does now work with 'including' and 'excluding' vat. As well, numbers below one are now supported as well

Release 2024.06

June 2024

The June release includes several exciting new features. Among them is the option to calculate discounts for selected users based on the order total. Additionally, it is now possible to restrict payment methods displayed based on the shopper's country. The User Portal now supports the display of Track & Trace codes.

We've made numerous improvements to VAT handling, including support for specific Spanish taxes. Another frequently requested feature now implemented is the ability to show article groups in multiple shop categories.

Furthermore, there are extensive enhancements to our integrations with Exact Online, SAP Business One, SAP ByDesign, and Dynamics F&O.

We could go on and on... Check the release notes to get the complete picture!

It is now possible to automatically apply a discount to an entire shopping basket for authorized users, using the voucher module. The discount amount is determined by the total value of the basket, allowing for dynamic and customized pricing based on the customer's purchase. This is a specific use case of the voucher module, implemented in a way that is not visible in the shop interface. The only indication of the discount is a discount line that appears in the basket overview, allowing you to offer targeted discounts to specific customers without altering their shopping experience.

Toggle between prices including and excluding VAT


A new setting has been introduced to restrict Payment Methods to certain countries. The PaymentMethodCountryRestrictions setting allows specifying multiple countries for each individual Payment Method. The default value restricts IDEAL payments to the Netherlands.
A new setting has been introduced to allow anonymous users to Buy On Credit. When the BuyOnCreditForAnonymousUsers setting is set to true the shop will allow the Buy On Credit method for users having selected "Business" (as well as entered a company name) in the checkout. The default value is false.
We've added the option to display a Track and Trace code or link on the order lines in the order history.
The Order Line Type is no longer set to null by default when retrieved from the Shoxl Webservice for order history. It now defaults to "Product" if no value is provided.
When filling the quantities in the order list and favorites the browser would jump to all elements on the page. This has been changed so that only the amount input fields will be selected and the order button belonging to the specific list.
It is now possible to classify an article group multiple times in a classification. Also, some work has been done to prepare Vendisto so multi-classification is possible in the future.
The first record of the classification Paths is the main classification. The classification order can be altered by drag and drop. Also, a classification can be removed by selecting a classification path and pressing the delete button.
By default, this functionality is disabled. The setting: UseMulticlassification, must be set to use this new functionality.
The Article Bulk Export has been updated to support multi-classifications, while still retaining the ability to export in the old single-classification format.
When navigating to a product which is classified in multiple categories. The breadcrumb will be followed. The main classification will not be used in this case. When the article has been found via the search engine. The main classification breadcrumb will be used.
When searching/filtering on an article which has been classified in multiple categories, the article will only be displayed once even it matches multiple categories.
The Shoxl Search engine will not crash anymore if an item has been found which is classified in multiple categories. It will only display one product.
We’ve made important updates related to price display and tax preferences. Here are the details:
Price Display Toggle for Inclusive VAT
If the setting Price.Enable
The shop is now capable to apply the tax rules for the Spanish regions: 35, 38, 51, and 52. When selecting Spain and one of those regions, no tax has to be paid in the webshop. All the other Spanish regions still need to pay taxes. This functionality is only compatible with the Google autocompletion functionality.
The shop can now visualize when a user is TaxExempted. So a user does not need to pay taxes. See case #2084.
The shop can now visualize why a user should not pay taxes when selecting one of the tax-exempt regions of Spain. This will be visible in the basket. See case #2080.
Implemented a new "OrderNumber" property within InvoiceHistory, linking each invoice to its respective order. Additionally, within the Exact Batch Interface, integrated mapping of Exact Online's orderline states to the corresponding Shoxl orderLine states.
Implemented a new B2BAdditionQuantity mode in the Exact Online Batch Interface. This mode offers two options: default and MinimumOrderQuantity. When set to default, the b2bAdditionQuantity is set to 1. When set to MinimumOrderQuantity, the b2bAdditionQuantity is set to the corresponding MinimumOrderQuantity value.
The Article Group Name element has been removed and a the setting, ArticleGroupDefaultTitle=ArticleTitle, has been added to the Exact Online Batch Interface Article XML. This ensures that Article Groups modified in Vendisto are not overwritten.
Improved the Exact Batch Interface synchronization mechanism and introduced a new setting, FullSyncFrom:
Specify the starting date for syncing entities to the ExactCache. By default, the period is set to 1 year. You can customize this period using the following formats:
1y for 1 year
2m for 2 months
8w for 8 weeks
40d for 40 days
Additionally, a new CLI flag --forceFullSync has been introduced, which fully syncs entities specified after this flag.
Introduced a new mapping for the SAPB1 Batch Interface in the PlaceOrder action. The AddressLine2 field will now be mapped to either ShipToAddress2 or BillToAddress2, depending on the address type.
Implemented the retrieval of Article Descriptions as titles in the SAP ByD article XML export. This was created specifically for IGT Microelectronics and can be enabled with the following setting: "ArticleExportIncludeDescriptionAsTitle". However, in order for this to work, the following setting also has to have a value: "SapByD:DefaultLanguageCode".
Map the alternative address full name to the 'Care Of' (C/O) field in the Batch Interface of SAP ByDesign PlaceOrder.
We’ve introduced a new feature related to VAT display customization. Here’s what you need to know:

  1. VAT Display Switch
    1. If the webshopsetting 'EnablePriceDisplayToggleInclusiveVAT' and the layout setting 'ToggleInclusiveVAT' is set to false, the VAT switch will not be shown.
    2. The value of the VAT switch is determined as follows
      1. First, we check the user’s session. If a value is stored there, we use it.
      2. If the session value is empty, we look for the VAT switch value in a local cookie. If found, we use that value.
      3. If both session and cookie values are empty, we check if the user has provided a company VAT number. If a VAT number is provided, prices will be displayed exclusive of VAT.
    3. Whenever the VAT switch changes, we update both the session and the cookie.
These enhancements provide greater flexibility for users to customize their VAT display preferences.
The save functionality of delivery schemes in Vendisto did not work correctly with specific SQL versions.
Introduced an Excel Reader for the new Bulk Article Importer, allowing for faster Excel imports.
A new setting was introduced in the Article XML import. Empty article group titles will now fallback on the first article title when the following XML setting is enabled:
ArticleTitle
The Article Bulk Import has been updated to support multi-classifications, while still retaining the ability to export in the old single-classification format.
The article number in the article table was being sorted as a string, resulting in an order that did not make sense to humans. This has been remedied by introducing alphanumeric sorting in the table.
The external ID from an address will now always be added to the data when an order has been placed.
The article compare button will now display a text indicating that the comparison list is at capacity, making it clear to the user why it isn't possible to add the article to the comparison.
The page size of the Headercollection page has been increased to 1000 so the drag and drop interface will not break.
The issue has been resolved by using a different parsing technique for decimal values.
When an XML object has attributes and has no element value, the field was always rendered even when the attributes were empty.
The XML object will now only be rendered when an XML attribute has a value/default value. It will only render the field multiple times when translatable is true and at least the node is not empty or an attribute has a value.
The Account API does now support the user field: TaxExempt. When a user is connected to this field, the user will not pay taxes in the shop.
Not all columns in the order lists overview in Vendisto were searchable, the columns "name" and "client" have been added to the searchable fields.
The Carrier/Shipper Name is now expanded when sending it to postmark. It is displayed the same way as in the checkout.
The boolean translateable object has been added to the possible fields list. When a field is translateable, it will render the LCID fields. If not, it will not render the LCID fields. But when an object has translation, it will only render the first translation without the LCID tag. The translatable property can be overridden with AlwaysUseLanguageAttributes. When set true, it will always render the LCID tag even when translatable is false.
The Vendisto UI contained a timing issue resulting in a mix of Dutch and English labels in the interface. Vendisto will now read the selected browser language and use this language as the default UI language.

Release 2024.05

May 2024

Our latest update introduces significant improvements shipping schedule management, including new settings for handling shipping costs within orders. We've enhanced import/export functionalities, allowing for the import of customers with missing addresses and improved validation for shipping cost rules. Additionally, user interface improvements include enhanced filter functionalities, displaying deleted articles, and resolving issues with language dropdowns and YouTube video loading. New functionalities also include integrating the Azure service bus for the upcoming ImportExport Dashboard and specifying article weight fields.

A new setting, "ArticleWeightMode," has been introduced in the Exact Online Batch interface. It offers the following options: None/, Gross, Net, and NetIntrastat. This setting dictates which weight field is exported from Exact Online.
Introduced a new setting in the Exact Online Batch Interface: "EnableEmbeddedShippingCosts." This setting allows the utilization of the new Exact Online ShippingCosts line in an order, rather than relying on articles for shipping costs. Enabling this feature requires following specific steps outlined in the documentation. Review the internal documentation carefully before enabling this setting.
The Customer Import now imports customers even if one or more addresses are incorrectly formatted. However, faulty addresses are still excluded from the import process.
Turned out to be a flaw in the webservice that was not covered correctly by the new division code implementation, resulting in the account number not being passed to the connector. This is fixed now.
Implemented a new setting, PrefixHouseNumber, within the Exact Online Batch Interface. This addition ensures that addresses now adhere to British standards.
Integrated customized Exact Online OData interface metadata to address discrepancies found in their version. Notably, their metadata indicated that Warehouse(id) under stock information was non-nullable, contrary to reality where it is nullable. This mismatch led to validation errors, resulting in sync termination.
Implemented validations for shipping cost weight ranges and verified whether an article number exists in the Shipping Cost import.
The price filter validation is now tuned to allow decimal numbers. Previously, it wasn't possible to filter prices within two integers. For example, it was not possible to set a filter range of 1.50 to 2.42. Now prices can be filtered in 0.01 steps.
An optional "Show deleted items" option has been added to the articles list. By default, this option is disabled. When activating it, the list will reload with the deleted articles included.
Due to a bug in the scripting, the body scrollbar would be hidden and would not be made available again after closing the player.
The static lists were unable to render price information when being used via a custom tag from within the context of a page.
The tool AutomaticProductImportManager has been created, tested, and reviewed. This tool connects to the OAuth 2 server to obtain a token. This token is then used to connect to the Product API where a REST call is made to obtain the product list. The product list is then written to a file in specific locations. The location where the import file will be written to can be changed in the settings. The file formats supported are XML, JSON, CSV, and XLSX.
Added the "--fullSync " command line argument to the Batch Interface, enabling the resynchronization of a specific entity.
The app version of the basket would not disable the next button when there was insufficient stock available for an article in the basket.
As part of the development process of the upcoming ImportExport Dashboard, an internal test application was made to demonstrate the needed functionality of the Azure service bus.
Implemented a client library that can be used by the different import and export tasks to submit messages to the upcoming ImportExport dashboard.

Release 2024.04

April 2024

Our April update introduces significant improvements to stock management with the implementation of Exact Stock Webhooks for real-time updates. We have enhanced import/export functionalities with support for language-specific translations and improved XML import capabilities. Additionally, user experience has been improved with advanced handling of payment conditions, better navigation in the shopping cart, and enhanced filter and search functionalities. We have also addressed key bugs and introduced new settings for maintaining property order and shipping scenarios.

A new Exact project has been added to the WebServices Solution. This project has code capable of subscribing to and receiving Exact Stock Webhooks and transforming them into the Shoxl ErpCache Stock XML format.
The article XML import now supports the import of language-specific assets and asset label translations. This means that an lcid attribute specifying the language can be provided on both the asset value and the asset name elements of the import XML. On the Logo, Image, Icon, and Media Asset elements, the Name element may occur more than once (for different languages) but the Value element, which also has an lcid attribute, may occur only once.
The Article XML import now supports the import of classification level translations. For this purpose, the Classification Level elements in the article XML import now have an optional lcid attribute specifying the language of the translation.
The product images in the order and quote confirmation mails will now be provided by the CDN service (if configured in the shop).
A bug in the call to GTM "ViewItem" caused an article detail page to crash whenever the gross price for the article was unknown.
Saving the metadata for a page in Vendisto contained a bug causing the metadata fields to be cleared in some cases even when values had been provided.
If the partial article import is disabled a confirm message will be displayed warning the user of the risks of doing so.
Vendisto: A Vendisto user can now import/export the 'Shipping cost type'. This can be:
ShippingCostFree (No shipping cost has to be paid)
ShippingCostPostCalculation (Shipping cost will be paid on post calculation)
ShippingCostApplied (you have to pay shipping cost, can be on condition)
Shippingcost scenarios can now be defined in Vendisto. Three types are now supported: ShippingCostFree, Postcalculation, and shippingcost threshold met.
Using the alternative address form in the order process often led to confusing results when navigating forwards and backwards in the order process steps. We've fixed some bugs, making the order process less confusing.
In some cases the selected filter options would not be remembered when opening a filtered ArticleGroup page, resulting in a long article list on this page.
The unclassified articles list (reachable from the Vendisto home page) would also display some classified articles as being unclassified due to a bug in the data-retrieval functionality.
We've added the option to display the IncoTerm and Payment condition information in the order and quote confirmation emails.
The basket didn't show the status of an article with insufficient stock when the basket was loaded.
A bug was solved in the tool that generates the first token. The ManualTokenRequester did not parse the Expires date in the token. This was causing an early token refresh, which is not allowed by Exact Online.
In order to communicate with Exact Online, we need a token that is part of the OAuth flow that is needed to call the Exact Online API. The first token is generated by a manual process and hence refreshed by an automated process.
In some cases, the "Order all" button in an order list would be enabled despite the fact that an invalid quantity had been provided.
The asset synchronization process that encloses images from Vendisto to the Webshop was not working correctly when in Exact Online the jpg variant of an item image was replaced by a png. This, for example, happened when the customer wanted to replace an image with a white background with an image with a transparent background.
The problem was solved by configuring the latest version of the article XML import which under the hood contains a totally different architecture compared to the old mechanism.
Newly synced PriceLists to ErpCache in order to fix the issue with Unit mismatch causing calculate order to return 0 as the price.
Webservice: DivisionCode within the context object is now serialized with lower camelcase as specified in the documentation.
When saving a page the HTML will be parsed and image URLs will be changed to use Cloudflare CDN URLs (if configured). This parser contained a bug that caused parts of some image attributes to be omitted.
Article Translations have been incorporated into the Article XML for the Exact Online Batch Interface. These translations can be specified using the "Languages" setting, which consists of a ";" separated list of LCIDs (Locale IDs). The first LCID in this list serves as the Default language and must match the default language set in Exact Online. Description and Extra Description are the only fields that can be translated and exported from Exact Online. If these are not translated, the default language is exported.
We can now optionally display a label indicating the payment condition with the "On account" payment method.
An option to display the number of matching articles has been added to overviews that support searching/filtering.
When a debtor just has one user and that user does not have an email address, the customer email address can be used to activate the user. If the customer has multiple users this will not work.
The basket will now display an error message at the top and the bottom of the basket whenever the basket contains one or more articles with insufficient stock.
A new setting has been added for maintaining the fallback order for properties: SettingsManager.Web (settingsmanagerweb.azurewebsites.net).
A new setting, "B2BMinimumOrderQuantityFreeFieldNumber," has been added. This setting is responsible for establishing a B2B Minimum Order Quantity based on a free field within Exact Online articles, similar to the regular "Minimum Order Quantity." The B2B Minimum Order Quantity specified through this setting will be included in the exported pricelists XML. If this field needs to be exported only for specific price lists, utilize the "B2BPriceLists" setting. If left empty, this field will be included in all price lists.
Vendisto does now have correct labels for the ShippingScenario's so it is understandable what they do. (Free, post calculation, and threshold met)
The shop can now show the shippingScenario labels in the shop in a correct way
The order confirmation mailing can now show the correct shipping scenario label.
A new setting has been added for maintaining the fallback order for properties: SettingsManager.Web (settingsmanagerweb.azurewebsites.net).
It is now possible in Vendisto to drag and drop properties from the header collection to re-order the position. It is also possible to change the position by clicking on the position field and changing the position number.
Change the position by drag-and-drop
Change the position by position field:
The latest release contained 2 bugs in the order process preventing some order processes from being completed.
Created new cases for the Exact Webhook Webservice implementation of stock exports for articles with unit mappings.
The next step buttons in the order process would not always be correctly enabled or disabled when the basket was updated.
Exact Online: Solved a bug that occurred when the Exact interface to Vendisto tried to export an article that had a start date in the future.
A new Command Line Argument, "--syncEntitiesFrom = ," has been added to the SapB1 Batch Interface. This argument allows users to specify the starting point from which an entity is re-synchronized. For example, "--syncEntitiesFrom Order=12 BusinessPartner=6" will re-synchronize all modified entities from the past 12 months for orders and the past 6 months for Business Partners.