Ideas

Here are some thoughts on how can we create generic commerce server platform where we can onboard multiple brands easily (like samsung.commerceserverguru.com, lg.commerceserverguru.com, etc). Some assumptions made are..

  1. There will be one commerce server site and I provides one (virtual) catalog for each brand.
  2. There can be multiple web channels (sub sites – each subsite will get get one channel ).

The first thing its strike our minds is the configuration changes. We have two configurations, one is  application configuration and the other is business process configuration. These things will be different from one website to another website. In total, our configuration points are

  • Pipelines: Will leverage out of box pipelines but if the business process are different then we will created different pipelines for each brand and the same will get reflect in the channel configuration.
  • Channelconfiguration: If business process are different, its better we create different channel for each site and this channel name is provided in the ChannelConfiguration list (in the site).
  • Metadata xml file: this can be the same for all website as the code base/structure is same.
  • Web.config (Appsettings) - Since the configuration will differ from site to site, recommending to keep them in SharePoint Property Bag (It is a hash table where we are able to accumulate key and values).

 

First, I have created two CS applications on two different root site collections (same web application). The first site collection name is etv & second site collection name is mtv(Both points to different CS sites). Next, I have created a new channel in channel configuration (as shown below).

clip_image001

If we open the webpage, you will see wired exception and following exception is logged in the event viewer.

clip_image002

In order to fix this issue, I have added new site information at <Sites> section.

<Sites>
<Site sitename="etv" disableProductVersionHttpHeader="true" metadataRepositoryPath="c:\inetpub\wwwroot\wss\VirtualDirectories\cssite\MetadataDefinitions.xml> </Site>
<Site sitename="mtv" disableProductVersionHttpHeader="true" metadataRepositoryPath="c:\inetpub\wwwroot\wss\VirtualDirectories\cssite\MetadataDefinitions.xml> </Site>
</Sites>

When web page opened, you will receive different exception in the event viewer.

clip_image003

Changing the useSharedCommerceContexts=false in channelconfiguration will not work . A value of true indicates that CommerceContext.Current will be available, and used by all operation sequence components. Context objects exposed through the CommerceSiteContexts class will refer back to the context objects exposed through CommerceContext.Current. This also means that only a single site can be configured in ChannelConfiguration.config. A value of false indicates that CommerceContext.Current will be null, and not used by any operation sequence components. A separate set of Commerce Server context objects will be created for each site configured in ChannelConfiguration.config. These can be accessed through the CommerceSiteContexts class.

Note: As of now, commerce server 2009 allows us to point to single CS site from a web application. This is fixed in CS2009 R2.

Final option is to provide the same commerce server site name for both site collections in the channelconfiguration. After doing below changes the site is working fine.

<Channel sitename="etv" name="mtv">
<MessageHandlers>
<MessageHandler ………….

clip_image004

Here are my findings/recommendations.

  • For each site collection(brand), we will create different channel (if required), or leverage default channel.
  • Try to leverage existing pipelines – on demand we will create new pipelines for the brands. The same has to be reflected in channelconfiguration (under channels).
  • Metadata xml file is mapped to a CS site so this configuration will be common for all brands.

White labeling is still a myth using commerce server 2009 but my thought process is how can we reduce the development efforts to make this happen (if not self serviced site creation). If you have any queries or suggestions, please do drop me an email.

Related Articles


If you like this post, please click on our sponsor advertisement.


Cloud computing.. is a buzz word in today’s IT world. This platform provides web based processing where shared resources, software or hardware are provided to the computers on demand basis. In today’s world, each enterprise application is used only in certain period. For example, Employees go and check their company finance portal (for salary details) once in a month and most of the time the site has less hits and not utilizing the infrastructure resources. As most you knowing about Azure is Microsoft cloud platform and it brings business more advantages which includes reduce costs, flexibility, mobility, fully automation and gives time to think about innovation rather than server maintenance.

Note: Microsoft has not released any information on commerce server on Azure and In this article, I am throwing some thoughts on how to keep commerce sever into cloud. This is a non-tested solution and may or may not work for you.

Lifting Commerce Server to Azure

