Dynamicweb 9.10

Release date: January 26th 2020

Dynamicweb 9.10 is a transitional release which has focused on improving and stabilizing existing features, while finishing the conversion and refactoring of core projects to more future proof technologies in preparation of Dynamicweb 10.

Please note that the conversion from .NET Framework to .NET Standard comes with some unavoidable breaking changes – make sure you read the Platform & Technical section before upgrading to Dynamicweb 9.10.

With Dynamicweb 9.10 we are releasing a new OpenAPI compliant WebAPI which makes it possible to deliver a headless experience on Dynamicweb. You can now set up a Dynamicweb solution and use it solely as a server that you query for data – and use that data independently of our template structure and frontend rendering engine:

  • Create a Single Page Application (SPA) written in your favourite programming language
  • Set up a query for e.g. promoted products and use it on your frontpage with asynchronous loading to keep load times low

To make it extra easy for you the webAPI is fully autodocumented locally on your Dynamicweb 9.10 solution, meaning that you always have up-to-date documentation of the WebAPI that you’re using for your application. Visit yourwebsite.com/dwapi/docs to see the Swagger UI-based documentation on your local website and consider using the try it out functionality to see how it works.

During this release we have implemented endpoints for the following data:

  • Areas
  • Groups
  • Navigations
  • Pages
  • PageViews
  • Paragraphs
  • Shipping
  • Payment
  • Products
  • Feed

We currently do not have anything for the managing the Cart, but we’re considering adding this endpoint if we get requests for it.

Visit our example guide to get some example code for building an app.

Good business decisions are based on a clear understanding of how data relates to other data;

  • Why did sales go up Monday but down Tuesday?
  • What impact does an influx of visitors from social media sources have on the average order price? On conversion rates?

Dynamicweb 9.10 introduces a new customizable Insights dashboard which can help you determine which actions have what consequences on sales. Out of the box you can select a time span and delve into:

  • Orders
  • Traffic
  • Sales

So who’s up for using data-driven Ecommerce strategies?

Figure 3.1 The Insights dashboard

When it comes to Ecommerce this release focuses on improving the shopping experience for the end-user:

  • Better support for click & collect:
    • View inventory per stock location in frontend
    • Order from a specific stock location
    • Render contact information for stock locations
    • Support for selecting a pickup location during checkout
  • Better support for product recommendations:
    • New OrderCount column added to product index containing a list of the products which appear in most orders
    • New OrderCountGrowth column added to index with trending products
    • New BoughtWithProducts column added to the index with the top 50 products bought alongside a product
  • New and improved Favorites Lists app for ViewModels. This app is a part of a continuous effort to split up and modernize the Customer Center app

This release also brings a much-requested improvement to stock units, where you can now define the relationship between stock units on per product – e.g. making a box of {wineproduct1} equal to 6 bottles, and a box of {beerproduct1} equal to 12 bottles. This is useful on most solutions, but perhaps most valuable on solutions with an ERP-integration where stock is usually kept in a base unit yet will be sold in other units.

In PIM we maintain our focus on making more information available to the editor, integrating with online data pools, and supporting specialized workflows and role-based access control. Our headlines are:

  • New Insights dashboard available for each product, showing product-related information – related products, recent changes (auditing), Channel membership, sales and visit insights, and so on. Deep-level insigths about the performance and history of each product is now only a click away from the product details view.
  • A more finely granulated set of permissions in PIM makes it possible set permissions on ribbon bar tools & field display groups, making it possible to create more specialized PIM editor roles.
  • Improvements to field and field type handling & maintenance where e.g. the ConcatProvider now supports prepend/append, the CalculationProvider supports rounding, and many other quality-of-life improvements to Category Fields, field validation, and more have been rolled out.

We’ve also been working on a new GDSN/GS1 connector which makes it possible to fetch product data from suppliers/sources within the GDSN network. The connector passes through an online service maintained by our partner SRC.nl, and represents the most recent foray in our continued commitment to integrating with online datapools. It is unfortunately not quite ready yet, but will be released in a patch ASAP.

Other notable changes are:

  • The Grid Edit tool has received several UX-related quality-of-life improvements
  • Product comments can now be maintained on individual language versions
  • The AutoAssignProducts scheduled task now removes product relations if a product no longer matches the query criteria

