Pressure for All-in-one Hospitality CRM is Building, But None Meet the Demand…Yet

In an industry where companies host 45 to 65 software applications to run the business, Hospitality IT is clamoring for any software package that can support a wider array of important business processes. And, Customer Relationship Management (CRM) is no different. Faced with data silos, sales and marketing departments that do not collaborate, and ever-increasing pressure to convert existing customers and leads into revenue, companies want a system that will do the job and further reduce the application services footprint.

The unfortunate reality is that today there is no single solution that meets every requirement to manage customer interactions and increase guest loyalty… yet. Our competitive analysis of six CRM solutions that claim to serve the Hospitality industry revealed a cross section of what these companies want.

Hospitality Sales and Marketing departments have limited choices for specialized CRMs. The applications we explored were mostly packaged extensions to standard CRM architectures, such as Microsoft Dynamics CRM or . These solutions are deployed via the cloud or as an on-premise solution, or both, and they come in a variety of pricing configurations. This evaluation does not examine pricing and additional configuration costs, which are an unavoidable factor in ANY implementation of this kind.

What Hospitality CRM Shoppers Want

Based on requests from our own clients and the Hospitality CRM offerings in the IT marketplace, we can derive the following priorities:

  • B2B account management (National and Local Accounts)
  • Standard interaction management with 360 degree view of the guest
  • Commercial-grade email marketing tools and direct mail tools
  • Large group and events management
  • POS and Food and Beverage integration (to support 360 degree view)
  • Guest loyalty program management (with customer kiosk)
  • Reporting and analytics, including targeted vs. actual revenue
  • Turn-key integration with other hospitality systems

What Hospitality CRM Shoppers Get

The following table aggregates specific functions of evaluated packages to general business requirements. We ran a subjective evaluation of whether the tool, based on its marketing collateral and/or sell sheets, mostly or adequately delivered the functionality.   Any product evaluation will find that each software vendor plays to their strengths. For example, NewMarket manages catering and events and integration well, while SuiteCRM excels in supporting National and Regional Account management.

Each package has its strengths and weaknesses. The point of this analysis is to lay out the competitive landscape so CRM shoppers can identify candidates that meet immediate needs and future requirements as well. However, no decision can be made without considering external factors such as change management, data quality, and above all total cost of ownership. See “Get Real with your CRM Solution” for more information on these external factors.

The Final Word

The simple conclusion is that no single tool does it all…There is no silver bullet. Depending on the specific needs, hospitality companies will likely continue to host multiple tools to support its own unique ways of running the business. We talked to several companies at Hitec 2010 and learned that they are actually using various combinations of, NewMarket and MS Dynamics CRM to meet all of their CRM needs. You can imagine the opportunities to consolidate!

However, the real recommendation is that the right implementation is the one that meets a base set of requirements and can then be extended through open architecture and/or customization to meet very specific needs. By steadily customizing and configuring the CRM, those additional software packages and processes will drop off the IT management footprint and at the same time make sales and marketing more productive.

Extending your CRM solution with XRM and other development kits offer true opportunities to realize ROI. Consider that your implementation is just Phase One on a strategic roadmap, which will later include functionality to:

  • Integrate more data from other systems to get a better view of customer behavior to make proactive marketing decisions and accurately measure the business
  • Deliver advanced customer insight through previously unavailable analytics
  • Increase user adoption by rolling out must-have functionality

Hospitality IT departments will roll out the red carpet to any one application that can retire multiple software packages and data silos at once.  That carrot is always being dangled before CIO’s and Technology Directors. At this time however, Hospitality-centric CRM’s are not there yet.  Hospitality companies must continue to push vendors to deliver on these promises. As these products mature, more and more options and greater functionality will become available. Until then, select a tool that allows you to realize immediate value from out of the box functionality and then exploit the open architecture and development toolkit to extend functionality.

FetchXML versus Query Expression

Microsoft Dynamics CRM 4 provides two main mechanisms for querying data from Microsoft Dynamics CRM, FetchXML and QueryExpression.  In general, it is recommended to use QueryExpression over FetchXML because of its better performance and strongly typed results.  But, FetchXML is handy when you need attributes from multiple entities in a single query.  This blog will discuss each type of query and provide an example of each to return the same result.

QueryExpression is class based and is easy to use, although you can only query one entity type at a time.  Therefore, if you need to get data from a parent entity, such as a contact, and then get data from a child entity, such as a custom product entity, you have to perform two queries.  First you must retrieve the contact to get access to its attributes, then you must retrieve the product using the contact id that links the contact to the product.  With QueryExpression, you can specify the attributes you want returned, or indicate you want all attributes returned, you can specify “and” conditions or ”or” conditions, and you can specify a sort order.  To execute a QueryExpression query:

  • Call the Retrieve or RetrieveMultiple methods on the CrmService web service
  • Receive a BusinessEntityCollection containing the results of the query

