Shopping Cart

The Shopping Cart app is a paragraph app which is used to show the contents of a shopping cart in frontend, guide the user through a checkour flow, and complete an order.

More specifically the Shopping Cart app does the following:

  • Keeps a record of the items added to cart
  • Shows the items in the cart to the customer
  • Handles the checkout process
  • Shows an order receipt
  • Sends out order confirmation emails

Once the app is added to a paragraph you can configure it using the app settings. The app settings consist of sections controlling different aspects of the app behavior, as outlined below.

The first settings are used to set a shop and (optionally) an order context for the cart (Figure 1.1). You can also check checkout to quote if this is supposed to be a quotes cart.

Figure 1.1 Associating the cart app with a shop or context

If no shop is selected, orders are created under the default shop, as defined in the website Ecommerce settings.

Adding to cart

This article concerns the Shopping Cart app and how to use it - to learn how to add products to a cart see cart commands.

Next, you can define the checkout flow – the steps the customer will go through to complete an order (Figure 2.1).

Figure 2.1 The standard checkout flow

A standard checkout flow typically consists of three or four steps, e.g.:

  1. Show cart
  2. Information
  3. Checkout (required)
  4. Receipt

A one-page checkout will have a single step before checkout, a multi-step checkout will have several.

In either case, the customer is asked to supply information and select e.g. a payment and shipping method and submit these to card using a form – in order for the cart to receive this information, the input fields being submitted must have specific named, ids & values. See more in the Submitting to Cart section of this article.


The notification emails section is used to create email notifications for both customers and staff – most commonly an order confirmation email.

To create a notification click Add notification to open the Edit email window (Figure 3.1) and configure the notification.

Figure 3.1 Creating a notification email

To configure the notification you must first specify a recipient – this can be done in several ways:

  • Send to billing email or shipping email
  • Check Send to order field email to select a custom order field
  • Manually specify a recipient email – also accepts a list of email addresses separated by commas

For each notification you must also:

  • Provide a subject
  • Select/create an email template
  • Provide a sender name and sender email
  • Select an encoding (defaults to UTF-8)
  • (Optional) Select an attachment to include with the email

Tip: You can use {OrderID} in the subject to insert the order number in the confirmation email.

The field validation settings (Figure 4.1) allow you to apply validation rules during checkout.

Figure 4.1 The field validation settings

You can:

  • Toggle a check for terms and conditions
  • Toggle a check for stock status – this field is required if product reservation is enabled.
  • Select a validation group to apply during checkout

Prior to Dynamicweb 9.8, three shipping fields were auto-validated - Name, Address, and Country - but as of 9.8 and forward only Country is automatically validated. You must therefore use field validation groups - as linked to above - to set up further validation of shipping fields. 

A number of other settings ara available on the shopping cart app - these are described below.

The Newsletter section(Figure 6.1) is used to make it possible to update the email permission field for the user during checkout. The current value is available via the Ecom:Cart.UseNewsletterSubscription tag.

Figure 6.1 The newsletter settings

The Empty cart settings (Figure 7.1) control what a user will see when they view an empty cart.

Figure 7.1 The empty cart settings

You have three options:

  • Redirect to an internal page lets you select a specific page on your website to redirect users to
  • Show template allows you to select a custom template to show instead of the cart. You can then add cool stuff to the template, of course, like suggested or personalized products and news.
  • Take no special action does exactly what it says, and simply displays the first step of the order process as with a full cart. However, you can use the Ecom:Order.IsEmpty tag to test for and do stuff if a cart is empty.

The User management section (Figure 8.1) allows you to control how the cart interacts with the Users area of Dynamicweb.

Figure 8.1 The user management settings

Basically, you can do two things:

  • Apply user details to order – this setting applied user field like Name, Address, Phone, and so on to an order during checkout. You usually always want this enabled unless you’re creating orders on behalf of anonymous users.
  • Create user during checkout – this option creates users during checkout. Additional settings are available when this setting is enabled:




Groups for new users

Add the new users to these groups


Update existing users based on email match

