Products

product is an object which represents something you want to sell, e.g. a physical object, a service, a digital gift card, etc..

On the product object you can store a lot of information, e.g.:

  • Names, IDs, prices, stock, etc.
  • Physical dimensions
  • Links to assets like datasheets & images
  • Etc.

You can read more about product fields - standard and custom - in the product fields article.

In this article, you will learn more about products in Dynamicweb, starting with the basics – how to create and manage products – and all the way down to more advanced topics, like context sensitive pricing (the price matrix) or units and unit categories.

Products can belong to one or more product groups. If a product belongs to more than one product group it's a good idea to set one of the groups as the primary group, the one used to generate a unique URL to the product in frontend. This can be done via either the related groups tool or via the context menu on a product list in PIM or Ecommerce.

Most businesses renew their product portfolio over time; new products are added and old products are removed. Where this happens depends on the solution architecture:

  • On an integrated solution products are typically created on an external system, and then imported/deleted on a schedule when the import job runs
  • On a non-integrated solution products are created directly in Dynamicweb

You can add products directly in Dynamicweb from any product list using the ribbon bar buttons New product and Create multiple products (Figure 2.1).

Figure 2.1 Creating products

Creating a single new product opens the product details view so you can add data to the product fields.

Creating multiple new products opens a grid view where you can enter product data into the selected product list columns (Figure 2.2).

Figure 2.2 Creating multiple new products at once

NOTICE!  if you import products, and ProductId is part of the import data, make sure that the ProductId contains Aa-Zz or 0-9 ONLY, and nothing else. Do NOT use space, comma, dot or any special character.

Once products have been created, you can edit them to update their prices, descriptions, product images and so on.

If the solution architecture supports doing this directly in Ecommerce (instead of e.g. Dynamicweb PIM or a remote system), this can be done simply by clicking a product in the product list and changing product field values (Figure 4.1).

Figure 4.1 Editing product fields

You can also edit multiple products – select them in the product list and click Edit products to open grid containing the selected product list columns (Figure 4.2).

Figure 4.2 Editing multiple products at the same time

 

Dynamicweb operates with four types of product:

  • stock item is usually a physical product (which you can, in theory, run out of, i.e. it has a limited stock)
  • service is usually a non-physical product, like support or billable hours – if selected, stock level and stock state are unavailable in the default information panel
  • parts list consists of several products and/or product groups, e.g. a computer with defined/selectable parts
  • gift card allows the gift card holder to purchase other goods or services using a gift card code

Stock items and services are self-explanatory - and parts lists and gift cards are explained below. 

A stock item is a physical product, which means that it has limited stock. This is the default product type – unless another product type is specifically selected, new products will be created as stock items.

A service is a non-physical product, like support or billable hours. Service-type products are identical to stock items except that stock-related fields (Stock level, Stock state, Units & Stock) are unavailable.

A parts list is a special product type, which consists of a set of other products. The products included in a parts list can be both fixed and configurable, and the contents may be added to cart either as a single product or as a bundle of products, depending on the configuration. 

Parts lists are created in the standard manner, but you must select the 'Parts list' product type in the Advanced configuration section of the product details. Once saved, two properties unique to parts lists appear:

  • price calculation field under Advanced configuration
  • A parts list button in the ribbon bar

The price calculation field (Figure 8.1) allows you to choose between several price calculation methods:

  • Calculated price sums up the individual prices of all products added to the parts list
  • Fixed price uses the Price field on the parts list product, and ignores the price of all included products
  • Fixed price plus changes combines the regular Price field with the individual prices of all included products
Figure 8.1 The Price calculation dropdown

A parts list may contain both fixed products - i.e. products which are always part of the parts list - but it's also possible to make a parts list configurable; this is done by letting the customer choose between items in a product group.

To configure the parts list contents (Figure 8.2):

  • Click the Parts Lists button in the ribbon bar
  • Use the green plus-icon to add a number of products or product groups to the parts list 
  • Specify the quantity of each product to include

 

Figure 8.2 Adding products to a parts list