I worked in many ecommerce applications developed using Microsoft technologies like commerce server, SharePoint .NET, etc. Ecommerce business has give more focus on infrastructure setup (especially on scalability, extensibility and security). Business is very concern about the data and execution (fulfilment process). A hour downtime can bring significant loss ($ or reputation or customer loss) to the business. Through Azure, business never face downtime or scale up/out issues. What if business decides to put their commerce sever application in Azure and I feel this can be achievable .

  • VM Role:  Using VM role functionality, we can easily migrate windows based applications to Azure platform. You can host commerce server on Azure VM role, and abstracting the presentation layer to a Azure web role. For existing application, there is some amount of work we have to do here.
  • Security: For PCI compliance, enterprise customers may not be comfortable with storing order & profile information off premise in SQL Azure. For this, I would recommend to go through windows Azure connect (previously called as Project Sydney). This enables customers to connect securely their on-premises and cloud servers. Some of the underlying technologies that are enabling it include IP Sec, IPV6 and Microsoft’s Geneva federated-identity capability. It could be used for a variety of applications, such as allowing developers to fail over cloud apps to on-premises servers or to run an app that is structured to run on both on-premises and cloud servers.
  • Azure VMs are geared for running stateless services that store their state elsewhere, either on-premise, Azure Tables, or SQL Azure. As you are probably aware, Commerce Server makes heavy use of SQL Server for storage, and a SQL Server running in the VM role would not have its data persisted. The solution works if we go with Microsoft connect services but the disadvantage I am seeing is the performance as commerce server running on VM role and database running in private network. Effective using of Azure AppFrabric (caching technique), we can able to gain some performance.

For past few years, Microsoft has pushed many of their applications (office, SharePoint, sql, etc.) to Azure and I feel, in next few years they will migrate rest of the applications to Azure (as they moved from COM based application to .NE based application) and if this happens each and every shop can have a presence in the cloud. I don’t get surprised if PAN shop (near to my house) have their own website portal (www.madhapurpan.com). =

Related Articles


If you like this post, please click on our sponsor advertisement.


Working in SharePoint is very interesting and challenging. Sometimes we end up doing only application configuration (setting up the application ready for development) rather than delivering the functionality. In recent days, I have faced similar problem. I was working on commerce server extended SharePoint kit and changes done to the kit need to be deployed the assemblies in GAC. If I missed redeployed, I am not able to test the code functionality.

I have developed a small and tiny utility to deploy updated assemblies (dll) very easily into GAC. It is simple but cumulatively it has saved lot of time. Here is the screenshot of the tool.

Quick GAC deployer

Click here to download

In order to make this tool work, we have to set three values in configuration file.

  1. assemblyPath –the path of assembly (by default it will be c:\windows\assembly).
  2. dllPath – your application bin folder.
  3. gacUtilPath – GAC Utility path – c:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\Gacutil.exe

That’s all, the tool is ready for usage. Drop me an email if you have any issues with this tool.

Related Articles


If you like this post, please click on our sponsor advertisement.


This blog is continuation to my previous blog – Ecommerce Estimation. In this blog we will discuss how can we break up the modules into components and come up with a ball park estimation figure. Estimations are based on expert judgment and this blog will provide an approach to follow

There are many ways of estimation and few of them are

1. Analogous estimation : This is done on variety of project parameters (like budget, scope, cost, etc) and measure of scale. This is typically a form of expert judgment and mostly reliable if previous project is similar to current project. If you are doing retail ecommerce project for second time, then you may opt this methodology.

2. Use case based model: This technique is used to do estimation based on application use cases complexity (simple, average or complex). The main disadvantage of this approach is that it doesn’t cover all non-functional requirements and most of current projects doesn’t cover all possible use cases. I recommend to go with use case model approach to come up with test effort estimation.

3. Top down estimation: This model gives senior management to control for decision making. Many companies have their own estimation tools and these calculations are derived from previous projects metrics. Note: With this estimation effort variance can come up to 100%, that means an effort estimation of 100 hrs in top-down estimate may go up to 200 hours in actual.

4. Bottom up estimation: This estimation model will give us the ability to get more refine estimate for particular component of work. Here, we will break a task into components and estimate the effort required for the tiny components and cumulating of all components gives overall project estimation. These estimates will be almost equal to actual and may go up to +/- 20% variance.

Lets discuss how can we do commerce server bottom up estimations. Commerce server development mainly contains front end (FE), Components (like pipeline, API access, etc), schema creation, etc. To develop the estimation we have to follow below approach.

  1. Develop factors for the application (mostly you can get them from your previous project or develop new if they don’t exist)
  2. Divide the application into modules/tasks/components.
  3. Define inventory street – to map components to factors and complexities. 
  4. Calculate build and other estimations.