With FetchXML you can query multiple entity types at the same time as long as there is a relationship between the types.  You can retrieve attributes from multiple entities in one query in this fashion. To execute a FetchXML query:

  • Create a fetch string specifying the query and pass it to the CrmService web service’s fetch method
  • The fetch string contains XML, which specifies the query criteria

Example of QueryExpression:

      QueryExpression query = new QueryExpression();
      query.EntityName =;
      ColumnSet columns = new ColumnSet();
      columns.Attributes =
                         new string[] { “contactid”, “lastname”, “firstname” };

      ConditionExpression whereClause = new ConditionExpression();
      whereClause.AttributeName = “lastname”;
      whereClause.Operator = ConditionOperator.Equal;
      whereClause.Values = new string[] { “Jones” };

      FilterExpression filter = new FilterExpression();
      filter.FilterOperator = LogicalOperator.And;
      filter.Conditions = new ConditionExpression[] { whereClause };

      OrderExpression orderBy = new OrderExpression();
      orderBy.OrderType = OrderType.Descending;
      orderBy.AttributeName = “createdon”;

      query.ColumnSet = columns;
      query.Criteria = filter;
      query.Orders = new OrderExpression[] { orderBy };

BusinessEntityCollection retrieved =

Example of FetchXML:

string fetch = @”
   <fetch mapping=””logical””>
       <entity name=””contact””>
            <attribute name=””contactid””/>
            <attribute name=””lastname””/>
            <attribute name=””firstname””/>
            <order attribute=””createdon””/>
                     <condition attribute=””lastname”” operator=””eq””
           string result = service.Fetch(fetch);
   catch(System.Web.Services.Protocols.SoapException se)
            // handle exception

Marketing List Issues in Microsoft Dynamics CRM 4

There are two main issues I have encountered with marketing lists in Microsoft Dynamics CRM 4:

  1. There are limitations in using advanced find to identify contact, account or lead records to include in the marketing list.
  2. Marketing lists in Microsoft Dynamics CRM 4 only store the contact id.

Both make it difficult to use Microsoft Dynamics CRM 4 to create a marketing list and pull product specific data for each item in the list to include in marketing materials, such as letters or brochures.  I will discuss each limitation in more detail below.

Advanced Find

The main problem with using advanced find to identify contacts, accounts or leads to include in a marketing list lies in the fact that advanced find works from the parent entity (contact, account or lead) down to the child entities (products bought for example).  Many times, however, the search criteria for a marketing list needs to work from the child entities up to the parent entity.  For example, you might need to identify a product based on specific criteria and then navigate up the entity chain the find the contact who owns that product.  Using advanced find, you cannot identify a product based on specific criteria and work back up to the contact.

The second problem with using advanced find to indentify contacts, accounts or leads to include in a marketing list is that you can’t compare two records by an attribute value.  For example, if a contact purchased product A on January 1, 2008 and then bought replacement product B on June 6, 2010, you can’t search for Product A and try to find a matching product B based on serial number or some other attribute.  Many real world query criteria for generating marketing lists rely on such complex matching scenarios, which advanced find cannot handle.

Identification by contact ID

Microsoft Dynamics CRM 4 marketing lists only store the contact, account or lead id, no attribute fields.  You cannot modify a marketing list to include other fields, such as serial number, product description, or some other attribute.  This issue arises whenever there is a one-to-many relationship between the contact, account or lead and its child entity.  For example, suppose a customer owns two cars, a red Ford Mustang and silver Nissan Altima.  If some attribute of the Altima, such as the brand of tire on the car, results in the customer being on the marketing list, but the Mustang’s brand of tire would not place the customer on the marketing list, you cannot later run a program that will send a letter to the customer and include specific information about the Altima in the letter because all you have is the contact, account or lead id.  You have no way to determine which car should be used to fill out the letter.


To work around the issues, we used an SSRS report and stored procedure to identify the contact records to include in the list.  We then exported the report results to a comma separated file, which included the contact id as well as specific attribute data for the contacts child entities.  We called a web service to create a marketing list in CRM using the CRM APIs and wrote the attribute data to a database table that linked the marketing list and contact to the correct attribute data.  To process the marketing list, we got the marketing list and looped through the contacts.  For each contact record in the marketing list, we pulled the attribute data from the database table and were then able to include that data in marketing materials.