If a user with this email exists, update the user with the checkout information details


Error messages

Specify validation error messages


If a user is logged in on two separate computers, the shopping cart content will be automatically synchronized.

Saving an address to user management

Dynamicweb supports saving an address on a logged in user on checkout. Look at the InformationSaveCart.hmtl template for example code.

The address will be saved to the addresses section of the user, if it doesn’t match an existing address.

On multi-shop solutions the payment & delivery section is used to control exactly which payment methods and shipping methods should be available on this cart (Figure 9.1).

Figure 9.1 The payment and delivery settings

To make a payment method or shipping method available for a cart, move it from the list of available methods (left column) to the list of selected methods (right column).

Leave as All if all methods should be made available, depending on the language context.

The behavior settings (Figure 10.1) control cart behavior in a variety of situations, as outlined below.

Figure 10.1 The behavior settings

You can control:

  • If the cart should show the first order step or show the last visited step for users returning to the cart after leaving the order flow. If you use validation groups on other steps than the first step, set to last visited to make sure you have access to validation loops in your templates.
  • How the cart selects which shipping and payment methods should be available – the options being billing country, shipping country, or shipping country if a shipping address has been selected.
    • Prices in the shopping cart are recalculated when the billing or shipping country is changed. VAT is recalculated when a new billing country is set, and Taxes are recalculated when a new shipping country is set.
  • If products which have become unavailable should be removed or ignored

In the checkout flow, the user is typically asked to provide information – e.g. and address – and make some selections and then submit the cart to become an order.

The cart can handle the following:

  • Billing details
  • Delivery details
  • Creating a user during checkout
  • Selecting a payment method
  • Selecting a shipping method
  • Applying vouchers
  • Paying with loyalty points
  • Using a gift card
  • Creating a recurring order
  • Paying with a saved card
  • Opt-ins
  • Custom fields

To submit something to cart you submit a form with the id ordersubmit and the features you want to implement:

<form name="ordersubmit" id="ordersubmit" method="post" role="form"> <!--Insert form content here--> <button type="submit" name='@GetValue("CartV2.CurrentStepButtonName")' id='@GetValue("CartV2.CurrentStepButtonName")'>@Translate("Update_order", "Update order")</button> <button type="submit" name='@GetValue("CartV2.NextStepButtonName")' id='@GetValue("CartV2.NextStepButtonName")'>@Translate("Create_order", "Create order")</button> </form>

In order for the cart to receive this information the input fields being submitted must have specific IDs, names & values. You can read more about each feature below.

Billing details are submitted using input fields with IDs listed below. Most of these can be matched with a specific user field, but a few are for billing-specific information like an EAN number or a VAT number. There’s also a comment field.

Field name & id





























This field controls which payment methods & shipping methods can be selected on the cart.


















Maps to the customer comment order details field.