If a product group is selected the quantity indicates how many products from this group can be included in the parts list. You can preselect a default option using the radio buttons, and also write a nothing selected text (e.g. Select your helmet here).

The sort icon can be used to sort the individual products added to the parts list - product groups follow the sort order of the group selected.

A gift card is a special product type which generates a unique code when sold. The code can then be used to pay for other products in your web shop. It must be shown to the customer on the order receipt or in an order confirmation email – preferably both.

A few things to note about gift cards:

  • Gift card products are created in the standard manner, but you must select the ’Gift Card’ product type in the Advanced configuration section of the product details.
  • Since a gift card is a digital product, stock is unlimited and so all stock related fields (Stock level, Stock state, Units & Stock) are unavailable on this type of product.
  • Gift cards also don’t work with the following Ecommerce tools & features; Variants, the Price Matrix, Discounts, Parts lists, Units, and VAT Groups.

Whenever a gift card is sold and a gift card code is generated, it is added to the Gift cards list in Ecommerce (Figure 9.1). You cannot generate gift cards manually – they must be generated by a sale from frontend.

Figure 9.1 The Gift Cards node lists all gift cards sold on a solution

In the gift card list you can see information about all gift cards sold on the system:

  • The name of the product sold
  • The gift card code
  • The currency – gift cards can only be used to buy products in the same currency as the gift card
  • The creation date and expiry date (the default is 24 months after the creation date, but this can be changed)
  • The initial amount and the remaining balance

You can select any number of gift cards and click cancel gift card – this sets the expiration date to ’now’.  You can also click a gift card to see a list of transactions where the gift card was used (Figure 9.2).

Figure 9.2 A list of all transactions involving a particular gift card

A gift card may be sold with either a fixed amount, or a variable amount where the customer enters a sum before completing the purchase:

  • A fixed amount gift card is simply sold for the price, as per any other product
  • To sell a variable amount gift card, check in your template if the product type is 3 (for gift card), and if it is replace the price field with an input field with the name and id ‘amount’

When a gift card is sold, the unique gift card code should be shown to the customer on the receipt and in an order confirmation email.

You must also modify the checkout flow and add an input field (name and id = EcomOrderGiftCardCode) so a customer can use a gift card to pay during checkout.

All Ecommerce solutions have a default language and optionally a number of additional languages.

When more than one language is present on a solution you can use the language selector dropdown (Figure 10.1) in the ribbon bar to change the language context.

Figure 10.1 The Language selector allows you to switch language contexts

A new product is always created in the default language, as well as in the current language context.

To localize the product to additional languages:

  • Switch to the language context
  • Translate the product field values as appropriate
  • Save

To remove a language version again:

  • Switch to the language context
  • Click the Delocalize button

You can’t remove a language from the default language – but you can deactivate it (depending in your Fields settings, of course)

From the ribbon bar you have access to more advanced tools for working with products in Dynamicweb Ecommerce.

Using these tools you can:

  • Assign discounts to a product
  • View and edit related groups and related products
  • Set up custom publication periods (campaigns)
  • Work with languages and localize or delocalize products
  • Access marketing tools such as personalization
  • Work with prices, stock and VAT groups in an advanced manner using the matrixes

 

The discounts dropdown (Figure 12.1) is used to include or exclude a product from order discounts.

Figure 12.1 You can include or exclude a product from certain order discounts

To include a product in or exclude a product from a discount:

  • Click the arrow-icon and select Include in or Exclude from
  • Select one or more discounts (they must have the ’Assignable from product catalog’ flag set to true to appear in this list)
  • Save

After saving – or if you click the Discounts button – you can see a list of discounts which this product has been included in or excluded from (Figure 12.2).

Figure 12.2 The discounts overview

The related groups dropdown and interface (Figure 13.1) allows you to manage which product groups a product belongs to. You can also specify which group is the primary group, which is relevant for generating canonical URLs.

Figure 13.1 Related groups

The Related products tool is used to create relations between products – the nature of the relation is defined by the Relation group which is basically a label such as Recommended or Women's Choice or any other type of relation you can think of. As such you can think of related products as a way to create custom groupings of products, which makes it possible to render e.g. the related products on a product details page.

