Technology

We wanted to build a commerce solution for Sitecore where developers felt at home. We used existing Sitecore systems and tools, and strived for the same flexibility and extensibility that developers love in the Sitecore platform.

Nick Wesselman, CTO

Architecture

Active Commerce Architecture Click to enlarge

Presentation

Active Commerce provides a skinnable, fully-functional e-commerce site out of the box. This isn’t a “reference storefront” or example code -- it’s a fully supported site template that can be themed using the proprietary Active Commerce Skinning System. The Skinning System is an extension of the Sitecore layout engine that allows you to override CSS, Javascript, and even entire renderings on a site-by-site basis. The included renderings have a lot of interactive elements -- filtering, cart manipulation, checkout, etc. -- so they utilize a number of JSON Services that can be invoked from Javascript.

Looking to do something a bit more custom? No problem. You can still utilize the provided View Models and JSON Services to built your own front-end functionality, or work directly with the Domain layer.

View Model

Comprised of extendable factories and value objects, the View Model layer is responsible for obtaining data from the Domain layer and assembling it for presentation, whether that be directly on a page or as serialized JSON data.

View Model objects and factories are registered and managed via the Microsoft Unity container. This means that Active Commerce developers can register their own extensions of these classes when additional data or display logic customization is needed in the Presentation layer.

Domain

The core Active Commerce business logic is comprised of a series of services and entities for handling common e-commerce needs: product catalog, shopping cart, stock, pricing, taxes, shipping, orders, and so on.

Domain services and entities are registered and managed via the Microsoft Unity container, and injected or located as needed within each other, the View Model, or directly within the Presentation layer. This means that Active Commerce developers can register their own extensions or implementations of these services in order to customize business logic, or integrate with external systems.

Data

Active Commerce utilizes two primary data repositories. The first is Sitecore itself. “Publishable” content is modeled and managed like any other data in Sitecore. This includes product data, e-commerce pages, and e-commerce configuration. This data can be extended via the Sitecore Template Engine, approved via workflow, translated using language versions, etc. This also means that you can access product data using standard Sitecore APIs such as the Item API and Content Search API. You can even import or manipulate product data using tools such as Sitecore PowerShell Extensions. To map Sitecore item data into the Domain layer, Active Commerce utilizes the popular object-item mapper Glass Mapper.

There is other data which Active Commerce needs that does not lend itself well to the Sitecore data model. Transactional data and user-created content required by Active Commerce is stored instead in a separate SQL database that sits alongside your other Sitecore databases. This data includes orders, product stock/inventory, wish lists, and customer shopping carts. Active Commerce utilizes the open source object-relational mapper NHibernate to access this data. You can extend these entities or add your own to the Active Commerce database utilizing Fluent NHibernate.


Native to Sitecore

Native to Sitecore Click to enlarge

Active Commerce isn’t merely integrated to Sitecore -- it’s built within Sitecore, using Sitecore APIs and user interfaces, to create a commerce solution that feels familiar to content authors and developers alike. Our solution installs as a module on your Sitecore servers, and deploys as a site in your Sitecore instance (or as new pages in your existing site).

Active Commerce is not a bolt-on. It’s a truly native Sitecore e-commerce solution. There’s no separate server to install, no products to synchronize, and no connector middleware needed. That’s just one of the many ways that we simplify e-commerce for Sitecore.


Integration

Integration and Extension Click to enlarge

No e-commerce solution is an island. Product data, orders, inventory, shipping rates, and tax calculation are just a few of the common integration points in any e-commerce implementation. Active Commerce is flexible enough to meet even the most complicated integration scenarios.

Via Sitecore APIs

As a Sitecore-based solution, you already have a number of integration and extension options available to you:

  • Product data can be imported and exported using the Item API.
  • Computed fields can be used to add additional query and sorting data for use with the Content Search API.
  • Data and functionality from external and 3rd party systems can be integrated into the store front-end by adding new components via the Layout Engine.
  • Integration and other scheduled jobs can be executed via Sitecore’s built-in Scheduled Task system.

Via Inversion of Control

Active Commerce of course also exposes e-commerce APIs with their own potential integration points, such as shipping rates and tax calculation. By utilizing the Microsoft Unity Container, and exposing hooks for developers to add or override services and entities in Unity, Active Commerce business logic can be extended as needed for your integration and customization requirements.

Via Sitecore Pipelines

It wouldn’t be Sitecore without pipelines. For e-commerce processes that commonly require integration and customization, Active Commerce makes available Sitecore pipelines that can be changed and extended as needed for your implementation. Most notably, these include order processing and price calculations.

So What's Possible?

Customer and partner implementations of Active Commerce have included a wide variety of integration and extension scenarios. Examples include:

  • Batch-based order data integration via flat files, XML, and web service.
  • Real-time order data integration via web service.
  • Product data imports via the Sitecore Item API.
  • Product data imports via Sitecore PowerShell Extensions.
  • Scheduled product inventory synchronization via the Stock API.
  • Customer data imports via Sitecore Security API.
  • Custom price table import and calculation via the Active Commerce Database and Pricing Pipelines.
  • Customized shipping calculation via the Shipping API.
  • Integration with custom payment providers via the Payments API.
  • Custom “add to cart” rules via the Cart API.
  • Integration with external tax rate tables and tax calculators via the Tax API.
  • Custom ERP-based discount calculations via web service and the Promotions API.

Implementation Process

Implementation Process Click to enlarge

Implementing an e-commerce site on Sitecore doesn’t need to be hard. We’ve simplified the process by streamlining your Active Commerce implementation into four steps.

Model

Products are modeled in Active Commerce using familiar Sitecore data templates. You’ll create templates for your various product types, using base templates that Active Commerce provides for both simple products and product variants. Through some simple extensions to the Sitecore template model, you can indicate what fields should be used in specification tables, and what fields should be used as variant options.

For your website product catalog, you can configure the available filters, sorting options, and comparison fields for each product category based on the fields within your product model.

Configure

This one’s quick. Active Commerce comes out of the box with business rules and plugins that you can configure to your requirements. This step includes configuring your tax nexus, setting up shipping options, installing and configuring payment gateway plugins, and initial setup of any shopping cart promotions / discounts.

Skin

The Active Commerce Skinning System allows you to “theme” your Active Commerce site on a site-by-site basis. The out-of-the-box site provides the layout and behavior of a fully-functional e-commerce storefront, but you’ll obviously want to style this to your specific design, branding, and functional requirements. The Skinning System allows you to drop in replacement CSS, Javascript, and Renderings for those provided by the base Active Commerce skin, without having to overwrite the base skin files. You can even create “child skins” for multi-site implementations with similar styling.

Integrate

By simplifying the Sitecore integration and front-end implementation of your e-commerce project, Active Commerce allows you to focus on the integrations and extensions that add the most value. There are a number of integration options available for you to meet those requirements.