1. Defining Factors: Here are some factors and figures shown are in hours.

Factor Name Description VS S M C VC
ASP.NET to develop & unit test (UT) ASP.NET page 4 8 16 24 30
ASP.NET Component to develop & unit test ASP.NET page with patterns (like MVP, MVC, etc) 8 16 24 32 40
Win forms to develop & unit test win forms 4 8 12 16 20
Business Logic to develop & UT business logic or work flow 4 8 12 16 20
Business entities to develop business entities required for the application 2 4 6 8 10
Data access to develop data access components. 4 8 12 16 24
Interface to develop application interface (web services) to external applications 4 8 12 16 24
Tables To develop tables required for the application 2 4 8 16 32
Stored procedures(SP) To develop stored procedure required for the application (blind rule – 1 table = 4 SP) 2 4 8 16 32
Batch/Service programming to develop & unit test batch or service programming 4 8 16 24 32
Error Handling To develop error handling framework in to the application 16 32 64 80 128
Validation Framework To develop validation framework in to the application 16 32 64 80 128
Caching Framework To develop caching framework in to the application 16 32 64 80 128
Encryption framework To develop encryption framework in to the application 16 32 64 80 128

* Very Simple (VS), Simple (S), Medium (M), Complex ( C), Very Complex (VC)

2. Define Components : I feel this is totally expert task and a novice person can do mistakes. You should have a vision on the entire application and how it works. The goal here not only break up modules into components but also list down the assumptions you made or risks you foresee. For example, If you feel some thing you are not aware or you made an assumption for your estimate (like the third party web services will be ready by before you start developing x component). The accurate estimation comes if you close all risks and assumptions.

3. Build Inventory sheet:  Now let’s bring components, factors & its weights in one sheet. This sheet can be used by the client or SME from your company to validate your estimation. Note: A component can have multiple factors.

Module Task Component Description Factor VS S M C VC Notes
M1 T1 C1 web page ASP.NET 1   2     XXX
        Business Logic       1   YYY

4. Calculate Efforts: Once the inventory is completed – it is simple formula to calculate the efforts required to develop that component. In the example above ASP.NET effort is calculated as 1 * 4 (S) + 2* 16 (M), that comes to 36 hours. At the end of the exercise you will get build efforts but project life cycle contains other phases like plan, analysis, design, test, deploy, project management,etc. I recommend to calculate these phase efforts based on build efforts and this rule may not be applicable for app. packaging projects (like CRM, etc). You have to refer to company metrics to come to exact figures and generally I recommend following calculations

Phase % of Build
Plan

10

Analysis (more external systems integration exists)

20

Design (more external systems integration exists)

75

Build

100

Test & Fix (it will be more if we are going with performance, usability, security testing)

100

Deploy

15

Program Management

15

You may come to tentative figure in your initial round of estimation and this figure will refine once it get reviewed by other SME or whenever the assumption is cleared. Don’t forget to add contingency at the top of the estimate. You might be thinking what is different from .NET applications and the answer is there is not difference in the methodology but the difference is in factors and their weights. Hope you might of gained some knowledge on this topic and If you have any questions or suggestions, drop me an email – kanth @ ravikanth.net.

Related Articles


If you like this post, please click on our sponsor advertisement.


Commerce server profile system is very flexible to allow developers to map the properties to different data sources (active directory and sql server) and this configuration change is totally isolated to calling function and commerce server takes responsibility of pushing/getting the data from multiple sources when any operation is performed. In current ecommerce world, is this functionality enough? then the answer is NO as current ecommerce applications are running on different platforms like SharePoint or silver light and integrated with ERP systems (like SAP or Dynamics Axapta).

On 18th November, Microsoft has released a white paper which provides integration scenario on following items with operation sequence components examples.

  • User profile information shared between Commerce Server and Microsoft Office SharePoint Server (MOSS).
  • User profile information shared between Commerce Server and SAP.

You can read & explore more on this whitepaper by downloading it from Microsoft site and the url is
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=ce5629ad-2473-4c25-8f89-91c8530cd764

Related Articles


If you like this post, please click on our sponsor advertisement.


Follow me on Google+
Add to circles

In 0 people's circles

Sign up for Newsletter