Products
A 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.
Creating products
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).
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).
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.
Editing products
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).
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).
Product Types
Dynamicweb operates with four types of product:
- A stock item is usually a physical product (which you can, in theory, run out of, i.e. it has a limited stock)
- A 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
- A parts list consists of several products and/or product groups, e.g. a computer with defined/selectable parts
- A 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.
Stock item
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.
Service
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.
Parts Lists
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:
- A 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
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
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.
Gift Cards
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.
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).
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.
Localizing products
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.
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)
Product Toolbar
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
Discounts
The discounts dropdown (Figure 12.1) is used to include or exclude a product from 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).
Related Groups
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.
Related Products
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).
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).
Publication Periods
Using the Options tab (Figure 15.1) you can:
- Set a publication period for a product using the start and end date selectors
- Add the product to a predefined, named publication period
The Price Matrix
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).
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
- A currency
- Price without vat/Price with VAT
- Define the criteria for triggering the price (Figure 17.1)
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).
The Stock Matrix
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.
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.
VAT Groups Matrix
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).
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.
Marketing tools
The Marketing tab (Figure 20.1) gives you access to the marketing feature called Personalization.
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 |
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 |