Dynamicweb 9.7

Release date: August 28th 2019

Dynamicweb 9.7 requires .NET Framework 4.7.2. This is a necessary step towards making the application .NET Core compatible. Please ensure all self-hosted solutions have .NET 4.7.2 installed before upgrading to DW 9.7.

AbcPDF has been replaced by IronPDF - please read the important notes here

Dynamicweb 9.7 has been released with the following headline features:

Dynamicweb PIM has been improved with several new features and quality-of-life improvements to existing functionality:

  • A new kind of product category field – Reference fields – can be reused across multiple product categories. This makes it possible to create frontend filters which function across product categories, and the field type can also act as a data destination on integrated solutions.
  • Image management has been overhauled, making it much easier and more intuitive to work with images and image categories inside a product family
  • Channel & Feed UI has been overhauled, and you can now include/exclude custom fields. A new XML provider for feeds is available – it allows you to use XSLT to transform feed data before it is published.
  • The Bulk-edit tool has been improved – you can now select which variants to include, search for products, and more.
  • A new editor-friendly feature to import product data from an Excel sheet will be released in a coming patch
  • Prices, Stock, Discounts & VAT group assignment can now be handled directly in PIM instead of via Ecommerce
  • A set of keyboard shortcuts – e.g. Ctrl-S to save and Ctrl-Shift-S to save and close – make for a more pleasant editor experience when working with PIM data.
  • The Combine tool can now extract all products from a product family at once
  • Improvements to stability and performance

On the Content front we’ve released a new tool called SEO Optimize which can help you with search engine optimization – this replaces the deprecated SEO Express module. We’ve also made it possible to set website-specific Auto templates in Forms for Editors, making it much easier to localize form templates. Sending user information via user management has been improved with new default settings and a better flow. The Datalists app now supports downloading data in CSV/Excel format.

In Ecommerce we have the following noteworthy changes:

  • Inline payment as a part of the checkout flow is now possible. A new checkout handler – DIBS Easy – has been released to expand support for this feature (Stripe also works).
  • A Klarna Checkout v3 checkout handler is now available as a BETA release.
  • Shipping methods can now be limited to only be shown a subset of your users, a feature which makes it much easier to create B2A setups.
  • A new image pattern model is introduced for more flexible and much faster image detection to better support variants. Custom fields can now also be used as variables in image patterns.
  • The product catalog can now use group-sorting in frontend when in a group context and using index-based queries to publish products.
  • A new URL provider for Ecommerce groups, products and variants is available giving much better control over ecommerce related URLs. Place Group and Product links in root of the URL tree, avoid duplicate nodes in the tree and the -1 problem and much more.
  • The management of countries, payments, shipping and discounts have been improved.
  • New standard product fields - EAN, Width, Height, Depth, and Never out of stock

Looking to upgrade? Consult the bug fixes list before upgrade.

At the platform level we’ve also made several exciting changes:

  • You can now create multiple dashboards under each area – this makes it easier to create shared team- and task-oriented workspaces, management-only workspaces.
  • A new URLProvider concept has been introduced making it possible to create your own URL providers with a high level of control.
  • Security has been enhanced and Dynamicweb now supports a number of http security headers.
  • You can now add custom mappings for Latin character normalization.
  • A new mobile app for Android and iOS showing dashboards from a Dynamicweb solution will soon be released. This makes it possible to follow e.g. Ecommerce performance, PIM status, Integration jobs, and much more.

The Permissions model now supports inheritance from area buttons – Content, Files, Users, Ecommerce, PIM, Marketing, Apps & Monitoring – to underlying trees and content. The exception to this is the settings tree, where permissions are only inherited to tree nodes but not to underlying data (which includes e.g. Ecommerce languages, indexes, and so on – stuff which should be available to editors elsewhere on a solution.)

The Indexing framework has been updated with several quality-of-life improvements.

  • Facets can now be sorted via drag & drop.
  • Facets can now be dependent on other facets, so they only show up if another facet (or parameter) has been set – this makes it possible to build cascading filters.
  • Facets can now be limited at the product group level, leaving out facets from specific groups
  • You can now generate facets dynamically based on URL parameters.
  • Query expressions can now be sorted via drag & drop – and disabled/enabled with a single click, making it much easier to test how a query behaves in frontend without constantly deleting/creating expressions.
  • The UserIndexBuilder now supports partial rebuilds.
  • The ProductIndexSchemaExtender now contains product group sorting information
  • Auto-updates to a product index are now also triggered by adding related products.

When it comes to Integration, the Dynamicweb 9.7 release has a special focus on Dynamics 365 Business Central and on aligning pricing and discount functionality between Dynamicweb and Dynamics 365 Business Central. We have also made sure that new features are backward compatible with older versions of Dynamics NAV.

