Product Bundling with Commerce Server 2007

What is a Product Bundle?

A product bundle is a purchasable SKU that is made up of a collection of one or more SKU's that exist in the catalog system and is separately priced.

Two examples of a product bundle:

In the high tech and telecommunication/cable industry business users want the ability to group together a set of products and sell it as one product.

Phone Service Example: 1500 Anytime Plan – 59.99 per month

  • 1500 minutes per month
  • Caller ID
  • 3-Way Conferencing
  • 1 MB of Data Service

In the retail industry business users may want to group furniture.

Furniture Set Example: Max's 8-pc Dining Set - 500.00

  • Table
  • 6 Chairs
  • Server

Product Bundle Solutions

There are two ways to define product bundling. One using relationship and another using Discounts.

Using Relationships Solution Design Time

During design time do the following.

  1. Use the Catalog and Inventory Schema Manager to create product definition called “Product_Bundle” and associate relevant properties to it.
  2. Next create a product using the “Product_Bundle” definition e.g. Local_Unlimited_Package.
  3. Give the bundle a price e.g. “Local_Unlimited_Package” costs $27 
    you can use variants if you have different pricing based on zipcode
  4. From the product Edit page create a Relationship called BundleConstituent for example and add additional products (eg. 1500 minutes per month, Caller ID, 3-Way Conferencing and 1 MB of Data Service).

Using Relationships Solution Runtime

  1. From the site code identify the product definition BundleConstituent and display the product appropriately.

  2. When the product is added to cart make sure to add subline items. You do this based on your fulfillment rules. When the product is sent to your backend system to be shipped will they understand what a BundleConstituent is? If so then you don't need to have subline items just add the item into the basket and you are done. If not you need to send each bundled product so they understand what to ship. This business rule should be a custom pipeline component but you can have it in your site code.

  3. The custom pipeline component iterates through all line items and checks to see if the item is a product bundle (I.E. - searches the product definition for string containing “bundle”). If so, it makes another query to get all the “Related” bundle constituents (retrieve all products that are related to this product through a relationship name that contains “bundle”.

  4. To prevent the intentional or accidental removal of any one bundle constituent, the site code would display the bundle constituents in the basket by generating a row for each bundle constituent but it would not create a line item for each bundle constituent. So the basket would still have only 1 line item – the bundle sku with information about the bundle constituents. If the bundle sku is removed, then all of the constituents get removed from the display. This code would be part of the site code.

  5. The site code or custom pipeline component ensures that only the bundle price is displayed towards the basket subtotal the prices of the bundle constituents are not accounted for in the basket subtotal.

  6. The Update Inventory pipeline can therefore get the inventory decrement for the bundle constituents. By the time the checkout completes, the order has the complete list of items sold, appearing as individual line items. This order can now be sent to Fulfillment back-end systems.

Note: the Bundle sku inventory has to be manually created upfront to have the inventory of the minimum of all bundle constituents (to prevent a situation where the bundle cannot be sold because one of the constituents is out of stock). The inventory of the bundle sku should also be updated every time a constituent is sold so that the inventory never goes out of sync.

Marketing Discounts: On a bundle, the individual sku's lose their identity and the discounts that would be applicable on individual sku's, need to be disallowed. By ensuring that the bundle constituents are not individual line items, the discounts for the individual bundle constituents do not get applied (as desired). The only discounts that get applied are the ones on the bundle sku.

Using Discounts Solution Design Time

  1. Create a product called Local_Unlimited_Package.

  2. Give the bundle a price e.g. “Local_Unlimited_Package” costs $27 (pricing may vary based on zip code and so variants could be created for this purpose)

  3. Create a Discount “Buy product Local_Unlimited_Package and get the following free: e. list of items that are free

    • CallerID
    • 3-way-conf

Using Discounts Solution Runtime

  1. The runtime discount filtering feature (CS2007 only) will determine the simple discounts that apply to the products on the page and will display the names of the award items. However, the details of each award item will not be available (custom site code would need to make a call to the QCI component to fetch the products mentioned in the award items list.
  2. The shopper would have to add each item of the bundle in the basket manually. Alternatively, a custom pipeline component could add all the bundle constituents automatically.
  3. The basket pipeline (actually the discount sub-pipeline) ensures that only the bundle price is charged in the overall basket total; the individual prices of the bundle constituents are negated by the discount that applies.
  4. Shoppers can add more of the bundle constituents and there is no problem because the discount pipeline would apply discounts appropriately (additional items would be full price).
  5. The basket pipeline, when called, calls the discount sub-pipeline but it cannot ensure that the award constituents are always present. If the awards are removed from the basket, then the awards can be lost. Intentional or accidental removal of any one bundle constituent cannot be prevented.

Summary

This post is credited to Mark Townsend and Ankur Agarwal previous Catalog PMs.