Introduction
We recently started work on a Sitecore 7.5 commerce solution
for a large client of ours where we would implement the shiny, new Commerce
Connect 7.5 (Connect) module.
As a good architect / developer, I consulted with the powers
of Google but couldn’t really find a whole lot of good information out there about
how to get started. So, this blog series will report what I
learned when implementing the module. In this article, I’ll explore the setup process and how to perform a simple test to make sure I can add and retrieve products from the product repository.
It’s not free
It is important to note that unlike its predecessors Sitecore
E-Commerce Fundamentals Edition (SEFE) and Sitecore E-Commerce Services (SES), Connect
is not free. I am not sure of the actual pricing; you would need to contact a Sitecore sales representative to get the details.
Installation
After downloading Connect 7.5, I went ahead and installed it
on my local 7.5 development instance.
Next, I went ahead and set up my product repository and
index. I followed Sitecore’s Installation
Guide to get my repository up and running: http://sdn.sitecore.net/upload/sdn5/products/sitecore%20commerce%20connect/7.5/sitecore_connect_75_installation_guide_usletter.pdf
Guide to get my repository up and running: http://sdn.sitecore.net/upload/sdn5/products/sitecore%20commerce%20connect/7.5/sitecore_connect_75_installation_guide_usletter.pdf
The 3 major steps include:
- Creating a repository using the Templates/Branches/CommerceConnect/Products/Product
Repository branch. I set mine up at the following path:
/sitecore/content/Data/Product Repository/Products - Updating the search Source for the Manufacturer
and ProductType fields of the Product template
- Modifying the necessary settings in the config
files to let the module know where my new repository is located in the
content tree. Files and locations to update include:
Sitecore.Commerce.Products.config
With that behind me, I needed to go ahead and sync my product repository bucket before using it for the first time:
Pulling out a product
Ok, so according to the documentation, I should be ready to
roll and can start throwing products into my repository where I can access
them using the Sitecore search API.
In the final solution, I want to pull a product out of the repo by product name, because I intend to have a MVC route that will have the product name hanging off the end. Something like this: running/mens/running-shoes/support/wave-inspire-11
With that being said, let me write some code and give it a test.
This is what my code looks like that will actually implement the method (some ugly hard-coded values, but remember that this is simply a test):
In my test, I slapped together a quick controller rendering as we are using MVC for the project. If you are using Web Forms, you would simply throw this onto a Layout or Sublayout.
The breakpoint below the line where I called my method confirmed that I am cooking with grease!
In the final solution, I want to pull a product out of the repo by product name, because I intend to have a MVC route that will have the product name hanging off the end. Something like this: running/mens/running-shoes/support/wave-inspire-11
With that being said, let me write some code and give it a test.
POCO
The first thing that I need to do is create a POCO that is consumable by the LINQ layer within Sitecore. I have to make sure that I inherit from SearchResultItem: public class ProductSearchResultItem : SearchResultItem
{
public string BrandName { get; set; }
public string ExternalID { get; set; }
public string Divisions { get; set; }
public string FullDescription { get; set; }
public string Identification { get; set; }
public string Manufacturer { get; set; }
public string ModelName { get; set; }
public string Product_Name { get; set; }
public string ProductClasses { get; set; }
public string ProductType { get; set; }
public string Short_Description { get; set; }
}
GetProduct Method
Next, I want a method that will take a product name as a parameter, and return the actual Sitecore item from my repository. In my case, I am using Glass Mapper as my ORM of choice. If you are still writing your classes by hand, or are using Custom Item Generator to generate your template based classes, I highly recommend that you look into using Glass. public Product GetProduct(string productName)
{
var index = Settings.Indexes.GetIndex("products");
using (var context = index.CreateSearchContext())
{
IQueryable<ProductSearchResultItem> query = context.GetQueryable<ProductSearchResultItem>()
.Where(
resultItem =>
resultItem.TemplateId == IProductConstants.TemplateId &&
resultItem.Product_Name.Equals(productName, StringComparison.InvariantCultureIgnoreCase) &&
resultItem.Name != "__Standard Values");
SearchResults<ProductSearchResultItem> results = query.GetResults();
var queryResults = results.Hits.Select(hit => hit.Document.GetItem());
return queryResults.Any() ? queryResults.FirstOrDefault().GlassCast<Product>() : null;
}
}
This is what my code looks like that will actually implement the method (some ugly hard-coded values, but remember that this is simply a test):
var myProduct = new ProductManager().GetProduct("Test Product");
Creating a Test Product
For the final piece of the puzzle, I need to add a test product to my repository.Run it!
The breakpoint below the line where I called my method confirmed that I am cooking with grease!
In Summary
I was successfully able to:
- Install and configure Commerce Connect.
- Add a product to the product repository.
- Write some code to pull the product out of the repository by product name using the Sitecore.ContentSearch API.
In my next post, I will be showing how to work the Commerce Connect cart, so watch this space.
Happy Coding!
2 comments:
Where does the ProductManager() class come from?
-Denis
Hi Martin,
We are using Sitecore Commerce Connect to sync the data from Hybris to Sitecore. Currently on click of Product Sync button from the content editor ribbon-> It calls a command->Sitecore.Commerce.Commands.Products.SynchronizeAllProducts, Sitecore.Commerce to sync the products. But we wanted to schedule this Sitecore commerce connect product sync as a daily batch job.
Basically the default Product Sync command-> Sitecore.Commerce.Commands.Products.SynchronizeAllProducts, Sitecore.Commerce
Should be invoked by a Batch job, I have followed the below steps.
1. Created a command item and Mentioned the Type as “Sitecore.Commerce.Commands.Products.SynchronizeAllProducts, Sitecore.Commerce”
and
Method as “Execute”
2. Created a schedule item and assosiated the above command
but when the scheduler executes -> i am getting an error Execute method NOT found
I have tried with StartProcess method as well :( dint work for me. Can you please advice?
Post a Comment