The Content area has seen minor improvements, with most of out focus being directed towards the Visual Editor:

  • The Visual Editor can now automatically generate thumbnails for page, paragraph & row templates. This makes it much easier to see what kind of content you’re adding, and since it is handled automatically you don’t have to worry about the thumbnail being out of date.
  • The Visual Editor now has language management support like other types of content. This makes it much easier to use the Visual Editor on multi-language solutions.
  • Visual Editor rows and columns must now be categorized when saved, making it much easier for the editor to find and select the appropriate template for any given task

On the Integration front, the Dynamicweb 9.10 development cycle has had a special focus on two themes: OData and LS Retail.

Dynamicweb 9.10 is the first release of many where we build out the support of integrations based on OData. Basically OData is an open standard for RESTful APIs which support standard HTTP GET, POST, PATCH and DELETE requests (see https://www.odata.org/).

In this first iteration we specifically focus on OData to and from Microsoft Dynamics 365 Business Central. Also, we limit our focus to batch-based integration, i.e. integrations that do not involve live calls to external system, but rather data integration activities that read data from one database and write data to another database on a schedule. We essentially build the foundation for all future OData integrations.

The release includes improvements to Endpoint Management and two new providers: Endpoint Provider and OData Provider. Please note, that both Endpoint and OData providers are released as version 0.1.0, i.e. they are beta releases.

  • Endpoint Management now allow you to add query parameters to the endpoint URL. The most obvious use case is to use filter expressions to control/limit which data you get in a OData response. Read more about filter expressions here: https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/webservices/use-filter-expressions-in-odata-uris
  • Endpoint Provider is a purpose built provider. It must be paired with an OData Provider. It communicates with an OData endpoint. The Endpoint Provider handles timeouts like “Too many request” if the endpoint is throttled or otherwise limited (see https://docs.microsoft.com/en-us/dynamics-nav/api-reference/v1.0/dynamics-current-limits). Where other providers act against a file or SQL table, the Endpoint Provider acts against an endpoint. This means it cannot access the underlying data and it does not know when the dataset ends. Instead it reads the metadata of the endpoint which is basically the schema. In OData-lingo this is called the Entity Data Model (EDM). When Endpoint Provider acts as a source provider, it reads the EDM and presents entities as source tables and properties as source columns. This allows a Dynamicweb user to map from the endpoint to a destination table and columns as if the endpoint was a conventional Excel or XML file.
  • OData Provider is a purpose built provider. It must be paired with an Endpoint Provider. It uses a set of object types. These object types contain predefined mappings between specific entities in Business Central and specific tables in Dynamicweb. The mapped entities are in some cases richer than what you would find in our own proprietary SOAP APIs in the Plug-in Units for NAV, BC, AX and FO. The object types in this release include: Country, Currency, Custom, Manufacturer, Order, Product group, Product translation, Product unit translation, Product unit, Product variant, Product, Product-unit relation, User, User address, User customer, User customer ship-to address, Sales person, Stock amount and Stock location. Each maps exactly what you would expect from its name. The exception is Custom which allow you to freely map entities without a dedicated object type.

Out of scope

  • Live integration based on OData
  • OData Provider with object type for sales prices
  • OData Provider with object type for discounts
  • (On premise) Dynamicweb Connector Service for OData endpoints
  • Scheduled task add-in for OData endpoints

Why OData?

  • OData is the future. SOAP is not.
  • Microsoft continues to invest in it because it enables their vision of a Common Data Model for all business data (see https://powerplatform.microsoft.com/en-us/dataverse/).
  • OData is the first technology with the possibility to obsolete Dynamicweb’s proprietary SOAP API in the Plug-in Units sometime in the future. If a full transition to OData is successfully executed, it would free up a lot resources for customers, ERP partners and Dynamicweb partners which are currently tied up in ERP customizations.

Why release beta version of Endpoint and OData Provider?

  • We would like feedback from partners as early as possible, so we release version 0.1.0.
  • We want to retain the right to make breaking changes based on partner feedback. As soon as we move to version 1.0.0, breaking changes are not allowed until next major version.

Known limitations

  • Dynamicweb uses OData from Business Central in a manner which is perfectly possible, but classified as an anti-pattern by Microsoft. We use Business Central pages exposed as web services. The benefit is that pages support custom fields, e.g. on users, products or orders, which the Business Central OData API does not. Pages also support many entities which this API currently does not. The downside is a performance hit.
  • There is no known standard way to get item/product attributes through Business Central OData. You will have to use our Plug-In Unit, which support this out of the box, or ask an ERP partner to create a custom API page in Business Central. Alternatively vote on our feature request above.
  • OData endpoints are enabled on all SaaS Business Central instances and Dynamicweb can connect directly. It is really easy to hook up a free sandbox on https://businesscentral.dynamics.com/ to any plain Dynamicweb solution. On premise Business Central instances need special setup by an ERP partner to enable OData through a secure HTTPS connection. Dynamicweb does not supply an on premise connector service like we do for our Plug-In Unit.

LS Retail is the company behind LS Central - a hugely popular ERP system in the Retail Sector.

LS Central has a rich data structure for members (users) and items (products) plus a rich ordering system with click and collect in physical stores, ship from physical store and ship from web store. This “richness” means users, products and orders in LS Central contain a lot of fields which Dynamicweb does not recognize unless they are created as custom fields first. Fields are one thing, another is the data presentation of those fields in frontend (pages and custom templates) and the data handling thereof (e.g. forms). The cocktail of many custom fields, new pages, template customizations and new forms have historically meant that it is challenging to setup a plain Dynamicweb and plain Rapido to be ready for integration with LS Central.

With the release of Dynamicweb 9.10 this changes! We have worked hard to minimize this challenge. We are now distributing a release package with templates and integration add-ins which – when copy/pasted to a plain Dynamicweb 9.10 and Rapido 3.4 installation – does most things for you. Furthermore, an add-in will provide the option to initialize a site, which will auto create pages, forms and some custom fields by a single click of a button. The other add-ins will create the remaining custom fields and build indexes as you start to import data. All of these steps are covered in Dynamicweb LS Retail Setup Guide.

New Features:

  • Initialize site button: Automatic setup of pages, forms, external login provider, custom fields etc. This allows you to turn a plain Dynamicweb and plain Rapido into a LS Retail-ready solution by the click of a button.
  • LS Retail scheduled task add-in now adds custom product fields as needed and builds index for facets/attributes.
  • Ability to pay online with a Dynamicweb Payment Provider. When order is shipped and invoiced from LS Central, then Dynamicweb Payment Provider captures credit card.
  • Ability to work with Dynamicweb Email Marketing and members from LS Central: We created a LS Member recipient provider which allows campaigns based on member gender, birthday, marital status, club level, zip code, point balance, published offer etc. This is truly a killer omni channel-feature when matching the rich member system from LS Retail with the All-In-One Platform from Dynamicweb.
    • You can do email campaigns in specific zip codes thus nudging online customers to visit physical store(s) in a certain area by offering published offers only available there.
    • You can send emails to married men and women prior to Mother’s or Father’s Day.
    • You can send emails to members that are one small purchase away from increasing their point level and thus reaching their next level in the loyalty club.
  • Frontend separation between the following concepts. It is now perfectly clear to the frontend user which concept is active.
    • View product stock in web shop and checkout order shipped from web shop.
    • View product stock in local store and checkout order shipped from local store.
    • View product stock in local store and click and collect order in local store.
  • Target Platforms.
    • LS Central 17
    • LS Omni 4.13
    • Dynamicweb 9.10
    • Rapido 3.4    

  • Live integration add-in is now a standard package in Dynamicweb. It is always there if you need it, no need to manually download it. This new live integration add-in can co-exist with custom or partner-developed live integration add-ins.
  • It has been a community request to be able to instantiate multiple live integrations with different settings. It is now possible to instantiate one live integration setup for all shops, if all shops share live integration settings, or instantiate one for each shop, if shops require different live integration settings.
  • Ability to select log for download instead of always getting the latest log.
  • Ability to copy data integration activities and jobs.
  • A button to rerun an integration activity instead of leaving the page just to click run again.
  • Improved the data integration activity page so less frequent saves are needed when adding new table or column mappings or editing keys.
  • Ability to view source XML file when setting up the XML Provider in a data integration activity.
  • A new control on the Ecom Provider which allow you to decide whether to auto create product groups if missing, or fail hard if a product group does not exist already. The default behavior is to auto create missing product groups.
  • Providers now log failing row Id and key value if errors arise when writing to Dynamicweb database. This will make it easier for partners and users to pinpoint where in the source file the error originates. This improvement applies to Dynamicweb, Ecom and User Providers.
  • Scheduled task add-in "Import data with paging" can now load all pages/batches to temporary tables before they are persisted. Without this new feature, providers could not remove missing rows as expected. Please be aware that you actively have to choose to load all pages into temporary tables and that very large datasets can lead to very large temporary tables. Use this feature wisely.
  • Test tool is now more responsive when dealing with large datasets and it captures round trip time on requests/responses.

  • Ability to import NAV/BC Customers as Dynamicweb users. This ignores any NAV/BC Contacts associated to the Customer records. Use this feature when the ERP does not use or maintain contacts, but only customer records.
  • Ability to export Dynamicweb users and create corresponding Contacts in NAV/BC. Use this feature in B2B scenarios where frontend users of a Dynamicweb site should be added to a B2B Customer in NAV/BC.

  • Upgraded Plug-In Unit for Dynamics 365 Business Central Wave 2 Release 2020 (BC 17).
    • Made Plug-In Unit for Dynamics 365 Business Central available in United Arab Emirates.
    • Shortly after the release availability will be extended to Estonia, India, Indonesia, Latvia, Malaysia, Philippines, Singapore, South Africa, Spain and Thailand.
  • Upgraded Plug-In Unit for Dynamics 365 Finance and Operations Wave 2 Release 2020.
  • Upgraded integration framework for LS Retail 17 and LS Omni 4.13.

  • The downloadable Live integration project on doc.dynamicweb.com/downloads/integration will no longer be maintained. Live integration add-in is now a standard package/feature of Dynamicweb 9.10 and onwards.
  • Loyalty Points in LS Retail release package. The initial support for loyalty points was based on a custom implementation, because Dynamicweb did not have a concept for points at the time. Dynamicweb have a concept for points now, hence the custom implementation has been superseded. For this reason we have removed points until a time where we can rebuild it.

At the Platform level we’ve been fully focused on converting our application stack from .NET Framework to .NET Standard. – this is a necessary step towards migrating to .NET 5, which is the most recent .NET version. As of Dynamicweb 9.10, all our projects from level 9 to level 5 have been converted to .NET Standard – this means that we now have the foundation for a shared core API between Dynamicweb 9 and Dynamicweb 10. So that’s all very exicting!

In related news, some of our packages now have new dependencies – and the following packages can no longer be updated independently:

  • Dynamicweb
  • Dynamicweb.Ecommerce
  • Dynamicweb.WeightedSearch
  • Dynamicweb.UserManagement
  • Dynamicweb.QueryPublisher
  • Dynamicweb.Management.Dashboards
  • Dynamicweb.LoyaltyPoints
  • Dynamicweb.ItemCreator
  • Dynamicweb.ItemPublisher
  • Dynamicweb.Forms
  • Dynamicweb.Forum
  • Dynamicweb.Gallery
  • Dynamicweb.Ecommerce.WebApi
  • Dynamicweb.EmailMarketing
  • Dynamicweb.Ecommerce.ShippingProviders.StockLocations
  • Dynamicweb.Ecommerce.FieldTypeProviders
  • Dynamicweb.DataManagement
  • Dynamicweb.DataPortability
  • Dynamicweb.DataIntegration
  • Dynamicweb.Controls

Going forward you must manually check the dependencies of these dll’s and include them AND make sure you have the most recent version of Dynamicweb.Controls – or simply update to a regular Dynamicweb release, e.g. Dynamicweb 9.10.

To reiterate – in the future you will usually have to update the entire solution instead of just updating the package, which contains the bugfix you need.

Other breaking changes:

  • Changes to BaseLiveIntegrationAddIn
    The signature of ‘RetrievePDF’ has changed because the method exposed System.Web classes. So, if you have a custom LiveIntegration which overrides this ‘RetrievePDF’ the code should be rewritten and recompiled, before updating.
  • Removed access to ADIntegrationService and DynamicwebErpService
    The two WebServices ‘ADIntegrationService’ and ‘DynamicwebErpService’ has been made internal, so if they have been used in custom code it must be changed to use ADServiceCaller and ErpServiceCaller instead.
  • Changed methods which exposes System.Web.HttpContext
    Because System.Web is not available on .NET Standard, we had to remove all the dependencies to it. This means that all the code which exposed System.Web classes has been rewritten to use an abstraction of it instead, so it works on both .NET Framework and .NET Standard
  • Changes to ReportProvider
    The ‘GetElement’ method in the ReportProvider has been removed and have instead been replaced with the ‘GetShowType’ method instead.

Feature-wise the Deployment tool has been improved and now supports various quality-of-life settings like disabling timestamp differences from comparison, search patterns for files, the option to exclude certain extensions, and segment filters. You can also select which caches to reset on the target (requires latest deployment templates).