cecilia@nansen.se
Jul 13, 2011
visibility 10891
star star star star star
(6 votes)

An example using Business Foundation in EPiServer Commerce

The current EPiServer Commerce project I am working on has a requirement to allow logged-in customers to register products they have purchased, including those not purchased via the e-commerce site. They should then be able to see all of their registered products on their account page.

I decided to use the Business Foundation (BF) technology in EPiServer Commerce. You do this by creating a ‘Business Object’ in Commerce Admin, which you can read more about here.

My business object is called RegisteredProduct and contains two properties: CatalogEntryId and ContactId:


businessobject

The CatalogEntryId will hold the id of the product being registered (note that the product has to be in the e-commerce site catalog even if purchased elsewhere) and the ContactId holds the id of the logged-in customer registering the product.

In the code-behind for the ‘Register Products’ page, I have a method to create an instance of a RegisteredProduct BF object using the BusinessManager class. The properties are set from the values collected in the form and then the object is saved, again using the BusinessManager class:

 private void SaveRegisteredProduct()
 {
    var customerContact = CustomerContext.Current.CurrentContact;
    if (customerContact == null)
       return;

     // Creates an instance of your Business Object
     var registeredProduct = BusinessManager.InitializeEntity("RegisteredProduct");

     // Set values to properties in your Business Object
     registeredProduct.Properties["ContactId"].Value = 
          customerContact.PrimaryKeyId;
     registeredProduct.Properties["RegisteredProduct"].Value = 
          DropDownListProductModel.SelectedItem.Text;
     registeredProduct.Properties["CatalogEntryId"].Value = 
          int.Parse(DropDownListProductModel.SelectedValue);

     BusinessManager.Create(registeredProduct);
 }

To present a logged-in customer registered products, the BusinessManager’s List method is used. The method takes the name of the BF object type to query, the property to query on and a value to match against, in this case the logged-in customer’s id. Then for each RegisteredProduct object returned, the product can be read from the commerce catalog using the CatalogEntryId property as the key:

 private void ShowRegisteredProducts()
 {
     var customer = CustomerContext.Current.CurrentContact;
     if (customer == null)
         return;

     var registeredProducts = BusinessManager.List
        ("RegisteredProduct", new[] { FilterElement.EqualElement
        ("ContactId", customer.PrimaryKeyId) }).ToList();

     var entries = registeredProducts.Select
     (registeredProduct => CatalogContext.Current.GetCatalogEntry
     ((int) registeredProduct.Properties["CatalogEntryId"].Value)).ToList();

      RepeaterRegisteredProducts.DataSource = entries;
      RepeaterRegisteredProducts.DataBind();
 }

As I am new to EPiServer Commerce I don’t know if this is the best way to solve the problem. If anyone has an alternative solution then I welcome any feedback you have.

Jul 13, 2011

Comments

Sep 22, 2011 05:01 PM

This really helped me a lot, I got stuck on some specified cast exception stuff when creating the item, but now it works like a charm.
Many thanks!

/Fredrik von Werder

osbe
osbe Sep 29, 2011 11:23 AM

This is very useful and an excellent way of using Business Foundation, thanks for sharing this Cecilia!

error Please login to comment.
Latest blogs
Finding Thomas Part 5 - The Closed Loop

Five weeks. Five layers. One Thomas. If you've followed this series from the start — thank you. If you're just landing here, the short version:...

Ritu Madan | Jul 20, 2026

Extending the Optimizely Product Recommendations Feed to Include Custom Product Types

A practical way to extend the Optimizely Product Recommendations catalog feed so the export scheduled job also includes custom catalog types, like...

Wojciech Seweryn | Jul 20, 2026 |

Parallel Development in Optimizely CMS SaaS: A Smarter Way to Push Content Models

When Optimizely shipped the JavaScript SDK and CLI for CMS SaaS, they gave developers something pretty cool — a code-first workflow for content...

Vipin Banka | Jul 20, 2026

Fixing index_not_found_exception After Purging External Data in Optimizely Graph

The Scenario: Indexing External Data When working with Optimizely Content Graph, indexing external data is a straightforward process. Synchronize...

Akash Borkar | Jul 16, 2026