Click the Related products button opens the interface for adding and managing related products (Figure 14.1).

Figure 14.1 Related products

To add related products:

  • Click Add related products
  • Select or create a relation group
  • Fold out the tree structure and select a number of products to relate this product to
  • Save and close

By default relations are one-way relations, but you can use the arrows-icon to create a two-way relation when appropriate.

To further control/specify how the relation should be used, use the funnel-icon to setup filters on a relation (Figure 14.3). 

Figure 14.3 Further control of product relations

Using the Options tab (Figure 15.1) you can:

Figure 15.1 Custom or predefined publication periods

The Price Matrix is a flexible and powerful way of creating differentiated product prices according to various criteria, in a format similar to classic ERP systems.

Click the Prices button in the ribbon bar to open the price matrix view (Figure 16.1).

Figure 16.1 The price matrix for a product

The price matrix consists of a number of rows, each with associated criteria and a price:

  • If the criteria for a row are fulfilled, the price will be used by the system.
  • If more than one price row has fulfilled criteria, the lowest price will be used.

The columns in the price matrix can be customized by right-clicking a column and selecting or deselecting individual columns.

To create a new price row:

  • Press Click here to add a new row on the price matrix
  • Specify the following basic information:
    • A price 
    • currency
    • Price without vat/Price with VAT
  • Define the criteria for triggering the price (Figure 17.1)
Figure 17.1 Creating a row in the price matrix

The following criteria are available:

Criterion

Used to

Comments

Variant

Limit price to all variants or any variant

 

User

Limit price to a single user

 

User group

Limit price to a specific user group

 

Customer number

Limit price to users with a certain customer number

 

Valid from

-

 

Valid to

-

 

Campaign

Limit price to a specific campaign

 

Unit

Limit price to a particular unit

 

Stock location

Limit price to a partcular stock location

 

Language

Limit price to a specific language

 

Country

Limit price to a specific country

 

Shop

Limit price to a specific shop

 

Quantity

Only apply price if more than X products are bought

 

The Is Informative checkbox is used to exclude this price from the Prices loop. This is usually done if this is a before-price displayed during a campaign.

Informative prices

A price marked as informative is excluded from the prices loop – this makes it possible to add e.g. retail prices or previous prices to a product (and show them in the frontend with Ecom:Product.InformativePrice.* and Ecom:Product.InformativePrice.IsInformative), without ever applying them  (or temporarily make prices informative to show e.g. pre-sale prices).

Stock may physically be located in more than one location, and this may impact many things, e.g. shipping fees, delivery times, local availability, etc.

In Dynamicweb, you can create stock locations and use the stock matrix on products (Figure 18.1) to help you manage stock levels across locations and display the relevant information to your customers.

Figure 18.1 The stock button opens the stock matrix

When creating a new row in the stock matrix you can:

  • Specify a stock location
  • Specify a unit type, a variant, and an amount of this unit type you have in stock
  • Specify the weight and volume of the unit type – this is important if you use weight and volume to calculate shipping fees.
  • Provide a description (e.g. 5 pieces or 6 bottles for a stock unit called 'box')

You can limit the stock locations available here at the shop level. If a product belongs to more than one shop, the stock locations selected for both shops will be available. In frontend stock location can be set via the url parameter stocklocation and a stock location ID.

Stock locations can be created from Settings > Ecommerce > Product Catalog > Stock location - read more here.

Stock locations and localization

You can only create new stock locations when your default language is selected in the toolbar. Once a stock location has been created, you can create language-specific version of it by changing the language and saving the stock location in the new language. If you don’t, no stock location label will be rendered in the frontend for that language. Read more about localization in Dynamicweb.

With the VAT Groups matrix tool you can assign country-specific VAT groups to a product in order to account for differences in how a product is classified by countries.

To use the tool, click the VAT Groups button in the ribbon bar - this opens the interface used to add the product to VAT groups (Figure 19.1).

Figure 19.1 The VAT Group matrix

