Dynamicweb 9.9

Release date: August 25th 2020

As of Dynamicweb 9.9, Newtonsoft.json has been upgraded to v.12.0.3. If you have custom functionality using newtonsoft.json please update your code as required.

Like the last couple of releases, Dynamicweb 9.9 requires .NET Framework 4.7.2.

9.9.6 - Custom solutions: Due to changes to Oauth make sure you delete Microsoft.IdentityModel.Protocol.Extensions.dll from your /bin folder or corresponding nuget package from your project

Dynamicweb 9.9 has been released. It is a transitional release, where we’ve focused on improving and stabilizing existing features, while converting core projects to more future proof technologies in preparation of Dynamicweb 10.

And so – without further ado – here are the release notes for Dynamicweb 9.9.

PIM has been improved in every area, but perhaps most notably when it comes to the product enrichment phase which contains a new grid edit mode for working with multiple products and variants in a single grid-like view, and also features improved image handling with e.g. previews of images and pdf content, inheritance rules for non-categorized assets, and better support for images in bulk-edit. Import/Export tool configurations can now be saved as presets and reused, and you can set up validation on custom field values. Our integration with Channable has also been improved and now supports order synchronization between Channable and a Dynamicweb solution, so you can view and work with Channable orders directly inside Dynamicweb.

  • Structure & Workflows
    • Queries
      • Check for completeness in query expressions
      • Control which columns are shown by default when the result of a query is shown
    • Better field selectors implemented throughout PIM
    • Warehouse navigation tree performance optimized
  • Enrichment
    • New GridEdit mode for working with multiple products and variants in a single view
    • Set up RegEx-based validation of custom field values
    • Images & Assets
      • Improved Image Panel UI and supports preview of images and PDF content
      • Set up inheritance rules for “non-categorized” assets
      • Add images & assets to PIM groups
    • Bulk-edit
      • Save and reuse bulk-edit configurations as presets
      • Better support for images
    • Import/Export
      • You can now export to “raw” Excel instead of the DW-specific format we usually use
      • Save a combination of fields & languages as a preset and reuse it the next time you export data
  • Publication
    • Support for Image Patterns on channels reintroduced
    • Improved Dynamicweb Feed templates
    • Completeness rules may now be applied at the group level
  • Other
    • IceCat
      • Connector extended to support more product information
      • Improved handling of IceCat fields and content
      • Assets from the IceCat MultimediaLinks field type are now supported
      • Mappings between IceCat languages and DW languages created
    • Channable
      • Orders can now be synchronized between Channable and a Dynamicweb solution
      • Product-data distribution to Channable has been extended with new information
      • Support for user-specific prices & stock in feeds

When it comes to Ecommerce, our focus has been on improving and extending our ViewModels – including the view-model based Customer Experience Center which will eventually replace the current customer center app. In addition to this we’ve also improved a number of existing checkout handlers, with QuickPay and EbizCharge now supporting inline payment. Two new checkout handlers are also being released; Adyen Checkout for our Dutch customers and Authorize.Net API for the American market. Finally, we’ve released several minor changes requested by our partner network, e.g. standard order fields for an OrderReference and OrderShippingDate, and standard product fields for Expected delivery and for handling product discontinuation.

  • New ViewModel-based Customer Experience Center app for listing orders, carts, quotes, ledger items, and recurring orders
  • Ecommerce Statistics have been overhauled and are no longer flash-based (yay!)
  • New discount validation loop makes it possible to show customers why they don’t receive a discount, e.g. spend $986 and get a free keychain!
  • Price Matrix prices can now be marked as with/without VAT
  • New CreateCart cart command for creating  order drafts
  • Payment:
    • New checkout handler: Adyen Checkout
    • New checkout handler: Authorize.Net API – this checkout handler uses the new Authorize.Net API
    • EbizCharge now supports iframe mode and has ACH support
    • The DIBS Easy provider can now be configured to pre-fill the payment form with information from the billing address fields
    • The Valitor checkout handler now supports Klarna payments and uses order information instead of user information for notification emails
  • Products:
    • New standard field for stock items – Expected delivery
    • New Discontinued Products section for marking a product as discontinued, selecting a replacement product, and controlling what happens if a link to a discontinued product is accessed
  • Orders:
    • Two new standard fields – OrderReference and OrderShippingdate – for integrated orders
  • ViewModels:
    • Support for loyalty points in PageViewModel
    • PrimaryOrDefaultGroup and InformativePrice added to the ProductViewModel
    • GroupId added to NavigationViewModel
    • Formatted price properties added to PriceViewModel
    • Product Catalog for ViewModels can now render a feed template when feed=true is added to the url

The Content area has seen minor improvements across the board, with the Visual Editor receiving special attention in the UX area. In Marketing we’ve improved the Back-in-Stock recipient provider and the SendGrid provider, and custom user fields can now be set at the group level and will inherit to all users in the group unless a value is defined on the user.

  • Visual Editor
    • Support for SVG images
    • General UX improvements
  • Comments
    • New Antispam settings introduced
    • New list of all comments available in backend
  • Forms for Editors
    • New Input pattern attribute on all fields allows you to set up RegEx-based validation of form input
  • Language Management tweaks:
    • Paragraphs used as global elements will now reference the correct language version instead of always referencing the version on the master
    • Copying a translated paragraph or page will copy the translated version on the language layer instead of the master version
  • Items
    • ItemRelationList items now support draft mode
    • ItemRelationList items now respect language management settings
  • The Back-in-Stock recipient provider can now send notification emails to users even if they have not signed up for regular emails
  • The SendGrid delivery provider can now use an API key for authentication instead of username/password
  • Custom user fields can now be set at the group level, and will inherit to users in the group unless a specific value is set on the user

