We recently deployed a five-node CRM 2011 topology using Windows Azure IaaS with the following objectives:

  • Understand how a multiple node CRM setup can be provisioned using Windows Azure IaaS. Specifically, how the networking capabilities offered by the Windows Azure platform (i.e. stateless load balancing) map to the CRM requirements.
  • Develop an automated way to provision and de-provision a CRM setup. This is not only useful for dev and test scenarios, but also for production scenarios where it is notoriously difficult to conduct capacity planning before acquiring the necessary hardware. For example, it is hard to know upfront what CRM functional building blocks (aka CRM roles) the business stakeholders will want to focus on, such as async processes, sandbox, reports, etc. By dynamically scaling out the “needed” features on demand, we can enhance the business agility of the CRM.
  • Offer our customers an educated choice between CRM Online (no setup costs but less control) and CRM On-Premises (extensive setup costs but complete control).
  • Take advantage of hybrid apps that combine CRM capabilities with Windows Azure services, such as Windows Azure Active Directory, mobile services, etc.

Read More…

I recently completed a large document management system on SharePoint 2010 that used FAST Search and claims-based authentication. The client wanted to secure and limit access to customer-specific documents based on data coming from their CRM system.

We decided to implement a custom claim provider that would query the CRM system at login for customer claims based on the user ID. On upload (based on the customer that was assigned to the document), we used the content organizer to route the document to the correct site, library and folder based on the organization and security rules that we had. Each library had a claim for the customer assigned to it so only users with that claim could view the documents in the library. We would use search for the UI so that the users had a single place to find and view the documents. Sounds simple, right?

It should’ve been.

Unfortunately, the implementation was anything but simple. From the beginning, we hit the core limits of SharePoint 2010, FAST and Claims. Now that we’ve made it to the end, I want to talk about the limits we ran into and steps you can take in your design to avoid them. Read More…

Microsoft Dynamics CRM 2011 has come a long way from its predecessors in many areas.  For companies using both CRM 2011 and SharePoint 2010, the improvements can be appreciated even more since Dynamics CRM 2011 has native SharePoint 2010 document management capabilities right out of the box.

This functionality is apparent in a couple of different places in the CRM 2011 web interface.  First, there is a page under the Settings section for Document Management.  Second, some entities will have a Documents area available on their forms.  Please see the screen shot in Figure 1 below. (Click on any image to see full-size.)

Figure 1 - The Document Management page in Microsoft Dynamics 2011

For this write-up, I’ll be focusing on the Document Management page and the required steps for configuring access to SharePoint 2010 as well as installing the SharePoint List Component.

Read More…

When it comes to building distributed systems, one of the most important patterns is the message broker. But what’s a message broker?

A message broker is an architectural pattern for message validation, message transformation and message routing. It mediates communication amongst applications, minimizing the mutual awareness that applications should have of each other in order to be able to exchange messages, effectively implementing decoupling.

The practical utility of this construct has been proven in many distributed systems over the years.  Within the context of Windows Azure, this pattern is extremely useful for posting messages from within your Web Role implementation to perform some asynchronous work at a later time. Often, this is done to keep the user interface responsive. Other times, this is used just to delay some processing to another time.

Read More…