Add a new VAT group to the product:

  • Click New VAT Group
  • Select a VAT group and a country and click OK
  • Click Save or Save and close

You can also click an existing row to edit it – and delete it from the edit interface.

The Marketing tab (Figure 20.1) gives you access to the marketing feature called Personalization.

Figure 20.1 The Marketing tab
database

These are the database tables associated with Products and related features in Dynamicweb.

EcomProducts

Contains product data from Ecommerce. Identity is defined as a combination of ProductID, ProductVariantID and ProductLanguageID.

Field name Data type Length
ProductId nvarchar 30
ProductLanguageId nvarchar 50
ProductVariantId nvarchar 255
ProductDefaultShopId nvarchar 255
ProductNumber nvarchar 255
ProductName nvarchar 255
ProductShortDescription nvarchar Max
ProductLongDescription nvarchar Max
ProductImageSmall nvarchar 255
ProductImageMedium nvarchar 255
ProductImageLarge nvarchar 255
ProductLink1 nvarchar 255
ProductLink2 nvarchar 255
ProductPrice float 8
ProductStock float 8
ProductStockGroupId nvarchar 50
ProductWeight float 8
ProductVolume float 8
ProductVatGrpId nvarchar 50
ProductManufacturerId nvarchar 50
ProductActive bit 1
ProductPeriodId nvarchar 50
ProductCreated datetime 8
ProductUpdated datetime 8
ProductCustomFieldsXml nvarchar Max
ProductType int 4
ProductPriceType int 4
ProductPriceCounter int 4
ProductVariantCounter int 4
ProductVariantProdCounter int 4
ProductVariantGroupCounter int 4
ProductRelatedCounter int 4
ProductUnitCounter int 4
ProductDefaultUnitId nvarchar 50
ProductDefaultVariantComboId nvarchar 255
ProductPriceMatrixUnit int 4
ProductPriceMatrixVariant int 4
ProductPriceMatrixPeriod int 4
ProductPriceMatrixMultiplePrices int 4
ProductPriceMatrixQuantitySpecification nvarchar 255
ProductMetaTitle nvarchar 255
ProductMetaKeywords nvarchar Max
ProductMetaDescription nvarchar Max
ProductMetaUrl nvarchar Max
ProductCategoryFieldValues nvarchar Max
ProductOptimizedFor nvarchar 255
ProductCommentcount int 4
ProductRating float 8
ProductCost float 8
ProductAutoId bigint 8
ProductMetaCanonical nvarchar 255
ProductExcludeFromIndex bit 1
ProductExcludeFromCustomizedUrls bit 1
ProductExcludeFromAllProducts bit 1
ItemCode nvarchar 255
TaxCode nvarchar 512
ProductPoints float 8
ProductHidden bit 1
ProductShowInProductList bit 1
ProductApprovalState int 4
ProductWorkflowStateId int 4
ProductEAN nvarchar 255
ProductWidth float 8
ProductHeight float 8
ProductDepth float 8
ProductNeverOutOfStock bit 1
ProductPurchaseMinimumQuantity float 8
ProductPurchaseQuantityStep float 8
ProductExpectedDelivery datetime 8
ProductDiscontinued bit 1
ProductReplacementProductId nvarchar 30
ProductReplacementVariantId nvarchar 255
ProductDiscontinuedAction int 4

EcomDetails

Contains data from the Ecom product details tab. Linked to product via DetailProductID, DetailVariantID, and DetailLanguageId.

Field name Data type Length
DetailId nvarchar 255
DetailProductId nvarchar 30
DetailVariantId nvarchar 255
DetailLanguageId nvarchar 50
DetailType smallint 2
DetailValue nvarchar Max
DetailSortOrder int 4
DetailAutoId int 4
DetailIsDefault bit 1
DetailsGroupId int 4
DetailsName nvarchar 255
DetailsKeywords nvarchar Max

EcomPrices

Contains price matrix data for products as defined in prices section of backend product details. Product is identified by combining PriceProductId, PriceProductVariantID and PriceProductLanguageID.