“Get Real” with your CRM solution

A couple years back, Gartner Group released a CRM research study that predicted “through 2006, more than 50 percent of all CRM implementations will be viewed as failures from a customer’s point of view….”

Sad to say but things are not much better today! Retaining and enhancing customer relationships remains a top 5 business issue on the Gartner CIO Agenda. It is critical, especially in today’s economy, that companies continue to invest in managing its most valuable asset, its customers. According to AMR Research, companies are investing in CRM to the tune of $14 billion dollars a year.

Is my CRM Solution Successful?

So, you have made your investment and implemented your CRM tool. Are you part of the 35% of successful deployments, or sadly the 65% that have fallen short?

If there is any doubt where your company falls, consider the following questions…

  • Are you still limited in your ability to grow your top tier accounts?
  • Are your national accounts meeting their revenue commitments?
  • Are your people using Excel and Outlook to fill gaps that your CRM tool is not meeting?
  • Can you track and measure your sales team performance? Are they closing activities and, more importantly, deals?
  • Can you assess the effectiveness of your marketing spend and campaigns? A CRM worth its salt should have great marketing capability. Your CRM should seamlessly integrate with a commercial grade marketing vendor, like email marketers and direct mail vendors. These vendors provide essential functionality including email tracking and spam prevention, integrate MS Word mail merge and direct marketing capabilities, and campaign budget management.  The bad news is that CRM solutions rarely offer this level of marketing functionality out of the box.
  • Is your CRM system a data silo? Is your customer data not feeding other enterprise tools, or are you not interfacing with transaction data to measure projected revenue to actual revenue?

If you answered yes to any of those questions, your implementation may be heading in the wrong direction. Now that you realize the hard reality, how did you right the ship?

  • Perhaps you drank the ASP/SaaS model kool-aide. The cloud is a great and cost effective solution…however, “Success not Software” does not mean “No Risk”. While the promise of speed to market with limited CapEx layout is attractive to everyone, the shortcuts you take early on in your deployment will cost you double down the road.  I have spoken with many people that have struggled to scale their CRM solution to meet the changing needs of their business and is cost prohibitive to deploy across the enterprise.
  • You assumed that CRM success comes out of the box. CRM software is usually designed for many types of business. To make the software work for you, no matter what the vendor tells you, there will be configuration and some customization to meet the unique needs of your industry. CRM packages are designed to meet the needs of the largest common denominator. A Product screen for an insurance company will not look like the Product screen for a hospitality company.
  • You did not focus on critical factors that drive user adoption such as, familiar interface, standardized processes, organizational readiness, change management, or ease of use.

Get on the Road to Recovery

Determining that your CRM implementation has problems may be instant or it may materialize over time. Regardless, you must analyze the situation and determine your rescue strategy. So, what can you do now?

Treat your CRM system as the critical Enterprise solution that it is. You would not implement a new accounting system without first understanding accounting practices across the organization, identifying integration points, and dealing with change management. It is important to note that the success factors for CRM implementations rest largely outside the scope of the software itself. To establish the best implementation strategy, you must

  • Identify the Organizational impact early on and build change management strategy and tools accordingly.
  • Get executive buy-on on the new strategy and include stakeholders from across the organization (Marketing, Sales, Finance, Customer Service, IT)
  • Pay attention to data quality, specifically data governance practices and procedures. There is nothing more detrimental to user adoption than bad data.
  • Standardize AND SUPPORT your business processes across the enterprise
  • Highlight benefits to sales team often (i.e. up-sell, cross-sell, single system, clean data, 360° view of the customer)
  • Understand your industry-specific CRM needs and ensure your can configure screens and workflows to match
  • Address the complexities of integrating into your enterprise architecture with multiple legacy data silos and even offline processes
  • Provide the right customer intelligence with dashboards and robust reporting to the right people, at the right time, to effect change

Carefully consider the points above and invest in CRM tool experience when designing and implementing your solution. Don’t fall into the trap of trying to learn a new tool on the job! There are many functions and features available within the package, and outside through the open source collaborative environment. Bending your business processes to meet your software will affect user adoption.

Look for a CRM partner with a broad and proven resume of integration and enterprise information system implementations. If you treat your CRM implementation like the critical enterprise application it is, you are more likely to be part of the 35% of CRM implementations that succeed!

Step by Step: Creating Microsoft Dynamics CRM 4 Reports Using Silverlight, RIA Services and VisiFire