<!--Billing Address Fields--> <div> <!--Personal Fields--> <div> <input class="form-control" type="text" name="EcomOrderCustomerName" id="EcomOrderCustomerName" value='@GetValue("Ecom:Order.Customer.Name")' /> <input class="form-control" type="text" name="EcomOrderCustomerPrefix" id="EcomOrderCustomerPrefix" value='@GetValue("Ecom:Order.Customer.Prefix")' /> <input class="form-control" type="text" name="EcomOrderCustomerTitle" id="Title" value='@GetValue("Ecom:Order.Customer.Title")' /> <input class="form-control" type="text" name="EcomOrderCustomerFirstName" id="EcomOrderCustomerFirstName" value='@GetValue("Ecom:Order.Customer.FirstName")' /> <input class="form-control" type="text" name="EcomOrderCustomerMiddleName" id="EcomOrderCustomerMiddleName" value='@GetValue("Ecom:Order.Customer.MiddleName")' /> <input class="form-control" type="text" name="EcomOrderCustomerSurname" id="EcomOrderCustomerSurname" value='@GetValue("Ecom:Order.Customer.Surname")' /> <input class="form-control" type="text" name="EcomOrderCustomerEmail" id="EcomOrderCustomerEmail" value='@GetValue("Ecom:Order.Customer.Email")' /> </div> <!--Address Fields--> <div> <input class="form-control" type="text" name="EcomOrderCustomerAddress" id="EcomOrderCustomerAddress" value='@GetValue("Ecom:Order.Customer.Address")' /> <input class="form-control" type="text" name="EcomOrderCustomerAddress2" id="EcomOrderCustomerAddress2" value='@GetValue("Ecom:Order.Customer.Address2")' /> <input class="form-control" type="text" name="EcomOrderCustomerHouseNumber" id="EcomOrderCustomerHouseNumber" value='@GetValue("Ecom:Order.Customer.HouseNumber")' /> <input class="form-control" type="text" name="EcomOrderCustomerZip" id="EcomOrderCustomerZip" value='@GetValue("Ecom:Order.Customer.Zip")' /> <input class="form-control" type="text" name="EcomOrderCustomerCity" id="EcomOrderCustomerCity" value='@GetValue("Ecom:Order.Customer.City")' /> <input class="form-control" type="text" name="EcomOrderCustomerRegion" id="EcomOrderCustomerRegion" value='@GetValue("Ecom:Order.Customer.Region")' /> <select class="form-control" name="EcomOrderCustomerCountry" id="EcomOrderCustomerCountry" onchange="updateCart();"> @foreach (var country in GetLoop("Countries")) { if (country.GetString("Ecom:Country.IsCustomerCountryOrDefault") == "true") { <option value='@country.GetValue("Ecom:Country.Code2")' selected>@country.GetValue("Ecom:Country.Name")</option> } else { <option value='@country.GetValue("Ecom:Country.Code2")'>@country.GetValue("Ecom:Country.Name")</option> } } </select> </div> <!-- Contact Fields--> <div> <h4>Contact</h4> <input type="text" name="EcomOrderCustomerPhone" id="EcomOrderCustomerPhone" value='@GetValue("Ecom:Order.Customer.Phone")' /> <input type="text" name="EcomOrderCustomerFax" id="EcomOrderCustomerFax" value='@GetValue("Ecom:Order.Customer.Fax")' /> <input type="text" name="EcomOrderCustomerCell" id="EcomOrderCustomerCell" value='@GetValue("Ecom:Order.Customer.Cell")' /> <input type="text" name="EcomOrderCustomerComment" id="EcomOrderCustomerComment" value='@GetValue("Ecom:Order.Customer.Comment")' /> </div> <!--Other fields--> <div> <input type="text" name="EcomOrderCustomerCompany" id="EcomOrderCustomerCompany" value='@GetValue("Ecom:Order.Customer.Company")' /> <input type="text" name="EcomOrderCustomerEAN" id="EcomOrderCustomerEAN" value='@GetValue("Ecom:Order.Customer.EAN")' /> <input type="text" name="EcomOrderCustomerVatRegNumber" id="EcomOrderCustomerVatRegNumber" value='@GetValue("Ecom:Order.Customer.VatRegNumber")' /> <input type="text" name="EcomOrderCustomerRefId" id="EcomOrderCustomerRefId" value='@GetValue("Ecom:Order.Customer.RefID")' /> <input type="text" name="EcomOrderCustomerInitials" id="EcomOrderCustomerInitials" value='@GetValue("Ecom:Order.Customer.Initials")' /> </div> </div>

Delivery details are submitted to cart in the same way as billing details – and are in fact almost identical to billing details.

The 'Copy customer info to delivery info fields if empty'-checkbox under Settings > Ecommerce > Advanced Configuration > Shopping cart allows you to copy billing address field values to the delivery address fields if no part of the delivery address has been filled out.

Field name & id








































