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.
- Use the Catalog and Inventory Schema Manager to create product definition called “Product_Bundle” and associate relevant properties to it.
- Next create a product using the “Product_Bundle” definition e.g. Local_Unlimited_Package.
- Give the bundle a price e.g. “Local_Unlimited_Package” costs $27
you can use variants if you have different pricing based on zipcode - 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
From the site code identify the product definition BundleConstituent and display the product appropriately.
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.
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”.
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.
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.
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
Create a product called Local_Unlimited_Package.
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)
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
- 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.
- 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.
- 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.
- 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).
- 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 :). -MaxAnonymous
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, -MaxAnonymous
March 08, 2007
The comment has been removedAnonymous
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. -MaxAnonymous
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.99Anonymous
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.99Anonymous
March 29, 2007
I just saw your post on the forum and answered it there. -MaxAnonymous
April 08, 2007
The comment has been removedAnonymous
April 17, 2007
Here are my answers to your questions:
- Yes you can choose only to use specific Systems of Commerce Server 2007, but you still have to pay full license :(.
- 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.
- 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. -MaxAnonymous
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 :(. -MaxAnonymous
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? ThanksAnonymous
September 02, 2008
Set an expression that should do the job. -Max