Freigeben über


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.

Comments

  • Anonymous
    November 01, 2006
    Great example.  We actually took a different tact and added it to the inventory properties because we might need to vary the bundle depending on the variant chosen.

  • Anonymous
    November 02, 2006
    Can you send a note of what you did I would like to publish it and make sure you get credit for it :). -Max

  • Anonymous
    December 13, 2006
    Hi, I am very new to CS and only have a couple of days with CS2007. Would it be possible to how to model the Bundle with Relationships using the API code??

  • Anonymous
    December 13, 2006
    See the following links for creating relationships using API: How to Create a Product Relationship http://msdn.microsoft.com/library/en-us/CS07Default/html/85dd62db-641e-4dae-9e5d-78ebf61d03a9.asp Good luck, -Max

  • Anonymous
    March 08, 2007
    The comment has been removed

  • Anonymous
    March 14, 2007
    There are a couple of ways to do this: One way is to extend the lineitem object to hold a dictionary of lineitems these items would be your sub items for the bundle. Another way is to extend the lineitems to have a marker that defines the lineitem. So for example you would have a property called LineItemType {Normal, Bundle}. This marker is used to display items to the users in the purchase process (basket page, Order Confirmation and Order History). I am sure that there are other ways to deal with this, this is what I came up just now:). And yes, you would need to create a custom pipeline to handle adding the bundled lineitems. -Max

  • Anonymous
    March 29, 2007
    Hello, We are looking to set up scale-based pricing (based on quantity or value) for or products for our new e-commerce site. Please let me know how to accommodate the following scenario: Product A Quantity 0-250 $9.99 250-500 $12.99 500-100 $19.99

  • Anonymous
    March 29, 2007
    Hello, I could  not find any other post where I could post this question. We are looking to set up scale-based pricing (based on quantity or value) for or products for our new e-commerce site. Please let me know how to accommodate the following scenario: Product A Quantity 0-250 $9.99 250-500 $12.99 500-100 $19.99

  • Anonymous
    March 29, 2007
    I just saw your post on the forum and answered it there. -Max

  • Anonymous
    April 08, 2007
    The comment has been removed

  • Anonymous
    April 17, 2007
    Here are my answers to your questions:

  1. Yes you can choose only to use specific Systems of Commerce Server 2007, but you still have to pay full license :(.
  2. You can do override the Commerce Catalog Price using the APIs or use a Virtual Catalog. You can also use Discounts to create custom prices but you won't know the real price until the discounts apply. Or you can create your own custom table and use the SetJoin API.
  3. This is going to take longer to answer so I will keep it short on purpose :). Create a Commerce Site then use only the Systems you need. For your custom catalog, create a custom resource. You will need to integrate the Marketing by applying your custom catalogs properties so you can create discounts on them. Good luck, -Max
  • Anonymous
    October 14, 2007
    Is it possible to set discounts to the each product, and get twice discount? The scenario is: Montly discount = 10 % and Product A is there. But just have a discount for Product A , dicount = 10 %. Result: Product A have 10% + 10% means 20 % of the discount. Is it possible? If yes, how I have to do in a design time?

  • Anonymous
    October 30, 2007
    you can create two different discounts and then use the discount interaction to set this up. -Max

  • Anonymous
    April 16, 2008
    Is it possible to implement discounts without using Pipelines? Actually we have not used any pipelines till now in our website. We have used all the features of commerce server like, Profile, Catalog, Order, using exposed API's and no pipelines.

  • Anonymous
    April 23, 2008
    For discounts no you can't. In order for Commerce Server to identify a product is to get a discount it needs to run pipelines :(. -Max

  • Anonymous
    August 27, 2008
    Hi Max, I'm setting up a commerce server, I have got a simple discount type working on normal catalog items but I cannot get a paired discount type to work on products with variants. When you set up the discount it seems I can only select the product (without specifying the variant), which is fine as I want the discount to apply to all variants, but running the discount pipeline does not seem to pick up the product when it has a variant. Do you have any suggestions? Thanks

  • Anonymous
    September 02, 2008
    Set an expression that should do the job. -Max