<!--Delivery Address Fields--> <div> <!--Personal Fields--> <div> <input type="text" name="EcomOrderDeliveryName" id="Name" value='' /> <input type="text" name="EcomOrderDeliveryPrefix" id="Prefix" value='' /> <input type="text" name="EcomOrderDeliveryTitle" id="Title" value='' /> <input type="text" name="EcomOrderDeliveryFirstName" id="EcomOrderDeliveryFirstName" value='' /> <input type="text" name="EcomOrderDeliveryMiddleName" id="EcomOrderDeliveryMiddleName" value='' /> <input type="text" name="EcomOrderDeliverySurname" id="EcomOrderDeliverySurname" value='' /> <input type="text" name="EcomOrderDeliveryEmail" id="EcomOrderDeliveryEmail" value='' /> </div> <!--Address Fields--> <div> <input type="text" name="EcomOrderDeliveryAddress" id="EcomOrderDeliveryAddress" value='' /> <input type="text" name="EcomOrderDeliveryAddress2" id="EcomOrderDeliveryAddress2" value='' /> <input type="text" name="EcomOrderDeliveryHouseNumber" id="EcomOrderDeliveryHouseNumber" value='' /> <input type="text" name="EcomOrderDeliveryZip" id="EcomOrderDeliveryZip" value='' /> <input type="text" name="EcomOrderDeliveryCity" id="EcomOrderDeliveryCity" value='' /> <input type="text" name="EcomOrderDeliveryRegion" id="EcomOrderDeliveryRegion" value='' /> <select name="EcomOrderDeliveryCountry" id="EcomOrderDeliveryCountry" onchange="updateCart();"> <option>Select delivery country</option> @foreach (var country in GetLoop("Countries")) { if (country.GetString("Ecom:Country.IsDeliveryCountry") == "true") { <option value='@country.GetValue("Ecom:Country.Code2")' selected>@country.GetValue("Ecom:Country.Name")</option> } else { <option value='@country.GetValue("Ecom:Country.Code2")'>@country.GetValue("Ecom:Country.Name")</option> } } </select> </div> <!-- Phone Fields--> <div> <input type="text" name="EcomOrderDeliveryPhone" id="EcomOrderDeliveryPhone" value='' /> <input type="text" name="EcomOrderDeliveryFax" id="EcomOrderDeliveryFax" value='' /> <input type="text" name="EcomOrderDeliveryCell" id="EcomOrderDeliveryCell" value='' /> </div> <!--Other fields--> <div> <input type="text" name="EcomOrderDeliveryCompany" id="EcomOrderDeliveryCompany" value='' /> <input type="text" name="EcomOrderDeliveryInitials" id="EcomOrderDeliveryInitials" value='' /> </div> </div>

To create a user or update an existing user during checkout, submit a field with the name and ID EcomUserCreateNewOrUpdate alongside fields specifying a user name and a password.

Field name & Id



Older implementations used EcomUserCreateNew







<!--Create user during checkout--> @{ var isLoggedIn = Dynamicweb.Security.UserManagement.User.IsExtranetUserLoggedIn(); } @if (!isLoggedIn) //If user is not logged in { <input type="checkbox" name="EcomUserCreateNewOrUpdate" id="EcomUserCreateNewOrUpdate" checked='@GetBoolean("Ecom:User.CreateNew")' /> <input type="text" name="EcomUserCreateUserName" id="EcomUserCreateUserName" /> <input type="password" name="EcomUserCreatePassword" id="EcomUserCreatePassword" /> <input type="password" name="EcomUserCreateConfirmPassword" id="EcomUserCreateConfirmPassword" /> }

Payment methods are submitted to cart using input elements with the name EcomCartPaymethodID and an id of the type EcomCartPaymethodID_{PaymentMethodID}, with PaymentMethodID replaced by a valid id.

Field Name & ID




Some payment methods support inline payment in which case the payment form can be rendered directly in the cart template. The contents of the payment form is payment method-specific and typically comes from a template on the payment method.