Dynamicweb customers and partners can now decide which system controls which functionality. It is for instance possible to let NAV control product and invoice discounts, while Dynamicweb controls shipping fee calculation – or vice versa if Dynamicweb’s more advanced product discounts are needed (e.g. Buy one, get one free). This is primarily to support the use case where marketing departments drive Ecommerce efforts through online campaigns and discounts, but have limited capabilities to add discounts to their ERP system which is traditionally governed by finance departments. Now marketing employees can define discounts in Dynamicweb All-In-One Platform and rest assured that Dynamicweb will apply the discounts to NAV sales orders automatically.

To support Dynamics 365 Business Central, Dynamicweb’s underlying technology has changed a lot. This is important to note for Dynamicweb partners, solution architects and ERP partners. The method and effort involved in deploying extensions to Dynamics 365 Business Central have undergone major changes by Microsoft.

For this reason, the integration team at Dynamicweb has aligned to Microsoft’s best practices and have made our Plug-In Unit for Dynamics 365 Business Central available on Microsoft’s marketplace AppSource. This is a validation of our efforts and it means all Dynamicweb partners and ERP partners will have a high starting point if they choose our Plug-In Unit when integrating with Dynamics 365 Business Central and NAV.

Feature list:

Batch Integration:

  • Ability to import multiple NAV contacts per NAV customer
  • Ability to import all relevant NAV addresses per NAV contact (ship-to, alternative, personal addresses)
  • Ability to import NAV salespeople
  • Ability to import NAV contacts per salesperson
  • Ability to import NAV item categories as product groups
  • Ability to import NAV item attributes as (read only) product properties
  • Ability to do paged import of NAV items (products)
  • Ability to import NAV inventory locations
  • Ability to import inventory per product per location
  • Ability to import NAV item and item category translations corresponding to language codes in Dynamicweb All-In-One Platform

Live Integration:

  • Discounts & Shipping fees can be handled on either side of the integration (D365 BC/NAV) – Dynamicweb product discounts are applied to NAV sales orders without any customization
  • A new tag for showing connection status in frontend is available
  • Ability to get NAV sales orders, invoices or credit memos as NAV-generated PDF stream
  • Ability to do paged requests of list of sales orders, invoices or credit memos. This improves user-perceived performance in frontend
  • Ability to request NAV customer statements as PDF stream
  • Ability to define which NAV customer to use as B2C customer. NAV sales line discounts, NAV invoice discounts and NAV special prices will apply to all B2C customers.

Frontend & UI:

  • Ability for users to login with their NAV contact details and select any relevant NAV address as a ship-to destination
  • Ability for salespeople to login with their NAV details and impersonate any associated NAV contact/customer
  • Ability for users to view orders, invoices or credit memos as NAV PDF

Deployment/Availability:

  • Plug-In Unit available as separate code units for Dynamics NAV 2013, 2015, 2017 and 2018.
  • Plug-In Unit for Dynamics 365 Business Central available on Microsoft AppSource
  • Plug-In Unit for Dynamics 365 Finance and Operations now supports latest version of D365FO (v10)
  • Following Microsoft’s best practices, the Plug-In Unit for Dynamics 365 Business Central is now an extension and based on Application Language (AL) code.

Dynamicweb 9.7 requires .NET Framework 4.7.2. This is a necessary step towards making the application .NET Core compatible. Please ensure all self-hosted solutions have .NET 4.7.2 installed before upgrading to DW 9.7.

The following technical changes should be noted:

  • AbcPDF has been replaced by IronPDF which means that custom code using AbcPDF directly will no longer work. IronPDF uses Chrome as rendering engine compared to Internet Explorer in AbcPdf. This means that pdf-specific templates can break with this upgrade
  • ImageGlue component upgraded from version 7.3 to 7.5
  • Removed most dependencies on Newtonsoft.json (work in progress)
  • Performance:
    • Improvements to user groups based on smart searches
    • Made many projects context independent
    • Converted many projects to a service-repository based model
    • Index build logging is less insane (all errors per run in one file vs a separate file per error)
  • Process for converting to .NET Core initiated – this requires .NET 4.7.2 on the hosting environments
  • Conversion of application stack from VB to C# continues
  • ViewModels are now better supported, especially in Ecommerce-related templates
  • New custom URL provider

Obsoleted & Deleted features

The following Ecommerce namespaces have been deleted:

  • Integration/C5
  • Orders/Affiliate
  • XmlGroups
The following Ecommerce namespaces have been obsoleted:
  • Analytics
  • All collections
  • Statistics
  • StockGroupCollection
  • StockStatusCollection
  • StockLocationCollection
  • StockStatusLanguageValueCollection
  • StockStatusLineCollection
  • StockUnitCollection
  • Gatewayprovider
System.Net.WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure. at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception) at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest, Boolean renegotiation) at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result) at System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size) at System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size) at System.Net.ConnectStream.WriteHeaders(Boolean async) --- End of inner exception stack trace --- at System.Net.HttpWebRequest.GetResponse() at Dynamicweb.Analytics.Seo.HttpData.Lookup()