The latest release information about the Sitecore E-Commerce Services.
We welcome your feedback. On the forum pages, we have set up 2 forums:
- Sitecore E-Commerce. The main forum.
- Sitecore E-Commerce suggestions for submitting suggestions for new features and improvements.
1. Release History
Some of the issues described on this page contain internal reference numbers listed in parentheses. You can use these reference numbers to communicate with Sitecore about a particular issue or feature.
January 15, 2013
Sitecore E-Commerce Services 2.0.0 rev. 130111 is released.
Change log
New Features
Improved Multi-shop support
- Out-of-the-box support for hosting multiple separate product repositories with Lucene based indexes without having to do coding, only configuration. For more details, see section 4.7 of the SES Developer Cookbook.
- Simplified configuration with one main Unity.Config file containing generic configuration and one optional Unity include-file per shop with only shop specific business components configured. Similar concept to CMS web.config include files, just without the patching syntax. For more details see chapter 2 of the SES Developer Cookbook.
- It’s possible to use shared or individual databases per webshop for storing orders and/or action log entries. It’s configurable. For more information see section 4.7 in the SES Developer Cookbook
Scalability
- It’s now possible to run SES 2 on Azure, with the following caveats:
- No limitations for CD instances. So CD instances on Azure and CM on premises will work.
- Running CMs on Azure is working but with limitations. When running CM instances on Azure, it cannot be guaranteed that unique order IDs are generated with the default implementation. This is because there is no direct transactional support in CMS and Azure and it becomes a race condition to retrieve a unique order ID. Without custom business logic, creating orders will sometimes create a scenario where the same order ID is assigned to multiple orders for different customers.
- The Order Manager app is supported on Azure.
- DMS is not yet supported on Azure and therefore cannot be used with SES. SES doesn’t require DMS and it’s possible to create solutions without it.
- Current release of WebForms is not supported on Azure and therefore cannot be used with SES. SES doesn’t require Webforms but it’s used with example pages. It’s possible to create solutions without it.
- SES 2.0 have been updated to support out-of-state session state providers that will enable it to run in load balanced environments with distributed CD and CM instances, which includes Azure.
Order Manager Application
- Ability to work with multiple Webshops in the same application and switch between webshops to work with orders belonging to different webshops. Access to shops is controlled by standard Sitecore security. Access needs to be granted or the user will not have access to any shop, for more information see section 2.3 Web Store Selector of the Order Manager Cookbook and Setting up the Controls on the Dashboard in the Order Manager Developer Cookbook
Order Management API improvements
- A minor refactoring of the COM, VOM, and MOM implementations to ensure that calculating order totals now is a separate service in the COM API. This is a new way of performing order calculations. Calculations are now done whenever changes to an order are saved to the data model. No values are calculated on the fly. By separating and sharing the order total calculations on top of the data model, the functions can be called when you customize the order confirmation print and order management application and this ensures consistent calculations.
- Method ApplyCalculations are now called from the VOM and MOM order managers instead of being executed in COM and the result is stored in data model. COM is now pure CRUD operations.
Developer reference implementation and documentation
- A new project called MvpWebStore has been created and posted on the Sitecore Marketplace. It’s a Sitecore package that can be installed on a clean CMS with SES 2.0 core on top. It’s intended as documentation by providing a reference implementation that documents how to quickly get started on implementing a webshop with SES 2.0. It’s a work in progress and Sitecore developers are welcome to contribute to it from the Marketplace.
- It is a WebForms based project that demonstrates the latest improvements of Sitecore E-Commerce Services version 2.0, especially in improved configuration and multi-shop support.
- The MvpWebStore project is based on the WebFormsMvp framework. Therefore, you can use the MvpWebStore through the SES API with minimal configuration requirements.
- Developers can easily perform unit tests with MvpWebStore because it contains all the tests with the source codes.
- Developers can use this project to:
- Access the Unity container without invoking the Sitecore.Ecommerce.Context.Entity.Resolve method.
- Configure custom dependencies in the webshop Unity container. This includes custom search indexes and the custom price manager.
- Access the SES API and read the list of product categories, products in the categories and product details.
- A new document Order Manager Developer Cookbook has been created to explain how to customize and extend the implementation of the default Order Manager Application.
Issues Resolved
- Sitecore.Ecommerce.Prices.DefaultPriceCalculator.Calculate method returned a wrong type. Now it returns Sitecore.Ecommerce.Prices.Totals where before it returned Sitecore.Ecommerce.DomainModel.Prices.Totals (371696).
- CustomerManager.UpdateCustomerProfile method did not update the Billing and Shipping data (375429)
- Fixed concurrency problem: Custom Unity thread safe extension was implemented to check registrations. (374926, 373548)
Miscellaneous
- Improved implementation of Stock that improves performance. Stock implementation now uses ReaderWriterLock instead of Lock. Reading is more common than writing so using ReaderWriterLock improves performance (378578)
- Both Merchant Order Management (MOM) and Visitor Order Management (VOM) APIs have been improved to allow LINQ constructs without the use of expressions as parameters.
Shopping Cart
- You can now create a custom implementation of the Totals business entity that is used by the shopping cart.
Order Manager Application
- Incorrect sub-total and tax total as well as tax for each order line on generated order confirmation and prints has been fixed. (365063)
- State (disabled/enabled) of actions for order lines is not updated immediately after changing order state. Refreshing the page fixed the problem. This has been fixed and updates the order automatically (370198)
- Charge/discounts editing permission isn’t updated immediately according to order state. It was required to refresh page for updating. This has been fixed. (370199)
- Quantity field for order line isn’t disabled if it is not possibility to edit it. Trying to save changes will result in an exception though prohibiting changes. This has been fixed. (370196)
- ReadOnly mode is not enforced immediately after changing state to Closed or Cancelled (366015). Refreshing the page will show order correctly in read-only mode. Trying to make illegal changes to the order while not read-only is prohibited by the system. This has been fixed.
- Order confirmation may not be sent to user in correct language. This has been fixed. (357057).
- A JavaScript error occur after adding new order line to an order. This has been fixed. (369221).
- Entered search criteria might disappear after initiating search on order list page. This has been fixed. (369200)
- Back button doesn't work after adding a new order line (369207). Workaround is to use breadcrumb to get to Dashboard / Home page. This has been fixed.
- Hardcoded labels were removed from confirmation report. This has been fixed. (371798).
- A concurrent user could receive proper email notifications. This has been fixed. (375332).
August 2, 2012
Sitecore E-Commerce Services 2.0 rev.120720 (Technical Preview) is released.
Change log
New Features
- A complete new implementation of orders that includes:
- An Order Manager application for managing orders using a completely new UI designed for business users. Order Manager is a standalone order management application that comes as part of Sitecore E-Commerce Services 2.0.0.
- New service layers (APIs) for managing orders. Three separate APIs are available for:
- Core Order Management (COM). Basic CRUD operations without imposing business logic.
- Visitor Order Management (VOM). A service layer to be used when accessing orders from the front-end Webshop. This service layer has restricted access and contains business logic associated with accessing orders from a Webshop.
- Merchant Order Management (MOM). A service layer to be used when accessing orders from a backend application. This service layer contains business logic associated with managing orders.
- Orders are stored in a separate non-CMS database due to the data model complexity and performance considerations.
- The implementation includes logging user transactions as well as payment provider transactions.
Some benefits of using Order Manager:- Single UI for managing all customer orders.
- Orders are displayed as lists rather than in a tree structure.
- Capable of handling large numbers of orders.
- Easy to integrate with other 3rd part ERP applications.
- Own login screen outside the Sitecore Desktop.
- Flexible and fully customizable UI.
- Clean and consistent UI design.
- Searching and filtering capabilities.
- Stimulsoft Report Engine is used to generate order confirmation and order prints.
- Easy to extend order header and order line information.
- The data model used in the new implementation is based on Universal Business Language (UBL), which is an XML based standard developed by the Organization for the Advancement of Structured Information Standards (OASIS). In Order Manager, UBL provides the standard business terms and field names used in the UI. For example, in the Order Details page, all field names originate from this model. The UBL model provides all the standard field names for all pages and other UI elements and makes it possible for developers to extend the standard UI options available. The visible fields in the Order Manager application represents only the most commonly used subset of the data model If required, you can significantly extend the standard fields available in the Order Details page.
- The previous order implementation is still supported although deprecated and will eventually be obsolete and removed.
Issues Resolved
- Performance
- Performance problems with product lookups. If URL doesn't adhere to Display Products Mode or URL resolves to empty string, search for product tries to find product code. Workaround is to comment out the ProductResolver processor (369942).
- Checkout
- The order confirmation email has a bit different styling than shown on the order confirmation page that is displayed at the end of the checkout process on the sample pages (329136).
The order confirmation mail now has a PDF version of the order attached, generated by Stimulsoft Report Engine. This is the same order format used everywhere in the new order manager application.
- The order confirmation email has a bit different styling than shown on the order confirmation page that is displayed at the end of the checkout process on the sample pages (329136).
- Distributed installation
- Prices are not recalculated after changing the Display currency value in the Webshop Business Settings in Sitecore content (336240).
- Some product information is not updated on CD server after publishing from CM server (354481).
- Normal price is shown on Confirmation page on example pages in the case of distributed installation (336534).
- DMS
- In DMS 2.0 using the Web Forms for Marketers module, if you select the Analytics tag on any form fields, visitor data entered into E-commerce form fields does not appear on the Visit Detail (Session) report as it should.
- Page Editor/Preview mode
- Page Editor displays incorrect floating toolbar (354765).
- Security
- Incorrect URL and exception when open order detailed info from order history page in print mode (349390).
2. Known issues
The known issues present in various versions of the Sitecore E-Commerce Services.
This section describes the known issues associated with SES 2.0 rev.130111.
- Memory leak in the VisitorShopResolvingProcessor processor. The Sitecore.Ecommerce.Pipelines.HttpRequest.CreateRequestContainer processor creates a child unity container and place it to a Sitecore context by the "SES_REQUEST_CONTAINER" key. Processor - Sitecore.Ecommerce.Visitor.Pipelines.HttpRequest.VisitorShopResolvingProcessor replace the created child container by a new one and doesn't dispose it. The replaced child container registered in a singleton object is never collected by the garbage collector. Moreover, the registered ShopContext objects can have indirect references to layouts and sublayouts through PageContext objects, which sometimes can cause memory leaks. (403995)
The issue has been fixed in SES 2.2. It is recommended to upgrade to SES 2.2 version. - It is impossible to perform general workflow actions with orders stored in Content using the Content Editor. (380504)
- If you are installing SES 2.0 rev 2.0.0 130111 you need to install the example package to get the default states configuration for the Order Manager application.
- If the ”content” database attribute is not set on the Site definition in web.config, there’s a part of the Pricemanager that fails (391296).
Workaround:
Add the ContentDatabase attribute to the site setting in web.config.
Scalability:
- Running SES 2.0 CM instances in Azure will not work by default, because transaction support is missing when writing to master database. This is the case with generating an order id, which by default is read and incremented as a value in CMS master database.
- A long eventQueue.processingInterval setting in web.config might cause a problem with loading orders from a selected webshop when an instance is in Azure. (378585)
Workaround:
Do not increase the default value of the processingInterval setting in web.config.<eventQueue>
<processingInterval>00:00:02</processingInterval>
</eventQueue>
Catalog:
- Custom sorting and grouping is disabled in the product catalog and the old order catalog when searching and reviewing products and orders. (338268)
- Sometimes after the browser window is resized the Product Catalog and the old Order Catalog, the search forms are not resized appropriately. (329868)
Scenario:- Open the Content Editor in a non-maximized mode.
- Locate a Product Search Group item in the sample pages (e.g. /sitecore/content/E-Commerce Examples/Home/Digital SLR/Cameras).
- Drag the border of the Content Editor window to make it bigger
- The Component Art components within the two boxes do not resize along with the Content Editor border.
- Select the current item once more in the tree structure to reload the item. After the reload the Component Art components are resized to fit the boxes.
- Product catalog displays java script error after saving in IE8. (336261)
Checkout:
- System doesn't recalculate Shipping method price after changing the Display Currency value. (332173)
- А product cannot be bought when the mail server is not set up. (371432)
Shopping Cart:
- The system does not recalculate the Shipping method price after changing the Display Currency value in Webshop Business Settings. (332173)
- Item Cloning doesn't work well with Lucene based product indexes that are used as default indexes in SES. Lucene creates duplicate index entries for cloned products. As a result, ShoppingCartManager.AddProduct may throw NullReferenceException as stock on cloned products is updated. (376466)
Workarounds:- The following workaround is only needed for versions before 2.0.0 rev.130111:
- Apply the code change to the default ProductRepositoryItem.GetItem: so it returns a non-null object (the changed code is highlighted in bold): this.Get(query, typeof(T)).FirstOrDefault( o => o != null);
This solves the problem in the way that the ProductRepository implementation returns a null object causing exceptions, by discarding null objects.
- Apply the code change to the default ProductRepositoryItem.GetItem: so it returns a non-null object (the changed code is highlighted in bold): this.Get(query, typeof(T)).FirstOrDefault( o => o != null);
- Add the Product Code field ID from the product template to the web.config setting ItemCloning.NonInheritedFields before cloning. If it is ok for the customer to keep separate stock values for the cloned repositories.
- Replace the FastQuerySearchProvider with the SitecoreQuerySearchProvider if the product code doesn't contain text. It will only match when the code is given exactly the same casing. If a null object is returned or Lucene is busy re-indexing, a secondary search provider will be used. Since the default FastQuerySearchProvider doesn't work with Item Cloning, the SitecoreQuerySearchProvider can be used.
- Change Product Code field value of the cloned product in order for the value to appear in SharedFields table.
- The following workaround is only needed for versions before 2.0.0 rev.130111:
Site Settings:
- The SES Core package doesn’t include the ”general” item in the Site Settings, which is required for the default Pricemanager to work (391299).
Workaround:
Manually add the General item from the template as a subitem of the Site Settings item. - The Display Currency in Webshop Business Settings is not applied until the application is restarted. (336240, 336243)
Example pages:
- System displays the "The layout for the requested document was not found" after selecting product from Two/Three/Four column layout. (330964)
- The checkout confirmation page labels are shifted if the state is empty. (330700)
- Exception may occur after logout on Order Confirmation page. (367016)
- Example pages: System displays "We experienced a technical difficulty..." on Change Password form after entering the invalid old password. (345256)
- Example pages: The ZIP code field only accepts 4 digits even though the ZIP code can contain more than 4 digits during check out and customer address entry. (345102)
- 70 text entries are not localized in example pages: "Empty Cart", "Update Cart", "Continue Shopping", "List Price", "Total price excl. VAT", "Total price incl. VAT", "Proceed to checkout", "Shopping Cart", "The shopping cart is empty", "1 item in Shopping Cart", "Edit Shopping Cart" etc.
- The data from the Code/Name field are displayed for some items instead of the corresponding version of the Title value. (338365, 338422 and 338423)
- An exception is thrown on the Order Details (Examples) pages after the Shipping method is changed to non-existent. (368644)
- If you open the Product Details page from an order line for a product that was added in the Order Manager application, an exception is thrown. (376399)
Page Editor/Preview mode:
- The system doesn't let you buy a product in the Preview mode. (335656)
- The design functionality in the Page Editor (adding new renderings to page placeholders) is not working correctly. (372921)
Payment provider:
- Amazon: Reservable type returns error if on "select Payment method" (on Amazon payment page) step you select "Pay with Amazon Payments Balance" method and confirm. (345143).
- Capturing an order does not work for PayPal. (376034).
- Absence of the "accept-charset="UTF-8" parameter in the request may cause issues on the DIBS payment provider end (392669).
Order Manager:
- It is not possible to use the new Order Manager application with SES configured to use old order storage where orders are stored in Content.
- Removing an order line does not remove the actual order line data from the database, it only removes the reference between an order and an order line. (350660)
- Changing sub-state combinations in the Webshop Business Settings throws an exception for orders that are already in that state and sub-state. (356243)
- Some texts in the generated Order confirmation PDF are truncated if they are too long. (357063)
- If a user enters a non-numeric value in the Amount field for discounts or charges there is no user-friendly validation error message. (360504)
- It is impossible to create an order if the display currency is set to a currency where the code contains more than 3 letters, for example, Euro. The Order model expects the currency to use the ISO 3-letter standard. The currency code is used for both orders and payment providers. Some payment providers incorrectly expect the currency code to be four letters like Euro instead of the correct ISO 3-letter standard where Euro is represented as EUR. (364774)
- If you try to capture more money than the reserved amount, a warning message is displayed only after refreshing the page. (365219)
- The Order Confirmation can contain unnecessary <p> tags in the product description. (376402)
- Some page controls aren't refreshed in IE on a slow client computer. (379487)
Workaround:
Press F5 to see changes. - The smart panel with the Order line info isn’t closed if the user tries to add/change the product after searching for the product. (379961)
SPEAK:
- Duplicated orders may be displayed in the table after filtering by multiple criteria at the same time. For example if the user filters orders by one criteria and then checks another filter while the grid is the rows in the order grid may be duplicated. (369217)
- Accordion groups can expand beyond the expected width when they have been collapsed and the priority 1 fields contain too much text. (369191).
- Duplicated rows can be displayed in the table if you rapidly click on several different rows in the same grid. For example, if the user tries to open the smart panel with the Order Line information and clicks on the other Order Line rows while the smart panel is opening the order lines rows can be duplicated. (369217)
- It is impossible to change the order of the filter columns from the UI. (380151)
- It’s impossible to see and select the pre-defined filter options that are not selected if more than 3 filters are defined. (380098)
- SPEAK doesn’t support "classic" mode in IIS. (360632)
- User has access to Sitecore desktop after log out from SPEAK. (378956)
- On slow machines with a heavy load the client UI seems unresponsive and some of the controls may not be updated correctly. (379488)
- The item name is used as an expression value instead of the "Value" field on Expression groups. (380028)
- The SPEAK home page is opened with default local language labels instead of the configured user language. If the user navigates away from this page, all the following pages are localized correctly. (379057)
- The "Yes" and "No" buttons in SPEAK dialog boxes are not localizable. (378968)
3. Configuration File Changes
This section describes the config file changes between SES releases.
3.1. Config file changes in SES 2.0.0 rev.130111
The config file changes in SES 2.0.0 rev. 130111 as compared to SES 1.2.0 rev. 111101.
Unity.config changes:
-
Add the following aliases to the <configuration><unity> section:
<alias alias="User" type="Sitecore.Security.Accounts.User, Sitecore.Kernel" />
<alias alias="PipelineWrapper" type="Sitecore.Pipelines.PipelineWrapper, Sitecore.Ecommerce.Kernel" />
<alias alias="StringDictionary" type="Sitecore.Collections.StringDictionary, Sitecore.Kernel" />
<alias alias="SiteInfo" type="Sitecore.Web.SiteInfo, Sitecore.Kernel" />
<alias alias="SiteContext" type="Sitecore.Sites.SiteContext, Sitecore.Kernel" />
<alias alias="SiteContextFactoryWrapper" type="Sitecore.Sites.SiteContextFactoryWrapper, Sitecore.Ecommerce.Kernel" />
<alias alias="ContextUser" type="Sitecore.Ecommerce.Security.Accounts.ContextUser, Sitecore.Ecommerce.Kernel" />
<alias alias="ShopContext" type="Sitecore.Ecommerce.ShopContext, Sitecore.Ecommerce.Core" />
<alias alias="PaymentProviderFactory" type="Sitecore.Ecommerce.DomainModel.Payments.PaymentProviderFactory, Sitecore.Ecommerce.DomainModel" />
<alias alias="DefaultPaymentProviderFactory" type="Sitecore.Ecommerce.Payments.DefaultPaymentProviderFactory, Sitecore.Ecommerce.Kernel" />
<alias alias="DtoConvertor" type="Sitecore.Ecommerce.Data.Convertors.Convertor`1, Sitecore.Ecommerce.Kernel" />
<alias alias="OrderDtoConvertor" type="Sitecore.Ecommerce.Data.Convertors.OrderConvertor, Sitecore.Ecommerce.Kernel" />
<alias alias="ShoppingCartDtoConvertor" type="Sitecore.Ecommerce.Data.Convertors.ShoppingCartConvertor, Sitecore.Ecommerce.Kernel" />
<alias alias="Repository" type="Sitecore.Ecommerce.Data.Repository`1, Sitecore.Ecommerce.Core" />
<alias alias="StrictCurrencyConverter" type="Sitecore.Ecommerce.Currencies.StrictCurrencyConverter, Sitecore.Ecommerce.Kernel" />
<alias alias="CustomerMembership" type="Sitecore.Ecommerce.Security.CustomerMembership, Sitecore.Ecommerce.Kernel" />
<alias alias="PriceCalculatorFactory" type="Sitecore.Ecommerce.DomainModel.Prices.PriceCalculatorFactory, Sitecore.Ecommerce.DomainModel" />
<alias alias="PriceCalculatorFactoryImpl" type="Sitecore.Ecommerce.Prices.PriceCalculatorFactoryImpl, Sitecore.Ecommerce.Kernel" />
<!-- ORDER MANAGEMENT -->
<alias alias="CoreOrder" type="Sitecore.Ecommerce.OrderManagement.Orders.Order, Sitecore.Ecommerce.Core" />
<alias alias="CoreOrderStateConfiguration" type="Sitecore.Ecommerce.OrderManagement.CoreOrderStateConfiguration, Sitecore.Ecommerce.Core" />
<alias alias="IOrderCalculationStrategy" type="Sitecore.Ecommerce.OrderManagement.IOrderCalculationStrategy, Sitecore.Ecommerce.Core" />
<alias alias="DefaultOrderCalculationStrategy" type="Sitecore.Ecommerce.OrderManagement.DefaultOrderCalculationStrategy, Sitecore.Ecommerce.Core" />
<alias alias="OrderIDGenerator" type="Sitecore.Ecommerce.OrderManagement.OrderIDGenerator, Sitecore.Ecommerce.Kernel" />
<alias alias="ItemBasedOrderIDGenerator" type="Sitecore.Ecommerce.OrderManagement.ItemBasedOrderIDGenerator, Sitecore.Ecommerce.Kernel" />
<alias alias="RemoteOrderIDGenerator" type="Sitecore.Ecommerce.ServiceModel.Orders.RemoteOrderIDGenerator, Sitecore.Ecommerce.ServiceModel" />
<alias alias="OrderIDGenerationStrategy" type="Sitecore.Ecommerce.OrderManagement.OrderIDGenerationStrategy, Sitecore.Ecommerce.Kernel" />
<alias alias="NumericOrderIDGenerationStrategy" type="Sitecore.Ecommerce.OrderManagement.NumericOrderIDGenerationStrategy, Sitecore.Ecommerce.Kernel" />
<alias alias="EfOrderRepository" type="Sitecore.Ecommerce.Data.OrderManagement.EfOrderRepository, Sitecore.Ecommerce.Data" />
<alias alias="OrderProcessor" type="Sitecore.Ecommerce.OrderManagement.OrderProcessor, Sitecore.Ecommerce.Core" />
<alias alias="MerchantOrderSecurity" type="Sitecore.Ecommerce.Merchant.OrderManagement.MerchantOrderSecurity, Sitecore.Ecommerce.Merchant" />
<alias alias="VisitorOrderSecurity" type="Sitecore.Ecommerce.Visitor.OrderManagement.VisitorOrderSecurity, Sitecore.Ecommerce.Visitor" />
<alias alias="MerchantOrderManager" type="Sitecore.Ecommerce.Merchant.OrderManagement.MerchantOrderManager, Sitecore.Ecommerce.Merchant" />
<alias alias="MerchantOrderStateConfiguration" type="Sitecore.Ecommerce.Merchant.OrderManagement.MerchantOrderStateConfiguration, Sitecore.Ecommerce.Merchant" />
<alias alias="MerchantOrderProcessor" type="Sitecore.Ecommerce.Merchant.OrderManagement.MerchantOrderProcessor, Sitecore.Ecommerce.Merchant" />
<alias alias="ProcessingStrategy" type="Sitecore.Ecommerce.OrderManagement.ProcessingStrategy, Sitecore.Ecommerce.Core" />
<alias alias="VisitorOrderManager" type="Sitecore.Ecommerce.OrderManagement.VisitorOrderManager, Sitecore.Ecommerce.Core" />
<alias alias="DefaultVisitorOrderManager" type="Sitecore.Ecommerce.Visitor.OrderManagement.DefaultVisitorOrderManager, Sitecore.Ecommerce.Visitor" />
<alias alias="RemoteVisitorOrderManager" type="Sitecore.Ecommerce.ServiceModel.Orders.RemoteVisitorOrderManager, Sitecore.Ecommerce.ServiceModel" />
<alias alias="VisitorOrderProcessorBase" type="Sitecore.Ecommerce.OrderManagement.VisitorOrderProcessorBase, Sitecore.Ecommerce.Core" />
<alias alias="RemoteOrderProcessor" type="Sitecore.Ecommerce.ServiceModel.Orders.RemoteOrderProcessor, Sitecore.Ecommerce.ServiceModel" />
<alias alias="VisitorOrderProcessor" type="Sitecore.Ecommerce.Visitor.OrderManagement.VisitorOrderProcessor, Sitecore.Ecommerce.Visitor" />
<alias alias="VisitorOrderCancelationStrategy" type="Sitecore.Ecommerce.Visitor.OrderManagement.VisitorOrderCancelationStrategy, Sitecore.Ecommerce.Visitor" />
<alias alias="TransientOrderManager" type="Sitecore.Ecommerce.Visitor.OrderManagement.Transient.TransientOrderManager, Sitecore.Ecommerce.Visitor" />
<alias alias="TransientOrderConverter" type="Sitecore.Ecommerce.Visitor.OrderManagement.Transient.TransientOrderConverter, Sitecore.Ecommerce.Visitor" />
<alias alias="OrderLineFactory" type="Sitecore.Ecommerce.OrderManagement.OrderLineFactory, Sitecore.Ecommerce.Core" />
<alias alias="OrderLineFactoryImpl" type="Sitecore.Ecommerce.Merchant.OrderManagement.OrderLineFactoryImpl, Sitecore.Ecommerce.Merchant" />
<alias alias="OrderProcessingStrategy" type="Sitecore.Ecommerce.OrderManagement.OrderProcessingStrategy, Sitecore.Ecommerce.Core" />
<alias alias="OrderProcessingStrategyResolver" type="Sitecore.Ecommerce.Merchant.OrderManagement.OrderProcessingStrategyResolver, Sitecore.Ecommerce.Merchant" />
<alias alias="OrderProcessingStrategyResolverImpl" type="Sitecore.Ecommerce.Merchant.OrderManagement.OrderProcessingStrategyResolverImpl, Sitecore.Ecommerce.Merchant" />
<alias alias="AddNewOrderLineProcessingStrategy" type="Sitecore.Ecommerce.Merchant.OrderManagement.AddNewOrderLineProcessingStrategy, Sitecore.Ecommerce.Merchant" />
<alias alias="EditOrderLineProcessingStrategy" type="Sitecore.Ecommerce.Merchant.OrderManagement.EditOrderLineProcessingStrategy, Sitecore.Ecommerce.Merchant" />
<alias alias="RemoveOrderLineProcessingStrategy" type="Sitecore.Ecommerce.Merchant.OrderManagement.RemoveOrderLineProcessingStrategy, Sitecore.Ecommerce.Merchant" />
<alias alias="ChangeOrderLineQuantityProcessingStrategy" type="Sitecore.Ecommerce.Merchant.OrderManagement.ChangeOrderLineQuantityProcessingStrategy, Sitecore.Ecommerce.Merchant" />
<alias alias="OrderStateProcessingStrategy" type="Sitecore.Ecommerce.Merchant.OrderManagement.OrderStateProcessingStrategy, Sitecore.Ecommerce.Merchant" />
<alias alias="CancelReservationProcessingStrategy" type="Sitecore.Ecommerce.Merchant.OrderManagement.CancelReservationProcessingStrategy, Sitecore.Ecommerce.Merchant" />
<alias alias="CaptureOrderProcessingStrategy" type="Sitecore.Ecommerce.Merchant.OrderManagement.CaptureOrderProcessingStrategy, Sitecore.Ecommerce.Merchant" />
<alias alias="PackOrderProcessingStrategy" type="Sitecore.Ecommerce.Merchant.OrderManagement.PackOrderProcessingStrategy, Sitecore.Ecommerce.Merchant" />
<alias alias="ShipOrderProcessingStrategy" type="Sitecore.Ecommerce.Merchant.OrderManagement.ShipOrderProcessingStrategy, Sitecore.Ecommerce.Merchant" />
<alias alias="MerchantOrderCancellationStrategy" type="Sitecore.Ecommerce.Merchant.OrderManagement.MerchantOrderCancellationStrategy, Sitecore.Ecommerce.Merchant" />
<alias alias="CancelOrderProcessingStrategy" type="Sitecore.Ecommerce.Visitor.OrderManagement.CancelOrderProcessingStrategy, Sitecore.Ecommerce.Visitor" />
<alias alias="ConfirmationMessageBuilder" type="Sitecore.Ecommerce.OrderManagement.ConfirmationMessageBuilder, Sitecore.Ecommerce.Core" />
<alias alias="StiReportConfirmationBuilder" type="Sitecore.Ecommerce.Report.StiReportConfirmationBuilder, Sitecore.Ecommerce.Kernel" />
<!-- LOGGING -->
<alias alias="Logger" type="Sitecore.Ecommerce.Logging.Logger, Sitecore.Ecommerce.Core" />
<alias alias="LoggingProvider" type="Sitecore.Ecommerce.Logging.LoggingProvider, Sitecore.Ecommerce.Core" />
<alias alias="EfLoggingProvider" type="Sitecore.Ecommerce.Data.Logging.EfLoggingProvider, Sitecore.Ecommerce.Data" />
<alias alias="LoggingHandler" type="Sitecore.Ecommerce.Logging.LoggingHandler, Sitecore.Ecommerce.Core" />
<!-- MAILING -->
<alias alias="MailService" type="Sitecore.Ecommerce.Mail.MailService, Sitecore.Ecommerce.Core" />
<alias alias="MailServiceImpl" type="Sitecore.Ecommerce.Mail.MailServiceImpl, Sitecore.Ecommerce.Core" /> -
Add the following registrations to the <configuration><unity><container> section:
<register type="User" mapTo="ContextUser" name="ContextUser">
<lifetime type="hierarchical" />
</register>
<register type="ShopContext">
<lifetime type="hierarchical" />
</register>
<register type="PipelineWrapper">
<lifetime type="singleton" />
</register>
<register type="SiteContextFactoryWrapper">
<lifetime type="singleton" />
</register>
<register type="SiteInfo">
<constructor>
<param name="properties" />
</constructor>
</register>
<register type="StringDictionary">
<constructor />
</register>
<register type="IEntityMemberConverter" mapTo="ConvertibleEntityMemberConverter" name="StringEntityMemberConverter" />
<register type="ICurrencyConverter" mapTo="StrictCurrencyConverter">
<lifetime type="hierarchical" />
<constructor>
<param name="innerCurrencyConverter" dependencyName="InnerCurrencyConverter" />
<param name="shopContext" />
<param name="currencyMapper" />
</constructor>
</register
<register type="CustomerMembership">
<lifetime type="hierarchical" />
<property name="ShopContext" />
</register>
<register type="OrderIDGenerator" mapTo="ItemBasedOrderIDGenerator">
<lifetime type="hierarchical" />
</register>
<register type="OrderIDGenerationStrategy" mapTo="NumericOrderIDGenerationStrategy" />
<register type="TransientOrderConverter">
<property name="OrderStateConfiguration" />
<property name="CountryProvider" />
<property name="NotificationOptionProvider" />
<property name="ShippingProvider" />
<property name="CompanyMasterData" />
</register>
<register type="DtoConvertor[Order]" mapTo="OrderDtoConvertor" />
<register type="DtoConvertor[ShoppingCart]" mapTo="ShoppingCartDtoConvertor" />
<register type="ProductFactory" mapTo="ItemProductFactory">
<lifetime type="hierarchical" />
<property name="ShopContext" />
</register>
<register type="PriceCalculatorFactory" mapTo="PriceCalculatorFactoryImpl">
<property name="User" dependencyName="ContextUser" />
</register>
<register type="PaymentProviderFactory" mapTo="DefaultPaymentProviderFactory" />
<register type="Repository[CoreOrder]" mapTo="EfOrderRepository">
<lifetime type="hierarchical" />
<property name="ConnectionStringOrName" value="orders" />
</register>
<register type="CoreOrderStateConfiguration">
<property name="ShopContext" />
</register>
<register type="MerchantOrderManager">
<lifetime type="hierarchical" />
<property name="CoreOrderManager" />
<property name="StateConfiguration" />
<property name="CalculationStrategy" />
<property name="OrderProcessor" />
<property name="ShopContext" />
</register>
<register type="MerchantOrderProcessor" mapTo="MerchantOrderProcessor">
<property name="Logger" />
</register>
<register type="MerchantOrderStateConfiguration">
<property name="OrderSecurity" />
<property name="StateManager" />
</register>
<register type="VisitorOrderManager" mapTo="DefaultVisitorOrderManager">
<lifetime type="hierarchical" />
<interceptor type="VirtualMethodInterceptor" />
<policyInjection />
</register>
<register type="VisitorOrderProcessorBase" mapTo="VisitorOrderProcessor">
<lifetime type="hierarchical" />
<interceptor type="VirtualMethodInterceptor" />
<policyInjection />
</register>
<register type="MerchantOrderSecurity">
<property name="User" dependencyName="ContextUser" />
<property name="OrderStateConfiguration" />
</register>
<register type="VisitorOrderSecurity">
<property name="User" dependencyName="ContextUser" />
<property name="OrderStateConfiguration" />
</register>
<register type="OrderLineFactory" mapTo="OrderLineFactoryImpl">
<property name="ProductRepository" />
<property name="ProductPriceManager" />
<property name="CurrencyProvider" />
<property name="VatRegionProvider" />
</register>
<register type="OrderProcessingStrategyResolver" mapTo="OrderProcessingStrategyResolverImpl">
<property name="OrderSecurity" />
<register type="OrderProcessingStrategy" mapTo="AddNewOrderLineProcessingStrategy" name="AddOrderLine" />
<register type="OrderProcessingStrategy" mapTo="EditOrderLineProcessingStrategy" name="EditOrderLine" />
<register type="OrderProcessingStrategy" mapTo="RemoveOrderLineProcessingStrategy" name="RemoveOrderLine" />
<register type="OrderProcessingStrategy" mapTo="ChangeOrderLineQuantityProcessingStrategy" name="ChangeOrderLineQuantity" />
<register type="OrderProcessingStrategy" mapTo="CancelReservationProcessingStrategy" name="CancelOrder" />
<register type="OrderProcessingStrategy" mapTo="OrderStateProcessingStrategy" name="ChangeState" />
<register type="OrderProcessingStrategy" mapTo="CaptureOrderProcessingStrategy" name="CaptureOrder" />
<register type="OrderProcessingStrategy" mapTo="PackOrderProcessingStrategy" name="PackOrder" />
<register type="OrderProcessingStrategy" mapTo="ShipOrderProcessingStrategy" name="ShipOrder" />
<register type="ProcessingStrategy" mapTo="VisitorOrderCancelationStrategy">
<property name="StateManager" />
</register>
<register type="MerchantOrderCancellationStrategy">
<property name="StateManager" />
<property name="OrderSecurity" />
</register>
<!-- LOGGING -->
<register type="Logger">
<property name="DefaultShopContextId" value="localhost" />
<property name="Provider" />
</register>
<register type="LoggingHandler">
<property name="Logger" />
</register>
<register type="LoggingProvider" mapTo="EfLoggingProvider">
<lifetime type="hierarchical" />
</register>
<!-- MAILING -->
<register type="ConfirmationMessageBuilder" mapTo="StiReportConfirmationBuilder" />
<register type="MailService" mapTo="MailServiceImpl" />
<extension type="Sitecore.Ecommerce.Visitor.Unity.ShopContextContainerExtension, Sitecore.Ecommerce.Visitor" /> - Add the <property name="ProductRepository" /> and <property name="DataMapper" /> nodes to the <register type="ICatalogProductResolveStrategy" mapTo="ProductListCatalogResolveStrategy" name="Product List"> section.
- Add the <property name="ProductRepository" /> and <property name="SearchProvider" /> nodes to the <register type="ICatalogProductResolveStrategy" mapTo="QueryCatalogProductResolveStrategy" name="Query"> section.
- Set the <lifetime type="hierarchical" /> node in the <register type="ICheckOut" mapTo="CheckOut"> section.
-
Replace the node <register type="ICurrencyConverter" mapTo="CurrencyConverter"> with the new one:
<register type="ICurrencyConverter" mapTo="CurrencyConverter" name="InnerCurrencyConverter">
<lifetime type="hierarchical" />
<property name="ShopContext" />
</register> -
Replace the node <register type="ICustomerManager" mapTo="CustomerManager"> with the new one:
<register type="ICustomerManager" mapTo="CustomerManager">
<lifetime type="hierarchical" />
<property name="CustomerMembership" />
</register> - Set the <lifetime type="hierarchical" /> node in the <register type="IMail" mapTo="Mail"> section.
-
Replace the node <register type="IOrderManager" mapTo="OrderManager"> with the new one:
<register type="IOrderManager" mapTo="TransientOrderManager">
<lifetime type="hierarchical" />
</register> - Set the <lifetime type="hierarchical" /> node in the <register type="OrderIDGenerator" mapTo="ItemBasedOrderIDGenerator"> section.
-
Replace the node <register type="IProductStockManager" mapTo="ProductStockManager"> with the new one:
<register type="IProductStockManager" mapTo="ProductStockManager">
<lifetime type="hierarchical" />
</register> -
Replace the node <register type="IProductPriceManager" mapTo="ProductPriceManager"> with the new one:
<register type="IProductPriceManager" mapTo="ProductPriceManager">
<lifetime type="hierarchical" />
</register> -
Replace the node <register type="IProductRepository" mapTo="ProductRepository"> with the new one:
<register type="IProductRepository" mapTo="ProductRepository">
<property name="DataMapper" />
<property name="EntityHelper" />
<property name="ShopContext" />
</register> - Set the <lifetime type="hierarchical" /> node in the <register type=" ITransactionData" mapTo=" TransactionData"> section.
- Add the node <property name="ProductRepository" /> to the <register type="ShoppingCartLine" mapTo="SitecoreShoppingCartLine"> section.
-
Replace the node <register type="ISearchProvider" mapTo="SitecoreQuerySearchProvider"> with the new one:
<register type="ISearchProvider" mapTo="CompositeSearchProvider">
<property name="PrimarySearchProvider" dependencyName="LuceneSearchProvider" />
<property name="SecondarySearchProvider" dependencyName="FastQuerySearchProvider" />
</register> - Set the <lifetime type="hierarchical" /> node in the <register type="VirtualProductResolverArgs" mapTo="VirtualProductResolverArgs"> section.
- Set the <lifetime type="hierarchical" /> node in all the <register type=" ProductUrlProcessor" > sections.
ConnectionStrings.config
-
Add the following connection strings to the <configuration> section:
<add name="orders" connectionString="user id=user;password=password;Data Source=(server);Database=SitecoreEcommerce_Orders;MultipleActiveResultSets=true" providerName ="System.Data.SqlClient"/>
<add name="logging" connectionString="user id=user;password=password;Data Source=(server);Database=SitecoreEcommerce_ActionLog;MultipleActiveResultSets=true" providerName ="System.Data.SqlClient"/>
Sitecore.Ecommerce.config
-
Add the following node to the <configuration><sitecore><pipelines>
<initialize> section:
<processor type="Sitecore.Ecommerce.Pipelines.Loader.ConfigureShopContainers, Sitecore.Ecommerce.Kernel" patch:after="processor[@type='Sitecore.Ecommerce.Pipelines.Loader.ConfigureEntities, Sitecore.Ecommerce.Kernel']" />
-
Add the following nodes to the <configuration><sitecore><pipelines><httpRequestBegin> section:
<processor type="Sitecore.Ecommerce.Pipelines.HttpRequest.CreateRequestContainer, Sitecore.Ecommerce.Kernel" patch:after="*[@type='Sitecore.Pipelines.HttpRequest.SiteResolver, Sitecore.Kernel']" />
<processor type="Sitecore.Ecommerce.Shell.Pipelines.HttpRequest.ShellShopResolver, Sitecore.Ecommerce.Shell" patch:after="*[@type='Sitecore.Ecommerce.Pipelines.HttpRequest.CreateRequestContainer, Sitecore.Ecommerce.Kernel']" /> -
Add the following node to the <configuration><sitecore><pipelines> section:
<httpRequestEnd>
<processor type="Sitecore.Ecommerce.Pipelines.HttpRequest.DisposeRequestContainer, Sitecore.Ecommerce.Kernel" />
</httpRequestEnd> -
Add the following node to the <configuration><sitecore><pipelines><orderCreated> section:
<processor type="Sitecore.Ecommerce.Visitor.Pipelines.OrderCreated.NotifyCustomer, Sitecore.Ecommerce.Visitor"/> -
Removethe following nodes from the <configuration><sitecore><pipelines><orderCreated> section:
< processor type="Sitecore.Ecommerce.Pipelines.OrderCreated.SendMailToAdmin, Sitecore.Ecommerce.Kernel"/>
<processor type="Sitecore.Ecommerce.Pipelines.OrderCreated.SendMailToClient, Sitecore.Ecommerce.Kernel"/> -
Add the following nodes to the <configuration><sitecore><pipelines> section:
<orderCaptured>
</orderCaptured> - Remove the <renderLayout> node from the <configuration><sitecore><pipelines> section.
-
Add the following nodes to the <configuration><sitecore><pipelines> section:
<insertRenderings>
<processor type="Sitecore.Pipelines.InsertRenderings.Processors.GetItem, Sitecore.Kernel">
<patch:attribute name="type">Sitecore.Ecommerce.Pipelines.InsertRenderings.GetItem, Sitecore.Ecommerce.Kernel</patch:attribute>
</processor>
</insertRenderings>
Sitecore.Ecommerce.Examples.config
-
Add the following nodes to the <configuration><sitecore><pipelines> section:
<initialize>
<processor type="Sitecore.Ecommerce.Pipelines.Loader.ConfigureEntities, Sitecore.Ecommerce.Kernel" patch:after="processor[@type='Sitecore.Pipelines.Loader.EnsureAnonymousUsers, Sitecore.Kernel']" name="examplesunityconfiginitializer">
<UnityConfigSource>/App_Config/Sitecore.Ecommerce.Examples.Unity.config</UnityConfigSource>
</processor>
</initialize>
<httpRequestBegin>
<processor type="Sitecore.Ecommerce.Visitor.Pipelines.HttpRequest.VisitorShopResolvingProcessor, Sitecore.Ecommerce.Visitor" patch:after="*[@type='Sitecore.Ecommerce.Pipelines.HttpRequest.CreateRequestContainer, Sitecore.Ecommerce.Kernel']" />
</httpRequestBegin>
3.2. Config file changes in SES 2.0.0 rev.120720
The config file changes in SES 2.0.0 rev. 120720 as compared to SES 1.2.0 rev.111101 version.
Unity.config changes:
- Add the next aliases to <configuration><unity> section:
<alias alias="User" type="Sitecore.Security.Accounts.User, Sitecore.Kernel" />
<alias alias="StringDictionary" type="Sitecore.Collections.StringDictionary, Sitecore.Kernel" />
<alias alias="SiteInfo" type="Sitecore.Web.SiteInfo, Sitecore.Kernel" />
<alias alias="SiteContext" type="Sitecore.Sites.SiteContext, Sitecore.Kernel" />
<alias alias="SiteContextFactoryWrapper" type="Sitecore.Sites.SiteContextFactoryWrapper, Sitecore.Ecommerce.Kernel" />
<alias alias="ContextUser" type="Sitecore.Ecommerce.Security.Accounts.ContextUser, Sitecore.Ecommerce.Kernel" />
<alias alias="ShopContext" type="Sitecore.Ecommerce.ShopContext, Sitecore.Ecommerce.Core" />
<alias alias="PaymentProviderFactory" type="Sitecore.Ecommerce.DomainModel.Payments.PaymentProviderFactory, Sitecore.Ecommerce.DomainModel" />
<alias alias="PaymentProviderFactoryImpl" type="Sitecore.Ecommerce.Payments.PaymentProviderFactoryImpl, Sitecore.Ecommerce.Kernel" />
<alias alias="DtoConvertor" type="Sitecore.Ecommerce.Data.Convertors.Convertor`1, Sitecore.Ecommerce.Kernel" />
<alias alias="OrderDtoConvertor" type="Sitecore.Ecommerce.Data.Convertors.OrderConvertor, Sitecore.Ecommerce.Kernel" />
<alias alias="ShoppingCartDtoConvertor" type="Sitecore.Ecommerce.Data.Convertors.ShoppingCartConvertor, Sitecore.Ecommerce.Kernel" />
<alias alias="Repository" type="Sitecore.Ecommerce.Data.Repository`1, Sitecore.Ecommerce.Core" />
<alias alias="StrictCurrencyConverter" type="Sitecore.Ecommerce.Currencies.StrictCurrencyConverter, Sitecore.Ecommerce.Kernel" />
<alias alias="CustomerMembership" type="Sitecore.Ecommerce.Security.CustomerMembership, Sitecore.Ecommerce.Kernel" />
<alias alias="PriceCalculatorFactory" type="Sitecore.Ecommerce.DomainModel.Prices.PriceCalculatorFactory, Sitecore.Ecommerce.DomainModel" />
<alias alias="PriceCalculatorFactoryImpl" type="Sitecore.Ecommerce.Prices.PriceCalculatorFactoryImpl, Sitecore.Ecommerce.Kernel" />
<!-- ORDER MANAGEMENT -->
<alias alias="CoreOrder" type="Sitecore.Ecommerce.OrderManagement.Orders.Order, Sitecore.Ecommerce.Core" />
<alias alias="CoreOrderManager" type="Sitecore.Ecommerce.OrderManagement.CoreOrderManager, Sitecore.Ecommerce.Core" />
<alias alias="CoreOrderStateConfiguration" type="Sitecore.Ecommerce.OrderManagement.CoreOrderStateConfiguration, Sitecore.Ecommerce.Core" />
<alias alias="OrderIDGenerator" type="Sitecore.Ecommerce.OrderManagement.OrderIDGenerator, Sitecore.Ecommerce.Kernel" />
<alias alias="ItemBasedOrderIDGenerator" type="Sitecore.Ecommerce.OrderManagement.ItemBasedOrderIDGenerator, Sitecore.Ecommerce.Kernel" />
<alias alias="RemoteOrderIDGenerator" type="Sitecore.Ecommerce.ServiceModel.Orders.RemoteOrderIDGenerator, Sitecore.Ecommerce.ServiceModel" />
<alias alias="EfOrderRepository" type="Sitecore.Ecommerce.Data.OrderManagement.EfOrderRepository, Sitecore.Ecommerce.Data" />
<alias alias="OrderProcessor" type="Sitecore.Ecommerce.OrderManagement.OrderProcessor, Sitecore.Ecommerce.Core" />
<alias alias="MerchantOrderSecurity" type="Sitecore.Ecommerce.Merchant.OrderManagement.MerchantOrderSecurity, Sitecore.Ecommerce.Merchant" />
<alias alias="VisitorOrderSecurity" type="Sitecore.Ecommerce.Visitor.OrderManagement.VisitorOrderSecurity, Sitecore.Ecommerce.Visitor" />
<alias alias="MerchantOrderManager" type="Sitecore.Ecommerce.Merchant.OrderManagement.MerchantOrderManager, Sitecore.Ecommerce.Merchant" />
<alias alias="MerchantOrderStateConfiguration" type="Sitecore.Ecommerce.Merchant.OrderManagement.MerchantOrderStateConfiguration, Sitecore.Ecommerce.Merchant" />
<alias alias="MerchantOrderProcessor" type="Sitecore.Ecommerce.Merchant.OrderManagement.MerchantOrderProcessor, Sitecore.Ecommerce.Merchant" />
<alias alias="ProcessingStrategy" type="Sitecore.Ecommerce.OrderManagement.ProcessingStrategy, Sitecore.Ecommerce.Core" />
<alias alias="VisitorOrderRepositoryBase" type="Sitecore.Ecommerce.OrderManagement.VisitorOrderRepositoryBase, Sitecore.Ecommerce.Kernel" />
<alias alias="RemoteOrderRepository" type="Sitecore.Ecommerce.ServiceModel.Orders.RemoteOrderRepository, Sitecore.Ecommerce.ServiceModel" />
<alias alias="VisitorOrderRepository" type="Sitecore.Ecommerce.Visitor.OrderManagement.VisitorOrderRepository, Sitecore.Ecommerce.Visitor" />
<alias alias="VisitorOrderProcessorBase" type="Sitecore.Ecommerce.OrderManagement.VisitorOrderProcessorBase, Sitecore.Ecommerce.Kernel" />
<alias alias="RemoteOrderProcessor" type="Sitecore.Ecommerce.ServiceModel.Orders.RemoteOrderProcessor, Sitecore.Ecommerce.ServiceModel" />
<alias alias="VisitorOrderProcessor" type="Sitecore.Ecommerce.Visitor.OrderManagement.VisitorOrderProcessor, Sitecore.Ecommerce.Visitor" />
<alias alias="VisitorOrderCancelationStrategy" type="Sitecore.Ecommerce.Visitor.OrderManagement.VisitorOrderCancelationStrategy, Sitecore.Ecommerce.Visitor" />
<alias alias="TransientOrderManager" type="Sitecore.Ecommerce.Visitor.OrderManagement.Transient.TransientOrderManager, Sitecore.Ecommerce.Visitor" />
<alias alias="TransientOrderConverter" type="Sitecore.Ecommerce.Visitor.OrderManagement.Transient.TransientOrderConverter, Sitecore.Ecommerce.Visitor" />
<alias alias="OrderLineFactory" type="Sitecore.Ecommerce.OrderManagement.OrderLineFactory, Sitecore.Ecommerce.Core" />
<alias alias="OrderLineFactoryImpl" type="Sitecore.Ecommerce.Merchant.OrderManagement.OrderLineFactoryImpl, Sitecore.Ecommerce.Merchant" />
<alias alias="OrderProcessingStrategy" type="Sitecore.Ecommerce.OrderManagement.OrderProcessingStrategy, Sitecore.Ecommerce.Core" />
<alias alias="OrderProcessingStrategyResolver" type="Sitecore.Ecommerce.Merchant.OrderManagement.OrderProcessingStrategyResolver, Sitecore.Ecommerce.Merchant" />
<alias alias="OrderProcessingStrategyResolverImpl" type="Sitecore.Ecommerce.Merchant.OrderManagement.OrderProcessingStrategyResolverImpl, Sitecore.Ecommerce.Merchant" />
<alias alias="AddNewOrderLineProcessingStrategy" type="Sitecore.Ecommerce.Merchant.OrderManagement.AddNewOrderLineProcessingStrategy, Sitecore.Ecommerce.Merchant" />
<alias alias="EditOrderLineProcessingStrategy" type="Sitecore.Ecommerce.Merchant.OrderManagement.EditOrderLineProcessingStrategy, Sitecore.Ecommerce.Merchant" />
<alias alias="RemoveOrderLineProcessingStrategy" type="Sitecore.Ecommerce.Merchant.OrderManagement.RemoveOrderLineProcessingStrategy, Sitecore.Ecommerce.Merchant" />
<alias alias="ChangeOrderLineQuantityProcessingStrategy" type="Sitecore.Ecommerce.Merchant.OrderManagement.ChangeOrderLineQuantityProcessingStrategy, Sitecore.Ecommerce.Merchant" />
<alias alias="OrderStateProcessingStrategy" type="Sitecore.Ecommerce.Merchant.OrderManagement.OrderStateProcessingStrategy, Sitecore.Ecommerce.Merchant" />
<alias alias="CancelReservationProcessingStrategy" type="Sitecore.Ecommerce.Merchant.OrderManagement.CancelReservationProcessingStrategy, Sitecore.Ecommerce.Merchant" />
<alias alias="CaptureOrderProcessingStrategy" type="Sitecore.Ecommerce.Merchant.OrderManagement.CaptureOrderProcessingStrategy, Sitecore.Ecommerce.Merchant" />
<alias alias="PackOrderProcessingStrategy" type="Sitecore.Ecommerce.Merchant.OrderManagement.PackOrderProcessingStrategy, Sitecore.Ecommerce.Merchant" />
<alias alias="ShipOrderProcessingStrategy" type="Sitecore.Ecommerce.Merchant.OrderManagement.ShipOrderProcessingStrategy, Sitecore.Ecommerce.Merchant" />
<alias alias="MerchantOrderCancellationStrategy" type="Sitecore.Ecommerce.Merchant.OrderManagement.MerchantOrderCancellationStrategy, Sitecore.Ecommerce.Merchant" />
<alias alias="CancelOrderProcessingStrategy" type="Sitecore.Ecommerce.Visitor.OrderManagement.CancelOrderProcessingStrategy, Sitecore.Ecommerce.Visitor" />
<alias alias="ConfirmationMessageBuilder" type="Sitecore.Ecommerce.OrderManagement.ConfirmationMessageBuilder, Sitecore.Ecommerce.Core" />
<!-- LOGGING -->
<alias alias="Logger" type="Sitecore.Ecommerce.Logging.Logger, Sitecore.Ecommerce.Core" />
<alias alias="LoggingProvider" type="Sitecore.Ecommerce.Logging.LoggingProvider, Sitecore.Ecommerce.Core" />
<alias alias="EfLoggingProvider" type="Sitecore.Ecommerce.Data.Logging.EfLoggingProvider, Sitecore.Ecommerce.Data" />
<alias alias="LoggingHandler" type="Sitecore.Ecommerce.Logging.LoggingHandler, Sitecore.Ecommerce.Core" />
<!-- MAILING -->
<alias alias="MailService" type="Sitecore.Ecommerce.Mail.MailService, Sitecore.Ecommerce.Core" />
<alias alias="MailServiceImpl" type="Sitecore.Ecommerce.Mail.MailServiceImpl, Sitecore.Ecommerce.Core" />
<!-- CONFIGURATION -->
<alias alias="ShopConfiguration" type="Sitecore.Ecommerce.ShopConfiguration, Sitecore.Ecommerce.Kernel" /> - Add the next registrations to <configuration><unity><container> section:
<register type="User" mapTo="ContextUser" name="ContextUser">
<lifetime type="hierarchical" />
</register>
<register type="ShopContext">
<lifetime type="hierarchical" />
</register>
<register type="SiteContextFactoryWrapper">
<lifetime type="singleton" />
</register>
<register type="SiteInfo">
<constructor>
<param name="properties" />
</constructor>
</register>
<register type="StringDictionary">
<constructor />
</register>
<register type="ICurrencyConverter" mapTo="StrictCurrencyConverter">
<lifetime type="hierarchical" />
<constructor>
<param name="innerCurrencyConverter" dependencyName="InnerCurrencyConverter" />
<param name="shopContext" />
<param name="currencyMapper" />
</constructor>
</register
<register type="CustomerMembership">
<lifetime type="hierarchical" />
<property name="ShopContext" />
</register>
<register type="OrderIDGenerator" mapTo="ItemBasedOrderIDGenerator">
<lifetime type="singleton" />
<property name="ShopContext" />
</register>
<register type="TransientOrderConverter">
<property name="OrderStateConfiguration" />
<property name="CountryProvider" />
<property name="NotificationOptionProvider" />
<property name="ShippingProvider" />
<property name="CompanyMasterData" />
</register>
<register type="DtoConvertor[Order]" mapTo="OrderDtoConvertor" />
<register type="DtoConvertor[ShoppingCart]" mapTo="ShoppingCartDtoConvertor" />
<register type="ProductFactory" mapTo="ItemProductFactory">
<lifetime type="hierarchical" />
<property name="ShopContext" />
</register>
<register type="PriceCalculatorFactory" mapTo="PriceCalculatorFactoryImpl">
<property name="Membership" />
<property name="User" dependencyName="ContextUser" />
</register>
<register type="PaymentProviderFactory" mapTo="PaymentProviderFactoryImpl" >
<property name="EntityProvider" />
</register>
<register type="Repository[CoreOrder]" mapTo="EfOrderRepository">
<lifetime type="hierarchical" />
<property name="ConnectionStringOrName" value="orders" />
</register>
<register type="CoreOrderManager">
<lifetime type="hierarchical" />
<property name="Repository" />
<property name="StateConfiguration" />
</register>
<register type="CoreOrderStateConfiguration">
<property name="ShopContext" />
</register>
<register type="MerchantOrderManager">
<lifetime type="hierarchical" />
<property name="CoreOrderManager" />
<property name="OrderProcessor" />
</register>
<register type="MerchantOrderProcessor" mapTo="MerchantOrderProcessor">
<property name="Logger" />
</register>
<register type="MerchantOrderStateConfiguration">
<property name="OrderSecurity" />
<property name="StateManager" />
</register>
<register type="VisitorOrderProcessorBase" mapTo="VisitorOrderProcessor">
<lifetime type="hierarchical" />
<property name="InnerProcessor" />
<property name="ProcessingStrategy" />
<property name="Repository" />
<property name="OrderSecurity" />
<interceptor type="VirtualMethodInterceptor" />
<policyInjection />
</register>
<register type="VisitorOrderRepositoryBase" mapTo="VisitorOrderRepository">
<lifetime type="hierarchical" />
<property name="InnerRepository" />
<property name="CustomerManager" />
<interceptor type="VirtualMethodInterceptor" />
<policyInjection />
</register>
<register type="MerchantOrderSecurity">
<property name="User" dependencyName="ContextUser" />
<property name="OrderStateConfiguration" />
</register>
<register type="VisitorOrderSecurity">
<property name="User" dependencyName="ContextUser" />
<property name="OrderStateConfiguration" />
</register>
<register type="OrderLineFactory" mapTo="OrderLineFactoryImpl">
<property name="ProductRepository" />
<property name="ProductPriceManager" />
<property name="CurrencyProvider" />
<property name="VatRegionProvider" />
</register>
<register type="OrderProcessingStrategyResolver" mapTo="OrderProcessingStrategyResolverImpl">
<property name="OrderSecurity" />
<property name="CancelOrderProcessingStrategy" dependencyName="CancelOrder" />
<property name="CaptureOrderProcessingStrategy" dependencyName="CaptureOrder" />
<property name="PackOrderProcessingStrategy" dependencyName="PackOrder" />
<property name="ShipOrderProcessingStrategy" dependencyName="ShipOrder" />
<property name="OrderStateProcessingStrategy" dependencyName="ChangeState" />
</register>
<register type="OrderProcessingStrategy" mapTo="AddNewOrderLineProcessingStrategy" name="AddOrderLine">
<property name="OrderManager" />
<property name="ProductStockManager" />
<property name="OrderLineFactory" />
</register>
<register type="OrderProcessingStrategy" mapTo="EditOrderLineProcessingStrategy" name="EditOrderLine">
<property name="OrderManager" />
<property name="ProductStockManager" />
<property name="OrderLineFactory" />
</register>
<register type="OrderProcessingStrategy" mapTo="RemoveOrderLineProcessingStrategy" name="RemoveOrderLine">
<property name="OrderManager" />
<property name="ProductStockManager" />
</register>
<register type="OrderProcessingStrategy" mapTo="ChangeOrderLineQuantityProcessingStrategy" name="ChangeOrderLineQuantity">
<property name="OrderManager" />
<property name="ProductStockManager" />
<property name="OrderLineFactory" />
</register>
<register type="OrderProcessingStrategy" mapTo="CancelReservationProcessingStrategy" name="CancelOrder">
<property name="OrderManager" />
<property name="PaymentProviderFactory" />
</register>
<register type="OrderProcessingStrategy" mapTo="OrderStateProcessingStrategy" name="ChangeState">
<property name="OrderStateConfiguration" />
</register>
<register type="OrderProcessingStrategy" mapTo="CaptureOrderProcessingStrategy" name="CaptureOrder">
<property name="PaymentProviderFactory" />
<property name="TransactionDataProvider" />
<property name="PipelineWrapper" />
</register>
<register type="OrderProcessingStrategy" mapTo="PackOrderProcessingStrategy" name="PackOrder">
<property name="OrderStateConfiguration" />
</register>
<register type="OrderProcessingStrategy" mapTo="ShipOrderProcessingStrategy" name="ShipOrder">
<property name="OrderStateConfiguration" />
</register>
<register type="ProcessingStrategy" mapTo="VisitorOrderCancelationStrategy">
<property name="StateManager" />
</register>
<register type="MerchantOrderCancellationStrategy">
<property name="StateManager" />
<property name="OrderSecurity" />
</register>
<!-- LOGGING -->
<register type="Logger">
<property name="DefaultShopContextId" value="localhost" />
<property name="Provider" />
</register>
<register type="LoggingHandler">
<property name="Logger" />
</register>
<register type="LoggingProvider" mapTo="EfLoggingProvider">
<lifetime type="perthread" />
<constructor>
<param name="databaseName" value="logging" />
</constructor>
</register>
<!-- MAILING -->
<register type="MailService" mapTo="MailServiceImpl" />
<!-- CONFIGURATION -->
<register type="ShopConfiguration">
<property name="DataMapper" />
</register>
<extension type="Sitecore.Ecommerce.Visitor.Unity.ShopContextContainerExtension, Sitecore.Ecommerce.Visitor" /> - Add <property name="EntityHelper" /> node to <configuration><unity><container><register type="IDataMapper" mapTo="DataMapper"> section.
- Add <property name="ProductFactory" /> node to <register type="IEntityMemberConverter" mapTo="ProductSpecificationEntityMemberConverter" name="ProductSpecificationEntityMemberConverter"> section.
- Add <property name="ProductRepository" /> node to <register type="ICatalogProductResolveStrategy" mapTo="ProductListCatalogResolveStrategy" name="Product List"> section.
- Add <property name="ProductRepository" /> node to <register type="ICatalogProductResolveStrategy" mapTo="QueryCatalogProductResolveStrategy" name="Query"> section.
- Replace node <register type="ICurrencyConverter" mapTo="CurrencyConverter"> with new one:
<register type="ICurrencyConverter" mapTo="CurrencyConverter" name="InnerCurrencyConverter">
<lifetime type="hierarchical" />
<property name="ShopContext" />
</register> - Replace node <register type="ICustomerManager" mapTo="CustomerManager"> with new one:
<register type="ICustomerManager" mapTo="CustomerManager">
<lifetime type="hierarchical" />
<property name="CustomerMembership" />
</register> - Replace node <register type="IOrderManager" mapTo="OrderManager"> with new one:
<register type="IOrderManager" mapTo="TransientOrderManager">
<lifetime type="hierarchical" />
<property name="ShopContext" />
<property name="InnerRepository" />
<property name="VirtualProductResolver" />
<property name="CustomerManager" />
<property name="EntityHelper" />
<property name="TransactionData" />
<property name="OrderConverter" />
<property name="OrderIDGenerator" />
</register> - Replace node <register type="IProductPriceManager" mapTo="ProductPriceManager"> with new one:
<register type="IProductPriceManager" mapTo="ProductPriceManager">
<lifetime type="hierarchical" />
<property name="PriceCalculatorFactory" />
<property name="ShopContext" />
</register> - Replace node <register type="IProductRepository" mapTo="ProductRepository"> with new one:
<register type="IProductRepository" mapTo="ProductRepository">
<lifetime type="hierarchical" />
<constructor>
<param name="searchProvider">
<dependency name="CompositeSearchProvider" />
</param>
</constructor>
<property name="DataMapper" />
<property name="ProductFactory" />
<property name="ShopContext" />
</register
Add node <property name="ProductRepository" /> to <register type="ShoppingCartLine" mapTo="SitecoreShoppingCartLine"> section.
ConnectionStrings.config
- Add the next connection strings to <configuration> section:
<add name="orders" connectionString="user id=user;password=password;Data Source=(server);Database=SitecoreEcommerce_Orders;MultipleActiveResultSets=true" providerName ="System.Data.SqlClient"/>
<add name="logging" connectionString="user id=user;password=password;Data Source=(server);Database=SitecoreEcommerce_ActionLog;MultipleActiveResultSets=true" providerName ="System.Data.SqlClient"/>
Sitecore.Ecommerce.config
- Add the next node to <configuration><sitecore><pipelines><initialize> section
<processor type="Sitecore.Ecommerce.Pipelines.Loader.RegisterReportBuilder, Sitecore.Ecommerce.Kernel" patch:after="processor[@type='Sitecore.Ecommerce.Pipelines.Loader.ConfigureEntities, Sitecore.Ecommerce.Kernel']">
<ReportFile>/sitecore modules/shell/Ecommerce/Reports/OrderDetails.mrt</ReportFile>
<LogoFile>/sitecore modules/shell/Ecommerce/Reports/logo.jpg</LogoFile>
</processor> - Add the next nodes to <configuration><sitecore><pipelines><httpRequestBegin> section:
<processor type="Sitecore.Ecommerce.Pipelines.HttpRequest.CreateRequestContainer, Sitecore.Ecommerce.Kernel" patch:after="*[@type='Sitecore.Pipelines.HttpRequest.SiteResolver, Sitecore.Kernel']" />
<processor type="Sitecore.Ecommerce.Pipelines.HttpRequest.ShellShopResolver, Sitecore.Ecommerce.Kernel" patch:after="*[@type='Sitecore.Ecommerce.Pipelines.HttpRequest.CreateRequestContainer, Sitecore.Ecommerce.Kernel']" /> - Add the next node to <configuration><sitecore><pipelines> section:
<httpRequestEnd>
<processor type="Sitecore.Ecommerce.Pipelines.HttpRequest.DisposeRequestContainer, Sitecore.Ecommerce.Kernel" />
</httpRequestEnd> - Add the next node to <configuration><sitecore><pipelines><orderCreated> section:
<processor type="Sitecore.Ecommerce.Visitor.Pipelines.OrderCreated.NotifyCustomer, Sitecore.Ecommerce.Visitor"/>
- Remove the next nodes from <configuration><sitecore><pipelines><orderCreated> section:
<processor type="Sitecore.Ecommerce.Pipelines.OrderCreated.SendMailToAdmin, Sitecore.Ecommerce.Kernel"/>
<processor type="Sitecore.Ecommerce.Pipelines.OrderCreated.SendMailToClient, Sitecore.Ecommerce.Kernel"/> - Add the next nodes to <configuration><sitecore><pipelines> section:
<orderCaptured>
</orderCaptured>
Sitecore.Ecommerce.Examples.config
- Add the next node to <configuration><sitecore><pipelines> section:
<httpRequestBegin>
<processor type="Sitecore.Ecommerce.Visitor.Pipelines.HttpRequest.VisitorShopResolvingProcessor, Sitecore.Ecommerce.Visitor" patch:after="*[@type='Sitecore.Ecommerce.Pipelines.HttpRequest.CreateRequestContainer, Sitecore.Ecommerce.Kernel']" />
</httpRequestBegin>