<!--Payment Methods--> @foreach (var paymentmethod in GetLoop("Paymethods")) //Loop through payment methods { <div class="radio"> <label > @if (@paymentmethod.GetString("Ecom:Cart.Paymethod.IsSelected") == "true") // check if payment method is selected { <input type="radio" name="EcomCartPaymethodID" id='EcomCartPaymethodID_@paymentmethod.GetValue("Ecom:Cart.Paymethod.ID")' value='@paymentmethod.GetValue("Ecom:Cart.Paymethod.ID")' checked='checked' /> } else { <input type="radio" name="EcomCartPaymethodID" id='EcomCartPaymethodID_@paymentmethod.GetValue("Ecom:Cart.Paymethod.ID")' value='@paymentmethod.GetValue("Ecom:Cart.Paymethod.ID")' /> } @paymentmethod.GetValue("Ecom:Cart.Paymethod.Name") </label> </div> } <!--Inline Payment Forms--> @if (!string.IsNullOrWhiteSpace(GetString("Ecom:Cart.PaymentInlineForm"))) { @GetString("Ecom:Cart.PaymentInlineForm") }

Shipping methods are submitted to cart using input elements with the name EcomCartShippingMethodId and an id of the type EcomCartShippingMethodId_{ShippingMethodID} with ShippingMethodID being replaced by a valid id.

Field Name & ID






Some shipping providers can provide you with more content – e.g. a list of parcel shops or parcel types – which must also be submitted to cart. This information is shipping method specific, and typically comes from a template set on the shipping method.

<!--Shipping methods--> @foreach (var shippingmethod in GetLoop("Shippingmethods")) { <div class="radio"> <label> @if (shippingmethod.GetString("Ecom:Cart.Shippingmethod.IsSelected") == "true") { <input type="radio" name="EcomCartShippingmethodID" onclick="updateCart();" id='EcomCartShippingmethodID_@shippingmethod.GetValue("Ecom:Cart.Shippingmethod.ID")' value='@shippingmethod.GetValue("Ecom:Cart.Shippingmethod.ID")' checked="checked" /> } else { <input type="radio" name="EcomCartShippingmethodID" onclick="updateCart();" id='EcomCartShippingmethodID_@shippingmethod.GetValue("Ecom:Cart.Shippingmethod.ID")' value='@shippingmethod.GetValue("Ecom:Cart.Shippingmethod.ID")' /> } @shippingmethod.GetValue("Ecom:Cart.Shippingmethod.Name") </label> </div> <!--Shippingmethod Content - e.g. Parcel shops or Parcel types--> if (!string.IsNullOrWhiteSpace(shippingmethod.GetString("Ecom:ShippingProvider.Content"))) { @shippingmethod.GetString("Ecom:ShippingProvider.Content") } }

Vouchers are applied to an order by submitting a valid voucher code in a field with the ID EcomOrderCustomerVoucher.

Field Name & ID




<!--Vouchers--> <input type="text" name="EcomOrderCustomerVoucher" id="EcomOrderCustomerVoucher" value='@GetString("Ecom:Order.Customer.VoucherCode")' />

To apply loyalty points to an order you submit a field with the ID EcomOrderPointsToUse and a value in loyalty points

Field Name & ID




In this example I first check of the current user is logged in – if she is, I retrieve her points balance and check if she can pay with points.

@{ var isLoggedIn = Dynamicweb.Security.UserManagement.User.IsExtranetUserLoggedIn(); var currentUser = Dynamicweb.Security.UserManagement.User.GetCurrentExtranetUser(); double pointsbalance = 0; } <!--Pay with points--> @if (isLoggedIn) { pointsbalance = Dynamicweb.Ecommerce.Services.Loyalty.GetPointsBalance(currentUser.ID); <div>Your points: @pointsbalance</div> @if (pointsbalance > 0) { <input class="form-control" type="text" name="EcomOrderPointsToUse" id="EcomOrderPointsToUse" value='@GetValue("Ecom:Order.PointsToUse")' /> } else { <input class="form-control" type="text" name="EcomOrderPointsToUse" id="EcomOrderPointsToUse" value='' disabled title="No loyalty points available" /> } } else { <div><i>Sign in to see your loyalty points balance.</i></div> }

Gift Cards are applied to an order by submitting a valid gift card code to a field with the ID EcomOrderGiftCardCode.

Field Name & ID