Field name Data type Length
PriceId nvarchar 255
PriceProductId nvarchar 30
PriceProductVariantId nvarchar 255
PriceProductLanguageId nvarchar 50
PriceCurrency nvarchar 3
PriceQuantity int 4
PriceAmount float 8
PriceUnitId nvarchar 50
PricePeriodId nvarchar 50
PriceCustomerGroupId nvarchar 255
PricePriority int 4
PriceUserCustomerNumber nvarchar 255
PriceCountry nchar 2
PriceShopId nvarchar 255
PriceValidFrom datetime 8
PriceValidTo datetime 8
PriceUserId nvarchar 255
PriceUserGroupId nvarchar 255
PriceAutoId int 4
PriceIsInformative bit 1
PriceStockLocationID bigint 8
PriceIsWithVat bit 1
PriceExternalId nvarchar 250

EcomPeriods

Contains publication periods for products as defined in backend product details.

Field name Data type Length
PeriodId nvarchar 50
PeriodName nvarchar 255
PeriodStartDate datetime 8
PeriodEndDate datetime 8
PeriodAlways bit 1
PeriodActive bit 1
PeriodShowProductsAfterExpiration bit 1
PeriodAutoId int 4
PeriodHidden bit 1

EcomProductItems

Links items (ProductItemId) with products (ProductItemProductId).

Field name Data type Length
ProductItemId nvarchar 50
ProductItemProductId nvarchar 30
ProductItemBomProductId nvarchar 30
ProductItemBomGroupId nvarchar 255
ProductItemQuantity float 8
ProductItemName nvarchar 255
ProductItemRequired bit 1
ProductItemDefaultProductId nvarchar 30
ProductItemBomNoProductText nvarchar 255
ProductItemSortOrder int 4
ProductItemBomVariantId nvarchar 255
ProductItemAutoId int 4

EcomProductsRelated

Links products (ProductRelatedProductID) with their related products (ProductRelatedProductRelID) within a relation group (ProductRelatedGroupID).

Field name Data type Length
ProductRelatedProductId nvarchar 30
ProductRelatedProductRelId nvarchar 30
ProductRelatedGroupId nvarchar 255
ProductRelatedSortOrder int 4
ProductRelatedLimitLanguage nvarchar Max
ProductRelatedLimitCountry nvarchar Max
ProductRelatedLimitShop nvarchar Max
ProductRelatedAutoId int 4
ProductRelatedProductRelVariantID nvarchar 255
ProductRelatedLimitVariant nvarchar Max

EcomProductsRelatedGroups

Defines product relation groups as defined in Settings -> Ecom -> Product catalog -> Relation groups

Field name Data type Length
RelatedGroupId nvarchar 255
RelatedGroupName nvarchar 255
RelatedGroupLanguageId nvarchar 50
RelatedGroupSortOrder int 4
RelatedGroupAutoId int 4

EcomProductVatGroups

Contains vat groups as defined in Settings -> Ecom -> Internationalization -> Vat groups.

Field name Data type Length
ProductVatGroupID int 4
ProductVatGroupProductID nvarchar 30
ProductVatGroupProductVariantID nvarchar 255
ProductVatGroupVatGroupID nvarchar 50
ProductVatGroupCountryID nvarchar 2

These are the detabase tables associated with the Gift Cards product type:

EcomGiftCard

Contains gift card data from Settings -> Ecom -> Orders - Gift Cards.

Field name Data type Length
GiftCardAutoId bigint 8
GiftCardId nvarchar 50
GiftCardName nvarchar Max
GiftCardCode nvarchar Max
GiftCardExpiryDate datetime 8
GiftCardCurrency nvarchar 10
GiftCardVATPercent float 8

EcomGiftCardTransaction

Logs the orders (GiftCardTransactionOrderId) a gift card (GiftCardTransactionGiftCardId) is used in.

Field name Data type Length
GiftCardTransactionId bigint 8
GiftCardTransactionAmount float 8
GiftCardTransactionOrderId nvarchar 50
GiftCardTransactionGiftCardId nvarchar 50
GiftCardTransactionDate datetime 8
GiftCardTransactionOrderLineId nvarchar 50