I recently read an article on how to build advanced custom CRM reports using ASP.NET and Silverlight.  Since it was using Visual Studio 2008 and Silverlight 2, I decided to write a more updated version using Visual Web Developer 2010 Express and Silverlight 4.  Also I decided to make the report work with the on-premise version of CRM 4.0 and as you will see it looks very similar to one of the dashboards enabled for the on-demand version of CRM 4.0.

First you will need to make sure you have the necessary tools installed to build a Silverlight application.  I decided to go with Visual Web Developer 2010 Express because it is free and Silverlight 4 Developer tools for VS.NET 2010.  You will also need to download VisiFire Once you have your development environment setup you can follow these steps to easily create a new dashboard for your on-premise CRM instance.

Figure 1

Figure 1

Step 1: Create a Silverlight 4 Project.

Open up Visual Web Developer 2010 Express and select New Project from the Start page or File menu.  Expand the Visual C# project templates and select Silverlight.  From the Silverlight project types, choose Silverlight Application (see Figure 1).  Name your project CrmSalesPipelineDashboard and click OK.

Figure 2

Figure 2

Now you will see a popup which allows you to choose how to host your Silverlight application. Choose to host the Silverlight application in a new Website with type ASP.NET Web Application Project (which should be the default).  Choose Silverlight 4 and check the Enable WCF RIA Services option (see Figure 2).  After you click OK it will create your two new projects (CrmSalesPipelineDashboard and CrmSalesPipelineDashboard.Web) in one solution.

Step 2:  Add an ASP.NET Entity Data Model

Figure 3

Figure 3

Add a new Models folder to the CrmSalesPipelineDashBoard.Web project where you can store your data models.  Right click on the new Models folder and select Add New Item which will open a dialog box.  Select the Data section under Visual C# and select the ADO.NET Entity Data Model.  Change the name to CrmModel.edmx and click Add (see Figure 3).

Figure 5

Figure 5

Figure 4

Figure 4

Now you will see the Entity Data Model Wizard popup dialog.  Select Generate from database and click Next (see Figure 4).  Either create a new Connection to your CRM database or choose an existing one from the dropdown list.  After you click Next, select the StringMap table from the list of Tables.  Then select the Opportunity view from the list of Views.  Leave the default options checked and change the Model Namespace name to CrmModel and click Finish (see Figure 5).  The new model window will be displayed with the new StringMap and Opportunity entities.

Build the solution to make sure everything is still in order.

Step 3: Add a Domain Service Class

Figure 6

Figure 6

Add a new Services folder to the CrmSalesPipelineDashboard.Web project where you can store your services.  Right click on the new Services folder and select Add New Item which will open a dialog box.  Select the Web section under Visual C# and select the Domain Service Class.  Change the name to CrmDomainService.cs and click Add (see Figure 6).

Figure 7

Figure 7

Now you will see the Add New Domain Service Class popup dialog.  Check the checkbox by the Opportunity and StringMap entities, uncheck the Generate associated classes for metadata and click OK (see Figure 7).

Insert the GetSalesPipeline method (see Listing 1) after the GetStringMaps method in the CrmDomainService class.

Listing 1
//Return the total estimated value for each sales pipeline step
public IQueryable<SalesPipeline> GetSalesPipeline()
IQueryable<SalesPipeline> salesPipeline = from opportunity in this.GetOpportunities()
join stringMaps in this.GetStringMaps() on opportunity.StatusCode equals stringMaps.AttributeValue
where stringMaps.AttributeName == "statuscode" && stringMaps.ObjectTypeCode == 3
group new { opportunity, stringMaps } by stringMaps.Value into g
where g.Sum(o => o.opportunity.EstimatedValue).HasValue && g.Sum(o => o.opportunity.EstimatedValue).Value > 0
select new SalesPipeline { SalesPipelineStepName = g.Key, TotalEstimatedValue = g.Sum(o => o.opportunity.EstimatedValue).Value };

return salesPipeline;

Insert the SalesPipeline class (see Listing 2) after the CrmDomainService class.

Listing 2
public class SalesPipeline
public string SalesPipelineStepName { get; set; }
public decimal TotalEstimatedValue { get; set; }

Build the solution to make sure everything is still in order.

Step 4: Add the Pie Chart to Silverlight