<input type="text" name="EcomOrderGiftCardCode" id="EcomOrderGiftCardCode" value="" />

To create a recurring order you must first check of the payment method supports recurring orders. If it does, you must submit a boolean field with the id & name EcomRecurringOrderCreate alongside an interval, an interval unit, and a start and end date.

Field Name & ID










0 = days
1 = weeks
2 = months

















@if (@GetBoolean("Ecom:Order.PaymentMethod.RecurringSupport") == true) { <!--Checkbox to create recurring orders--> <input type="checkbox" name="EcomRecurringOrderCreate" id="EcomRecurringOrderCreate" checked='@GetBoolean("Ecom:User.CreateNew")' /> <!--Interval--> <input type="text" name="EcomOrderRecurringInterval" id="EcomOrderRecurringInterval" value='1' /> <select name="EcomOrderRecurringIntervalUnit" id="EcomOrderRecurringIntervalUnit" value="0"> <option value="0">Days</option> <option value="1" selected>Weeks</option> <option value="2">Months</option> </select> <!--Start Date--> <input type="date" name="EcomOrderRecurringStartDate" id="EcomOrderRecurringStartDate" min="@DateTime.Today.ToString("yyyy-MM-dd")" value='@DateTime.Today.ToString("yyyy-MM-dd")' /> <!--End Date--> <input type="date" name="EcomOrderRecurringEndDate" id="EcomOrderRecurringEndDate" min="@DateTime.Today.AddDays(7).ToString("yyyy-MM-dd")" value='@DateTime.Today.AddDays(7).ToString("yyyy-MM-dd")' /> }

Saved cards – which are actually saved payment methods – are saved by submitting a boolean field with the id EcomOrderSavedCardCreate_{PaymethodID} alongside a field specifying the name of the saved card. You should ensure that the payment method supports saved cards - at the time of writing this is:

To use a saved card you submit a field with the ID EcomCartSavedCardID_{SavedCardId}, with SavedCardId being the id of a saved card. Make sure you clear any previously selected payment method when a saved card is submitted.

Field Name & ID



Paymethod – not PaymentMethod







<!--Saving a card --> @foreach (var paymentmethod in GetLoop("Paymethods")) //Loop through payment methods { if (paymentmethod.GetString("Ecom:Cart.Paymethod.SupportSavedCard") == "true" && @paymentmethod.GetString("Ecom:Cart.Paymethod.IsSelected") == "true") // Check if this method supports saved cards & is selected { <input type="checkbox" name="EcomOrderSavedCardCreate" id="EcomOrderSavedCardCreate_@paymentmethod.GetString("Ecom:Cart.Paymethod.ID")" value="true" /> <input type="text" name="EcomOrderSavedCardName" id="MySavedCardName" value='My @paymentmethod.GetValue("Ecom:Cart.Paymethod.Name") Card' /> } } <!-- Using a card --> @{ var savedcards = GetLoop("SavedCards"); } @if (savedcards.Any()) //Checks if this user has any saved cards { foreach (var savedcard in savedcards) { <div class="radio"> <label> @if (@savedcard.GetString("Ecom:SavedCard.IsSelected") == "true") //Checks if the saved card is selected { <input type="radio" name="EcomCartSavedCardID" id="EcomCartSavedCardID_@savedcard.GetString("Ecom:SavedCard.ID")" value="@savedcard.GetString("Ecom:SavedCard.ID")" checked="checked" /> } else { <input type="radio" name="EcomCartSavedCardID" id="EcomCartSavedCardID_@savedcard.GetString("Ecom:SavedCard.ID")" value="@savedcard.GetString("Ecom:SavedCard.ID")" /> } @savedcard.GetString("Ecom:SavedCard.Name") </label> </div> } }

Please note that it’s usually a good idea to let customers see and edit/remove the cards they have saved – like most self-service operations, this is done via the Customer Center.

From the cart you can change the value of the Email permission field on the logged in user, and the user can be asked to accept the Terms & Conditions.

Field Name & Id






In your template, you can check if the shopping cart has Use email subscription checked in the cart settings:

@if (GetString("Ecom:Cart.UseNewsletterSubscription") == "True") { <div> <input type="checkbox" name="EcomOrderSubscribeToNewsletter" id="EcomOrderSubscribeToNewsletter" checked='@GetBoolean("Ecom:Order.Customer.NewsletterSubscribe")' /> <label for="EcomOrderSubscribeToNewsletter">Subscribe to newsletter</label> </div> } else { <div>This cart does not have the 'Use email subscription' field checked in the app settings</div> }

Custom fields – such as order fields or a coupon field– are posted to the cart using input elements which take the system name as the field name. No ID is necessary.

<div> <label for="Coupons">Coupon</label> <input type="text" name="Coupons" value='' /> </div> <div> <label for="TrackingURLFromERP">TrackingURLFromERP</label> <input type="text" name="TrackingURLFromERP" value='' /> </div>

Finally, a small set of order fields are used on integrated solutions. Although they can also be submitted from frontend, this is not a typical use-case.

Field Name & ID










From Settings > Ecommerce > Advanced configuration > Shopping Cart you have access to a number of advanced configuration options for the Shopping Cart app.

Read about the settings in this article.


These are the database tables relevant for the Shopping Cart app and related functionality. 


Contains settings for providers in Settings -> Ecom -> Orders -> Address Validation.

Field name Data type Length
AddressValidatorSettingId int 4
AddressValidatorName nvarchar 255
AddressValidatorActive bit 1
AddressValidatorProviderSettings nvarchar Max
AddressValidatorUserGroupIds nvarchar Max


Contains validation groups as defined in Settings -> Ecommerce -> Orders -> Validation groups.

Field name Data type Length
ValidationGroupId nvarchar 50
ValidationGroupName nvarchar 255
ValidationGroupAutoId int 4
ValidationGroupDoNotValidateIfAllFieldsAreEmpty bit 1


Contains translations (EcomValidationGroupsTranslationValidationGroupLanguageID) of validation groups (EcomValidationGroupsTranslationValidationGroupID).

Field name Data type Length
EcomValidationGroupsTranslationValidationGroupID nvarchar 50
EcomValidationGroupsTranslationValidationGroupLanguageID nvarchar 50
EcomValidationGroupsTranslationValidationGroupName nvarchar 255


Contains field definitions (ValidationFieldName) for validation rules and keeps track of which validation groups it belongs to (ValidationGroupId).

Field name Data type Length
ValidationId nvarchar 50
ValidationGroupId nvarchar 50
ValidationFieldName nvarchar 255
ValidationUseAndOperator bit 1
ValidationFieldType nvarchar 255
ValidationAutoId int 4


Contains validation rule definitions (ValidationRuleId) and keeps track of which fields (ValidationRuleValidationId) belong to a rule.

Field name Data type Length
ValidationRuleId nvarchar 50
ValidationRuleValidationId nvarchar 50
ValidationRuleType nvarchar 255
ValidationRuleParameters nvarchar Max
ValidationRuleAutoId int 4


Registers products (SavedForLaterProductId, SavedForLaterVariantId, SavedForlaterLangugageId) marked as Saved for Later during a session (SavedForLaterSessionId).

Field name Data type Length
SavedForLaterId int 4
SavedForLaterProductId nvarchar 30
SavedForLaterVariantId nvarchar 255
SavedForLaterLanguageId nvarchar 50
SavedForLaterSessionId int 4
SavedForLaterDateAdded datetime 8


Field name Data type Length
OrderContextId nvarchar 50
OrderContextName nvarchar 255
OrderContextAutoId int 4


Field name Data type Length
OrderContextAccessUserAccessUserId int 4
OrderContextAccessUserOrderContextId nvarchar 50
OrderContextAccessUserOrderId nvarchar 50
OrderContextAccessUserRelationAutoId int 4


Field name Data type Length
OrderContextShopRelationContextId nvarchar 50
OrderContextShopRelationShopId nvarchar 50
OrderContextShopRelationAutoId int 4