Our Integration team has been preoccupied with with a series of LS Retail-related features – which are not ready for release yet but include feature such as pay online and collect in store, Cancel order in frontent and backend, and creating an LS Retail-based solution on top of a mode modern Dynamicweb base (Dynamicweb 9.9 and Rapido 3.4). The team is also exploring the strengths and weaknesses of OData. In addition, both our Business Central and Finance and Operations integrations have been updated to support latest major versions – and other minor tweaks, fixes, and improvements listed below.

  • Microsoft Dynamics 365 Business Central
    • Support for latest major version (BC16)
    • New release policy
      • Dynamicweb Plug-In Unit is available on AppSource for Dynamics 365 BC Online (SaaS).
      • Dynamicweb Plug-In Unit is available as Runtime Package for Dynamics 365 BC On Premise.
      • Dynamicweb Plug-In Unit is available as extension with source code visible for debugging purposes on Dev/Test servers. Access is given upon request.
    • Other Improvements
      • Batch-imported currency rates are no longer rounded. This was done to prevent minor rounding errors between asynchronous and synchronous price calculations.
      • Synchronously generated sales orders (Live carts) and asynchronous sales orders (scheduled orders) use the same method in the plug-in unit. This was done so that partner-extensions could extend live carts and scheduled orders in the same manner.
      • When importing contacts as Dynamicweb frontend users, we now make sure that they always get a currency code. This was done to prevent arithmetic-errors in customer price calculations for logged in B2B-users.
      • Added “isLCY-tag” to the base/local currency. This was done to allow integration developers and partners to detect the base/local currency of the ERP-system, without having to ask the ERP-Partner.
      • Mapped phone and mobile phone numbers from contacts in ERP to users in Dynamicweb.
      • Mapped EAN numbers from items in ERP to products in Dynamicweb.
      • Added a live integration setting to allow the use of ProductNumber, instead of ProductId, when live-calculating carts and creating sales orders in ERP. This option has been available for live price calculation in product catalog and product pages for a while, but not for orders. It meant live cart calculation of prices could not detect when items in ERP were setup as variants in Dynamicweb.
  • Microsoft Dynamics 365 Finance and Operations
    • Support for version 10.0.0.10
  • General features and improvements
    • New scheduled task add-in: Export data with custom request. This option allows integration developers and partners to send out Dynamicweb-data to a custom endpoint. We envision the use of Dynamicweb Provider as source provider to expose any table in Dynamicweb. Then asking an ERP-partner to extend the Dynamicweb Plug-in Unit with a request that can handle the table/column data being sent to the webservice URL which is already opened. The possibilities are endless. It could be sending favorite lists of users into customer records in ERP or abandoned carts. It could also be translated product data or other data enrichments.
    • When importing products using pagination, Dynamicweb no longer builds the index on every page/batch.
    • Excel Provider: Added a way to append, prepend and set constant script values. This is already available on other providers.
    • Fixed an issue where completed scheduled jobs looked like they contained warnings, despite having completed as expected.
    • Fixed an issue where scheduled jobs would not run its first time on the expected start time.
    • Added ability to run scheduled jobs in a sequence based on sort rank. Integration developers and partners can manipulate this sort rank with a drag and drop-enabled user interface.

At the Platform level the Monitoring area now contains a Data Health node which provides you with overview of the state of your database, and also current vs recommended security settings. We’ve also improved the Deployment tool which can now export a deployment configuration as a file, and then import it elsewhere using a scheduled task. This makes it possible to use deployment even if your staging and production environments are not on the same network. We’ve also introduced a number of filters when comparing source and destination, which makes it much easier to get an overview of changes.

At the Technical level all services in Dynamicweb.Services and Dynamicweb.Ecommerce.Services now use a generic caching framework and we’ve created a new cache overview under Settings > Developer > Cache.

  • New Data Health monitoring service released, providing you with an at-a-glance overview of potential issues with bad data and security settings
  • Analytics & Insights
    • Funnel Reports
  • SQL Firehose improved
  • Deployment
    • You can now use filters when comparing source and destination, showing only relevant
    • Save deployment to disk, import using scheduled task
    • Show up to 5 primary keys when comparing data
    • GridRows can now be deployed
  • Search & Indexing
    • Minimum & maximum values for numeric facets added to FacetViewModel
    • Better Did you mean suggestions
    • Frontend search statistics – track specific queries and see what people search for without seeing any results
    • New SkipGroupSorting option in the product index builder leaves out group sorting fields – this may improve performance and also makes it much easier to see what’s going on
  • The Generic Excel Exporter now responds to the url parameter dwtemplatetags=true with a list of all available placeholders, as well as dynamic file names when exporting a file.
  • You can now use TinyMCE 5 instead of CKEditor 4 in your editor configurations
  • The Image Handler now correctly supports transparency when converting to the webP format
  • Changes to GlobalSettings are now logged in the EventViewer
  • Caching
    • All services in Dynamicweb.Services and Dynamicweb.Ecommerce.Services now uses a generic caching framework
    • New cache overview under Settings > Developer > Cache (with a clear button)

Below you will find a raw list of all Features included in this release - please keep in mind that a feature in our development process probably doesn't correspond to what you think of when you hear the word 'feature'.

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()