Download the latest version of VisiFire ( and unzip it to C:\VisiFire.  Add a references to the both the FJ.Core.dll and SL.Visifire.Charts.dll to the CrmSalesPipelineDashboard project.

Insert the XAML necessary to display the pie chart on the page (see Listing 3).

Listing 3
<vc:Chart Name="salesPipelineChart" xmlns:vc="clr-namespace:Visifire.Charts;assembly=SLVisifire.Charts" View3D="True" Theme="Theme1" Width="800" Height="400">
<vc:Title Text="Sales Pipeline" FontFamily="Verdana" FontSize="20" FontWeight="Bold" />
<vc:DataSeries RenderAs="Pie" DataSource="{Binding Data, ElementName=salesPipelineDomainDataSource}">
<vc:DataMapping MemberName="AxisXLabel" Path="SalesPipelineStepName" />
<vc:DataMapping MemberName="YValue" Path="TotalEstimatedValue" />
<riaControls:DomainDataSource Name="salesPipelineDomainDataSource" xmlns:riaControls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.DomainServices" xmlns:my="clr-namespace:CrmSalesPipelineDashboard.Web.Services" AutoLoad="True" d:DesignData="{d:DesignInstance my:SalesPipeline, CreateList=true}" QueryName="GetSalesPipelineQuery" Width="0" Height="0">
<my:CrmDomainContext />

Build the solution to make sure everything is still in order.

Finished Pie Chart

Finished Pie Chart

Step 5: View the Sales Pipeline Pie Chart

Run the solution by pressing F5 and view the pie chart in the browser.  You will notice that out-of-the-box VisiFire allows you to click on the different pieces of the pie to pull them out.


Other Resources

If you are interested in learning more about .NET RIA Services and how to use them in Silverlight I found these videos helpful:


We here at Edgewater have had a surprising number of customer conversations recently about skyrocketing CRM costs associated with a very popular hosted CRM package (that shall remain nameless).  In many cases, the conversation goes…

“The CRM initiative was driven by the business (which is great), and initial costs were palatable.  One or two years down the road: deep discounts are a thing of the past and the seat count has doubled or tripled.  Looking to the future all that can be seen is increasing cost; and there are not a lot of options for containing those costs.”

 An obvious question comes up – Can you justify these costs for a CRM platform?  CRM has tremendous benefits of course if it’s really leveraged, but does the annual cost of admission have to be so high?

Our answer is no.  You do have other platform options.  Quite frankly, the best CRM solutions are very similar in look and feel, are very configurable, and have almost identical capabilities.  We’re helping lots of customers adopt MS Dynamics CRM which we’ve found to be a very strong solution.  And it’s a lot less expensive.

Some good news: if you’re in this situation, you’ve probably got a really good understanding of what can make CRM successful at your organization.  And in most cases it has very little to do with the software.  Maybe there are things you’d do a little differently if you could go back.  Maybe a shift is an opportunity. 

If you’re thinking about easing that annual renewal burden but are concerned about how to go about it, here are some things to consider.


By now you know that using the web based configuration/admin interface is relatively simple.  You spent time up to now understanding how CRM should work, what your custom objects look like, how they interact.  That’s the hard part.  And you’ve probably learned some things along the way.  If you could do it over again, you’d x, y, and z.  As opposed to looking for a tool that will port your existing configuration, spend a few days building out your configuration and fixing your mistakes with a new tool.  It can be quite painless.


You’ll need to convert of course.  But the good news is that you should (hopefully) have all of that data in one place (your CRM solution).  Your initial adoption may have (should have in most cases) involved getting customer data out of multiple systems which is tough.  The great news is that you probably don’t have to do that again.  And there are low cost options for loading it into a less expensive solution.


One of the biggest problems with any CRM implementation is low user adoption.  So if you’re facing high renewal costs – that actually good news!  And what would rolling to a lower cost solution look like?  Pretty simple actually, it’s not like client/server days.  Rolling a new web application out is as simple as sending a URL.  And rolling an outlook-integrated client is a pretty simple effort if that’s your preference.  Everyone needs to use email after all.  You’ll also be surprised at how quickly your users will adapt to a new tool – again, the best CRM products are very similar.

Reporting and Integration

You may have also spent quite a bit of time with reporting and integration.  These things are obviously extremely important to successful adoption.  So it might seem like a mountain of work – but think about where you spent a good deal of your time.  Data field identification and mapping.  If you’ve got a good set of requirements, start with that document, add another column to your mapping tables (and make sure you don’t change your requirements).  You can start right with implementation.

If the TCO for that very popular hosted CRM package has got you reeling, why not look at other options?  It’s not going to be any less expensive next year.  Now you know what it takes to make CRM successful.  You can leverage the good work you recently completed to get yourself on a more affordable platform.  Focus on configuration, data, adoption, reporting, and integration when planning your re-platform.  There’s no need to start from square one.  Next year at renewal time, you’ll be in a whole lot better situation.

Of course, it would have been nice to do a complete TCO analysis in the first place.  But that effort probably didn’t make your budget last year. J