CRM Will Become Consumer Relationship Management II

CuttlefishThis piece expands on the preceding cuttlefish analogy loosely taken from a PBS NOVA show “Kings of Camouflage”. Just as cuttlefish were driven to develop intelligence to deal with a challenging ocean environment, so will CRM need to evolve to managing the total consumer relationship to keep the corporation alive in a real-time social web environment. To oversimplify (and irritate all of the product vendors out there), CRM now essentially manages the sales pipeline (i.e. the food supply of the corporation). Of course there are second and third derivative benefits, such as managing sales force statistics and marketing effectiveness, but the prime directive is essentially feeding the primal corporate beast.

This matches the analogy to any cuttlefish, food first (skip reproduction, not something I want to envision for corporations). Second is defense within the ecosystem, as it is best not to be eaten it you want to be successful. Before we can dive into the evolutionary changes that will occur to CRM we need to look at the environmental drivers of natural selection. I will break the topic into three pieces; a loose description of the ecosystem, how typically corporations handle the external ecosystem, and why it matters.

The ecosystem has become much more complex with the advent of the Social Internet, with the resultant time compression of impression dissemination throughout the total consumer population. Combine the increasing number of competitors, regulators, and special interest groups (predators), with an increasingly informed consumer (food); life for a corporation looks as difficult and precarious as in any primeval cuttlefish sea. A plethora of content starved, advertising fed Web sites are an archival repository of free and unedited consumer opinion, comparison, recalls, pictures, demonstrations, and any combination(s) of products and services (real and imagined). Social media provide the neural synapses of communication for all of this (dis)information to consumers, special interest groups, media, and regulators. Time and thoughtful editing have been successfully disintermediated from the environment.

Like a cuttlefish, most corporations swimming in the Web, have a marketing group who may (or may not) perform market research, target customers, and report market direction. Legal, finance, and engineering/development groups usually track regulation and compliance. Public relations will handle corporate communications. Naturally, all of this will be done independently in the organization, essentially in a vacuum. Some efforts will not even have a persistent data repository or memory, and likely none of it will be correlated and indexed for learning and re-use. In fact, the supporting corporate “senses” are rudimentary and essentially manual (endangered species material to say the least).

Why does it matter now, if it has not to date? Because the Web ecosystem itself has changed with the integration of social media. A Twitter or Facebook reference on any SmartPhone can direct customers to a YouTube video of your company’s semi-transparent exercise pants, its signature product. Even better, an ambitious DA has decided to round-up your customers for indecent exposure after “Mothers for Decency” (an advocacy group) cite your product for contributing to the corruption of minors (cash contributions abound for the DA and “Mothers for Decency” from concerned citizens). Federal and State regulators contact your warehouse in LA regarding your violation of garment content labeling laws with respect to importation and distribution. Your successful corporation is now on full display in the Web ecosystem for predators and number one on the endangered species list (cuttlefish extinction event).

As ridiculously contrived as the example is, the potential is obvious and needs to be addressed. Natural selection in the market will force corporations to evolve and the most successful will prosper. I contend the current corporate IT system most apropos to evolve to act as a repository to consolidate and index is CRM. CRM systems are by their nature flexible to extension and for the most part the latest and most up-to-date addition to corporate IT. Ultimately, this environmental information pertains to all levels of customers; past, current, and potential, a true universe of consumers.

Next we will look at some natural extensions and architectures to evolve.

Microsoft Dynamics CRM Polaris

In  December  2012,  Microsoft  released  their  next  interim  release  to  significantly  increase  the  functionality  of  Dynamics  CRM.  Microsoft  introduced  a  brand  new  look  and  feel  in  their  user  experience  (UX)  which  they  call  the  “Flow  UX.” They’ve  given  this  overall  release  the  code  name  “Polaris”  (after the star of the same name).

Microsoft  has  invested  a  great  deal  of  time  enhancing  CRM  to  bring  it  into  today’s  technology  age.  The  flow  of  the  sales  process  has  been  drastically  refreshed  and  is  much  more  intuitive. They have also spruced up the service case entity. The following is a review of the UX improvements:

  • Lead,  opportunity,  account,  contact,  and  case  entities  have  a  new  UX:
    • Pros:
      • Overall,  the  flow  within  and  between  the  entities  feels  a  lot  easier  and  more  intuitive
      • Within  lead  and  opportunity  entities,  there  is  now  a  built  in  set  of  sales  stages  and  sales  steps  to  help  guide  one  through  the  sales  process  and  an  equivalent  Service  stages/steps  in  the case entitypolaris graphic 1
      • There  is a built in social feed,  a type of Facebook-like conversation flow which  can  include  Yammerpolaris graphic 2
      • Creating tasks and phone calls got a lot easierpolaris graphic 3
      • Viewing and creating notes is easierpolaris graphic 4
      • Data  is  automatically  saved  upon  closing  a  record  or  every  30  seconds
      • Bing  Maps  integration  is  included  on-scree
      • Skype  support  is  imbedded  to  auto-dial  outgoing  calls  (by phone or Skype to Skype… a Skype account is required)
      • The  navigation  side-bar  is  automatically  minimized,  but  still  accessible
      • Ability  to  revert  to  the  classic  screen

polaris graphic 5

      • Existing  Dynamics  CRM  2011  Online  users  can  choose  to  opt-in  to  the  new  UI  –  it  is  not  forced  (but once opted in, the conversion con mentioned below adjusts permanently
    • Cons
      • Conversion  from  lead  will  now  automatically  create  an  opportunity  record  whether  you  want  to  create  one  or  not
      • There  is  no  ribbon  access  on  the  new  form  without  completely  reverting  to  the  classic  formpolaris graphic 6
        • Cannot create of any new, related record (such as an activity). The  +  sign  add-option  works  somewhat  but  is  clunky  (but is not available at all for entities
        • No  recalculate  option  for  opportunities
        • No  “Add  to  Marketing  List”,  “Follow”,  “Run  Workflow”,  or  “Start  Dialog”  options  along  with  other  missing  options
      • The  new  sales/service  stages  and  steps  are  one-size-fits-all  and  there  is  no  ability  to  make  them  required
      • There  is  no  auto-conversion  of  classic  forms  into  the  new  format
      • Jscript  is  not  available  on  the  new  forms  OnLoad,  OnSave,  or  OnChange
      • Auto-saving  of  data  becomes  a  training  issue  not  to  adjust  records  for  “demonstration  purposes”

In addition to the UX changes above, Polaris included some additional changes:

  • Browser  support  for  Firefox,  Chrome,  and  Safaripolaris graphic 7
  • Multiple  organizations  are  available  in  a  single  deployment  without  having  to  pay  for  additional  licenses
    • A  potential  application  would  be  to  have  test  and  production  organizational  instances
  • The  Resource  Center  has  been  removed  from  the  main  left-hand  navigation  menu

Presently,  Microsoft  has  made  the  availability  of  Polaris  to  CRM  2011  Online  customers  only.   If  you  have  an  on-premise  implementation  of  CRM,  the  Flow  UX  won’t  be  available  until  the  release  of  CRM,  code  named  “Orion”  coming  out  sometime  in  Q3  2013.   Until  then,  on  premise  users  can  at  least  experience  the  browser  updates  via  Update  Rollup  12.

Overall,  the  Polaris  release  is  a  good  next  step  forward  and  will  help  in  combatting  some  of  the  weaknesses  of  the  classic  UX  as  compared  to  some  of  Microsoft’s  competitors.   For  organizations  already  accustomed  to  using  Dynamics  CRM,  some  of  the  drawbacks  in  the  new  Process  UX  may  present  some  challenges.   Organizations  new  to  Dynamics  CRM  may  not  notice  all  or  any  of  the  drawbacks,  depending  on  their  needs.   Generally  speaking,  it  feels  like  there  are  several  additional  components  that  Microsoft  would  have  included  but  decided  to  postpone  to  a  later  date.   What  exactly  these  were,  I  hope  will  be  additional  activity  options  and  putting  back  in  the  loss  of  some  of  the  ribbon  options.   We  will  have  to  wait  for  Orion  to  find  out  for  sure.   In  the  meantime,  Polaris  provides  many  new  opportunities  to  provide  customer  relationship  management  than  we  had  before.

It’s tax season….the IRS does not have to be the only ones auditing!

Enabling auditing is a quick and effective way to help ensure data integrity.

Have you ever had a Sales Rep ask who changed the status of a record?

Have you ever wondered who deactivated a large set of account records?

These types of questions and hurdles can easily be answered through auditing.

Turn on auditing in Microsoft Dynamics CRM:

You can either:

  • Navigate to Settings, System, Administration, System Settings, Auditing tab
  • Navigate to Settings, System, Auditing, Global Audit Settings

Click the Start Auditing box then select the areas where you wish to enable auditing. You can hover over the area names such as “Common Entities” to see a list of the entities included.audit graphic 1

You also have the choice to customize which entities you would like to audit. Open the solution, click on the name of the entity and select “Auditing”.

audit graphic 2

Be sure to read the fine print! When you select Auditing, all fields within the entity are being audited by default.  There are two options to disable fields.

Option 1: You can open each field that you do not want audited and click disable auditing.

audit graphic 3

Option 2: You can select multiple fields on the entity and select ‘Edit’ and you can change the status of auditing per field there as well.

audit graphic 4

audit graphic 5

Reviewing Audit History:

Navigate to the record, on the left side toolbar click Audit History.

audit graphic 6

This view list the date a change was made to the record, who made the change, the event which occurred, the name of the field changed, the old value and the new value. In the example below, the Business Phone was changed from 904-555-1212 to 904-222-8888 and an extension was added which was previously blank. The change was made by Ashley Kleeman on 4/15/2013 at 12:06 pm.

audit graphic 7

Review Security Roles:

Review security roles to ensure users have the appropriate access to view audit history. Open the security role, click on the Core Records tab and you will see the Audit related buttons at the bottom of the page under the Miscellaneous Privileges section. The average user only needs access to “View Audit History”.

audit graphic 8

Trigger Based Marketing with Dynamics CRM 2011


Creating and maintaining profitable customers is the main aim of business. Therefore, customer satisfaction leading to profit is the central goal of hospitality marketing. In the hospitality industry, the marketing department tends to be responsible for both Business-to-Consumer (B2C) and Business-to-Business (B2B) marketing.  The marketing team needs detailed data on prior leisure and business guests to successfully target marketing campaigns to the appropriate audiences.

The main purpose of this article is to discuss B2C marketing and in particular a process called Trigger based Marketing in Microsoft Dynamics 2011.

What is trigger based marketing?  For the purposes of this article, trigger based marketing is defined as consumer profile or stay data meeting the criteria of a marketing list for an active campaign. This active campaign then processes an e-mail blast to the recipients of the marketing list on a scheduled and automated basis.


Assume the requirement is to create a process that allows for the automation of trigger based campaigns which, in this case, means guest satisfying particular marketing criteria.  This requirement of automating trigger based campaigns is dependent on daily matching and merging of guest data to make the guest unique (the process of ensuring a guest is unique will be discussed in a separate blog). The following are potential trigger based campaigns:

  • Driven by check-ins – “Welcome”
  • Driven by check-outs – “Thanks for Staying”
  • Reactivation
    • “We miss you!”
    • Requires guest stay history
  • In-house guest campaigns
    • Loyalty related
    • Requires guest stay history

So, the next question becomes, “Once the triggered campaign requirement is satisfied how does the e-mail blast execute on a scheduled basis?” To satisfy this requirement a third party marketing integration product such as ExactTarget, CoreMotives, or ClickDimensions can be used.  These are just some third party marketing integration products for CRM 2011, there are additional products out there.  Most of these third party marketing add-ons tend to have Application Programming Interfaces (APIs) available that can be programmed. In this particular instance, ExactTarget and the ExactTarget API were used to achieve the requirement of executing the e-mail blast on a determined schedule.


The processes developed contain a combination of manual and automated processes to complete the triggered e-mail process.

Manual Processes

  • STEP 1: Marketer contacts advertising company to create art design
  • STEP 2: Approved art design is converted to HTML format
  • STEP 3: Receives completed HTML
  • STEP 4: Prepare website for marketing campaign with website design company
  • STEP 5: Create an e-mail for each triggered e-mail process in ExactTarget
  • STEP 6: Create a dynamic marketing list for each triggered e-mail scenario
  • STEP 7: Create a campaign for each triggered e-mail scenario
  • STEP 8: Create an ExactTarget automated send record for each triggered e-mail scenario
  • STEP 9: Create an application configuration record for each triggered campaign

Automated Processes

  • STEP 10: Custom application runs at a schedule time on a nightly basis and performs a lookup against active campaign configuration records.  Deactivated campaign configuration records will not be executed against.  While this application will run on a nightly basis by default, it will use the configuration record for each active triggered campaign to determine the appropriate schedule (daily, weekly, monthly) it needs to run at for the automated campaigns. For daily processing, the custom application will run every night at a given time.  For weekly processing, the custom application will check the day of each week of the current day and compare it to the list of days of the week selected in the configuration record. If the current day of the week matches any of the selected days of the week in the configuration record, it will run.  For monthly processing, the custom application will run on the date selected on the configuration record. Therefore, the custom application will run on the exact same day each month. The custom application is setup and scheduled using the windows task scheduler.
  • STEP 11a: Create a copy of the dynamic marketing list as a static list
  • STEP 11b: Compare the new static list created in the step above to the static control group list and removes the contacts matching in both lists from the static marketing list, which is then used as the list to process the e-mail blast
  • STEP 11c: Create a recipient record for each daily email blast and then the recipient record will be associated to the marketing list attached to the campaign
  • STEP 11d: Associate the recipient records to the appropriate send record designated for each campaign
  • STEP 12: Results from the email blasts will be processed as ExactTarget response activity type records directly into CRM against the guest profile record

metesh email process graphicCONCLUSION

In conclusion, while this is only one solution of meeting a requirement to process triggered campaigns using Dynamics CRM 2011 and ExactTarget,  other solutions can be created using Dynamics CRM 2011 and other third party marketing integration products.

Why pay for CRM when I have Excel?

The Collaborating Game

“Software #1, are you available in the cloud?”

Someone once asked me, “Why should I pay good money for CRM when I have Microsoft Excel® and a shared folder?”  Well, that is a valid question.  It is true that Excel has features that would allow you to track information about their customers/clients, contacts, prospects, marketing events, etc.  You could easily have one workbook for all of these or separate workbooks.  You could even go to the extreme of hiding certain columns or rows and locking it down if those shouldn’t be seen by others.  Instead of emailing it out, it could be placed on a shared folder or someplace where everyone could have access to it.  This would definitely save you money…

What CRM provides is not just a way to spend money, but a way to save time and help support your business in ways that many don’t consider.

There are many ways that any CRM would make a value-added investment. Two of the foremost ways are: 1) A CRM connects and relates different records together as a part of the normal way the data is entered. You don’t have to remember to do this… it prompts you to do it! 2) It helps you remember to do activities you might have forgotten to do or document.

Let’s dissect Microsoft’s Dynamics CRM® in some more detail and understand some of the most important ways it offers you a return on your investment!

“A picture tells 1,000 words…”

The human mind can more quickly interpret and make decisions when seeing a picture than when reading.  This is why CRM has built in Dashboards to help get a visual understanding of your data.  You can analyze and drill down on your data graphically or quickly get to the underlying data too.


Available in the cloud or on your desktop!

CRM is available when and where you need it. You can work how and when you want.  As of the December 2012 release, it is now even available on web browsers other than Internet Explorer so you may use it in the cloud the way you want to!

Art Blog Picture 2-01

Automatic associations/relationships between records

CRM is all about relationships… it is designed to prompt you to specify them.  No more wondering which account is connected with an opportunity or prospect.  Knowledge is power! Here are just a few of the related relationships:

Accounts related to one another:

Art Blog Pic 2

Opportunities related to an account:

Art Blog Pic 4

Contacts related to an account:

Art Blog Pic 5

“I totally forgot to do that…” or “I didn’t have time to do that…”

Forgetful?  Limited time?  Don’t worry – it happens to everyone.  CRM’s Workflows can automate tasks to make you more efficient.  It can also provide reminders for you so something is not overlooked.  You can always adjust them or make new ones too…

Art Blog Pic 6

Get everyone on the right page

CRM allows you to have multiple custom screens so that only the most appropriate layout and fields may be seen by a user… you can have multiple views of records too!

Art Blog Pic 7

CRM uses Dialogs to provide scripts so that users are all following the same process and/or asking the same questions

Art Blog Pic 8

Provides a medium to track back results based on activities

Ever launched a marketing campaign and you don’t know if it was worth the money?  CRM allows you to connect related responses to your campaign along with the prospects and opportunities it generates.

By following the opportunities to wins, the revenue generated relates back to the campaign allowing a 360-degree picture of the work

Successful campaigns can be duplicated to bring in more revenue and less successful campaigns can be retired to not waste precious time and resources on those rotten ventures…

Art Pic 9

As you can see, CRM can bring value and Microsoft Dynamics CRM has some of the greatest value-providing ways to help you do more business with less time and waste.  Do you miss your excel though? Not to worry; you can still have your Excel!

At any time, you can export the data from CRM to Excel

Art BLog Pic 10

Now you decide… Would you consider paying for CRM over just using Excel?

Microsoft Dynamics CRM – Querying Data Using Late Binding versus Early Binding

200255412-001Although Microsoft recommends using early binding over late binding in Microsoft Dynamics CRM® 2011, my experience is that querying data is faster when using a late binding approach.

I demonstrate this by using the following three approaches:

  • Early binding
  • Late binding
  • A mix of early and late binding.

My tests were performed using an on-premise environment. The query was to extract over 300 thousand active accounts. (By default, Dynamics CRM 2011 restricts the number of records to 5000. In order to retrieve more, requires enabling the registry setting, TurnOffFetchThrottling – refer to for more information)

Approach – All Records Time Elapsed
1 – Query all using Early Binding – CreateQuery<Account>() (seconds): 43 (milli): 382
2 – Query all using Late Binding – RetrieveMultiple (seconds): 23 (milli): 263
3 – Query all using Late & Early Binding – CreateQuery(“account”) (seconds): 37 (milli): 101
Approach – Specific Account  
4 – Query account using Early Binding – CreateQuery<Account>() (seconds): 1 (milli): 142
5 – Query  account  using Late Binding – RetrieveMultiple (seconds): 0 (milli): 203
6 – Query  account  Late & Early Binding – CreateQuery(“account”) (seconds): 0 (milli): 280
7 – Query account using Early Binding – Retrieve (seconds): 0 (milli): 406
8 – Query account using Late Binding – Retrieve (seconds): 0 (milli): 128

The above results show that the late binding, approach #2, when retrieving multiple records, is the fastest approach. The above results also highlight that, when retrieving, a specific account by its unique identifier, the late binding approach also out-performs the early binding.

In addition to the above tests, I also compared the performance of returning all columns versus only a few.

  • For early binding, the number of columns returned is controlled in the LINQ select statement

var accounts = from c in orgSvcContext.CreateQuery<Account>()
where (c.StateCode.Equals(“Active”))
select new Xrm.Account
{Id = c.Id,
new_Country = c.new_Country

  • Changing the number of columns did not affect performance that greatly.
  • For late binding, specifically, in the case of Approach #2, RetrieveMultiple, changing the number of columns greatly affects performance.
    • Controlling columns returned is accomplished by the QueryExpression Columnset property.
    • In my tests, when setting  Columnset to true, I actually encountered a timeout exception. (Note: the timeout depends on the number of records that are returned. In my case, returning over 300 thousand put too large a demand on the query.) The following error can be seen in the event viewer, located on the CRM server.

Log Name:      Application
Source:        MSCRMPlatform
Date:          8/12/2012 5:00:57 PM
Event ID:      17972
Task Category: None
Level:         Warning
Keywords:      Classic
User:          N/A
Computer:      crm2011server
Query execution time of 16.7 seconds exceeded the threshold of 10 seconds. Thread: 14; Database: crm_tst_MSCRM; Query: select
“account0”.Address1_FreightTermsCode as “address1_freighttermscode”
, “account0”.Telephone3 as “telephone3”
, “account0”.new_BookingSales as “new_bookingsales”
, “account0”.new_CompanyPeople as “new_companypeople”

Query all active accounts

Approach 1 – Query all using Early Binding – CreateQuery<Account>()

var accounts = (from c in orgSvcContext.CreateQuery<Account>()

where (c.StateCode.Equals(“Active”))
select new Xrm.Account
Id = c.Id,
new_Country = c.new_Country

Approach 2 – Query all using Late Binding – RetrieveMultiple

QueryExpression query = new QueryExpression();

query.EntityName = “account”;

query.ColumnSet = new ColumnSet(“ownerid”, “createdby”, “name”, “new_idse”, “new_country”, “new_stateprovince”, “address1_city”, “address1_postalcode”, “new_customertypeid”, “new_companyindustry”);
query.Criteria.AddCondition(“statecode”, ConditionOperator.Equal, 0);
List<Entity> results = new List<Entity>();
EntityCollection retrieved1 = _service.RetrieveMultiple(query);
results = retrieved1.Entities.ToList();
List<CrmAccount> result1 = new List<CrmAccount>();
var accounts = (from item in results
select new CrmAccount
accountid = (Guid)item[“accountid”],
name = item.Contains(“name”) ? item[“name”].ToString() : string.Empty

Approach 3 – Query all using Late & Early Binding – CreateQuery(“account”)

var query2 = (from c in orgSvcContext.CreateQuery(“account”)
where ((!c[“statecode”].Equals(null) && (string)(c[“statecode”]) == “Active”))
select new CrmAccount
accountid = (Guid)c[“accountid”],
name = item.Contains(“name”) ? item[“name”].ToString() : string.Empty

Query specific account

Approach 4 – Query account using Early Binding – CreateQuery<Account>()

var accounts = (from c in orgSvcContext.CreateQuery<Account>()
where (c.Id.Equals(id) && c.StateCode.Value.Equals(0))
select new Xrm.Account
Id = c.Id,
new_Country = c.new_Country,
OwnerId = c.OwnerId,
Name = c.Name,
new_IDSE = c.new_IDSE,
new_StateProvince = c.new_StateProvince,
Address1_City = c.Address1_City,
Address2_PostalCode = c.Address2_PostalCode,
new_CustomerTypeID = c.new_CustomerTypeID,
new_CompanyIndustry = c.new_CompanyIndustry

Approach 5 – Query account using Late Binding – RetrieveMultiple

QueryExpression query = new QueryExpression();

query.EntityName = “account”;

query.ColumnSet = new ColumnSet(“ownerid”, “createdby”, “name”, “new_idse”, “new_country”, “new_stateprovince”, “address1_city”, “address1_postalcode”, “new_customertypeid”, “new_companyindustry”);
query.Criteria.AddCondition(“statecode”, ConditionOperator.Equal, 0);
query.Criteria.AddCondition(“accountid”, ConditionOperator.Equal, id);
List<Entity> results = new List<Entity>();
EntityCollection retrieved1 = _service.RetrieveMultiple(query);
results = retrieved1.Entities.ToList();
List<CrmAccount> result1 = new List<CrmAccount>();
var accounts = (from item in results
select new CrmAccount
accountid = (Guid)item[“accountid”],
name = item.Contains(“name”) ? item[“name”].ToString() : string.Empty

Approach 6 – Query account using Late & Early Binding – CreateQuery(“account”)

var query_join2 = (from c in orgSvcContext.CreateQuery(“account”)
where ((!c[“statecode”].Equals(null)
&& (string)(c[“statecode”]) == “Active”)
&& (c[“accountid”].Equals(id)))
select new CrmAccount
accountid = (Guid)c[“accountid”]

Approach 7 – Query account using Late Binding – Retrieve

Entity entity = _serviceProxy.Retrieve(entityName, entityId, new ColumnSet(“name”));

Approach 8 – Query account using Early Binding – Retrieve

Account retrievedAccount = _serviceProxy.Retrieve(Account.EntityLogicalName, accountid,
new ColumnSet(“primarycontactid”)).ToEntity<Account>();

To learn more about Edgewater’s CRM offerings, click here.

How to Optimize Microsoft Dynamics CRM 2011 Applications (Part 3)

In Part 1, I highlighted changes to improve performance for the Microsoft Dynamics CRM Web Application. Part 2 focused on performance improvements for CRM customizations. In this blog, I will highlight changes to improve performance for the following:

  • Microsoft Dynamics CRM SDK Applications and
  • Microsoft Dynamics Reporting Services.

Microsoft Dynamics CRM SDK Applications

It is imperative to ensure the optimal performance of any custom applications, plug-ins, or add-ins developed using the Microsoft Dynamics CRM 2011 SDK.

A precise recommendation for any custom application is to limit any columns and rows retrieved to those required to achieve the application’s business goals. This technique is particularly significant when CRM users access the data from a Wide Area Network (WAN) with higher network latencies. The data returned by custom applications can be limited:

  • when using ‘Condition’ attributes to restrict the data that the ‘FetchXML’ and ‘ConditionExpressions’ queries return,  and
  • When using paging to restrict the number of rows returned by a custom application.

NOTE: For Microsoft Dynamics CRM deployments that are integrated with other systems, test custom applications in an environment similar to the complexity and integration present in the production environment. Another thing to keep in mind is that performance results may vary if the database on the test system is not of similar size and structure to that in the production environment.

Microsoft Dynamics CRM Reporting Services

There are a variety of factors that can affect report server performance:

  • hardware,
  • number of concurrent users accessing reports,
  • the amount of data in a report, and
  • output format.

Organizations that have smaller data sets and a smaller amount of users can deploy on a single server or on two servers, with one computer running Microsoft Dynamics CRM Server 2011 and the other computer running Microsoft SQL Server and SQL Server Reporting Services.  Performance will be affected with larger datasets, more users, or heavier loads.  Optimizing reporting services would be required, if it is noted that the usage for reports has increased.

Consider these guidelines when optimizing Microsoft Dynamics CRM 2011 Reporting Services:

  • Ensure that the computer hosting the report server includes ample memory as report processing and rendering are memory intensive operations.
  • Host the report server and the report server database on separate computers instead of hosting both on a single high-end computer.
  • When there are signs of all reports processing slowly, contemplate a scaled-out deployment with multiple report server instances. For best results consider using load balancing software and hardware to allocate requests evenly across multiple report servers in the deployment.
  • If only one report is processing slowly, tune the query if the report must run on demand.  Consider caching the report or running it as a snapshot as well.
  • Consider the following if all reports process slowly in a specific format (for example, while rendering to PDF):
    • File share delivery;
    • Adding more memory;
    • Using another format (Excel, CSV, etc)

Creating Automated Emails in Dynamics CRM using ExactTarget

One of the key benefits of using a third party direct email marketing tool with Dynamics CRM is the ability to automate the sending of emails when some event happens or a period of time elapses. This blog discusses how to create an automated email sent from Dynamics CRM using ExactTarget. The email will be scheduled to be sent to a dynamic marketing list every 15 minutes. In practice you would use this method to send an email every 30 days or some similar time frame, or when some event, such as the creation of a particular record, occurs.

The first thing you need to do is create a dynamic marketing list in CRM. To do this, go to Marketing, Marketing Lists and click New.

On the Marketing List screen, enter a Name, set the Contact Type and set the Type field to Dynamic.

Save the marketing list record and click Manage Members.  The query screen will appear in which you can specify your criteria which will be executed each time the email is sent out.  Click the Use Query button when the query is ready.

Once you have your marketing list ready, go to File, ExactTarget, Create Marketing Automation ExactTarget Send.

On the Send ExactTarget Email screen, select a pre-defined Email template, Field Mapping Set, create a Subject, set the From value, select a Campaign if desired, check the “Return individual tracking results as ExactTarget Responses” and “I certify all email recipients have opted in” checkboxes and click OK.

Now that you have an ExactTarget Send record, emails will be sent through ExactTarget to the marketing list every time an ExactTarget Recipient record is created. To automate the sending of emails, you will us a CRM workflow to create the ExactTarget Recipient record when you want the email to go out. To do this, go to Settings, Processes and click New.

On the process screen, enter a Name, set the Entity Type to ExactTarget Send and the Category to workflow.  Leave the “New blank process” radio button selected.  Click OK to go to the Process definition screen.

On the Process definition screen, check the “As an on demand process” and “As a child process” checkboxes, clear the New Record checkbox and save the record.

Now you need to create the steps of the workflow.  Click Add Step and select the Create action.  Select ExactTarget Recipient as the entity type to create.  Click Set Properties to set the values of the ExactTarget Recipient record.  Set the Name, Type, Individual or Marketing List field depending on the value of the Type field, and select the ExactTarget Send record.

After setting the properties of the ExactTarget Recipient record, set the time period to wait until the next send.   To do this, click Add Step and select Wait Condition.

Click on “<condition> (click to configure)” to open the Wait Condition screen.

When the Wait Condition screen appears, select Process, Timeout, Equals, 15 minutes duration and Save and Close.

To run the workflow again after the specified time period has elapsed, add a step to call itself as a child workflow.  To do this, click Add Step and select Start Child Workflow.

Select the workflow itself as the child workflow and save the workflow.  It should now look similar to this:

Now activate the workflow and every fifteen minutes it will execute the marketing list query and create an ExactTarget Recipient record to send the email to the current members of the dynamic marketing list.

How to Optimize Microsoft Dynamics CRM 2011 Applications (Part 1)

When considering optimal performance for Microsoft Dynamics CRM 2011, the following areas require attention:

  1. Microsoft Dynamics CRM Web Application
  2. Microsoft Dynamics CRM Customizations
  3. Custom Microsoft Dynamics CRM SDK Applications
  4. Microsoft Dynamics Reporting Services

In this blog, I will highlight changes to improve performance for the Microsoft Dynamics CRM Web Application.  Additional blogs will follow highlighting areas two, three and four.

Microsoft Dynamics CRM Web Application Optimization

The following are some simple changes to the out of the box configuration of Microsoft Dynamics CRM:

Setting the Default Views:

When starting Microsoft Dynamics CRM, viewing all records for an entity can be resource intensive, particularly as the size of the database increases. In order to improve system performance, the default views should be customized to limit the records that are displayed. For example, to see the default view for Contacts (assuming changes are made to the default solution):

  • STEP 1: On the Microsoft Dynamics CRM home page,
    • Select ‘Settings’;
    • Then under ‘Customization’, click ‘Customizations’;
    • Select ‘Customize the System’;
  • STEP 2: In the Solution window, under Components,
    • Select ‘Entities’;
    • Then select ‘Contact’;
    • Finally select Views;

NOTE: In the list of available views, the entry for the current default view is marked with a star. It displays as Default Public View.

  • STEP 3: Select the different view you that you want to set as default, then on the action toolbar,
    • Select ‘More Actions’;
    • Then select ‘Set Default’;
  • STEP 4: To save and publish the configuration changes, select ‘Publish All Customizations’ or under the Contact entity select ‘Publish’.

Quick Find Views (Limiting Search Columns):

The quantity of fields that are searched to display quick find results can directly affect performance.  For optimal performance, the quick find feature per entity should only be configured to search the fields that address specified business requirements. The following steps explain how to customize the ‘Quick Find’ feature (assuming changes are made to the default solution):

  • STEP 1: On the Microsoft Dynamics CRM home page,
    • Select ‘Settings’;
    • Then under ‘Customization’, click ‘Customizations’;
    • Select ‘Customize the System’;
  • STEP 2: In the Solution window, under Components,
    • Select ‘Entities’;
    • Then select the entity for the ‘Quick Find’ view needs to be customized;
    • Finally select Views;
  • STEP 3: In the list of views
    • Select the ‘Quick Find’ view;
    • Then on the action toolbar select ‘More Actions’;
    • Then select ‘Edit’;
  • STEP 4: In the ‘Quick Find’ view
    • Select ‘Add Find Columns’ located under ‘Common Tasks;
  • STEP 5: Select the fields that will be searched to provide Quick results and then select ‘Ok’.
  • STEP 6: Select ‘Save and Close’ in the ‘Quick Find’ window and then to save and publish the configuration changes, select ‘Publish All Customizations’ or under the selected entity select ‘Publish’.

If quick find results are slow to return with the simple changes described above, then database optimization techniques and tools should be leveraged with consideration to the following aspects:

  • The more columns included in a search, the longer the search will take.
  • Fields included in a search should be leading columns in indexes, even if this means creating one for each field. Also consider including in those indexes the Owner, BU, and the State fields, which are typically included in the query.
  • The use of filtered indexes can result in better query performance.

Best Practices:

The following are best practices to contemplate when considering optimal performance of CRM 2011:

  • Team Functionality: Teams can own records (objects) and records can be shared to teams thereby allowing members of that team access to the shared records.  Leveraging the enhanced team’s functionality should be considered as opposed to a complex business hierarchy because teams will provide better performance with a lesser drawback for security checks.
  • Field Level Security (FLS) Functionality: Field Level Security provides more granular control over the data that specified users can or cannot create, update or view. While FLS is a great feature to use the more comprehensively it is used in an implementation, the greater the impact on performance.

To learn more about Edgewater’s Microsoft Dynamics expertise visit

Processes (Workflows) Best Practices

When enabling new workflow options in Microsoft Dynamics CRM 2011, the overall performance of the implementation can be affected. Keep in mind the following best practices, when considering how to ensure that Microsoft Dynamics CRM workflow functionality performs optimally for a particular implementation.

  • Determine the business purposes for implementing workflow prior to enabling the functionality. During planning, analyze the business scenario and define the goals of workflow within the solution. Workflow functionality can provide for businesses’ process automation, exception handling, and end-user alerts.

Decide on the appropriate security/permissions model for workflow. With established business goals in place, determine the scope of users that will be affected by the workflow implementation. Users should be identified to determine who will create and maintain workflows, apply and track workflows, and troubleshoot workflow issues.

  • Use the Scope property sensibly. The Scope property associated with workflow rules defines the extent of records affected by that rule. For example, rules configured with a User scope affect only the records owned by that user, while rules configured with an Organization scope will affect all records within organization, regardless of which user owns each record. When creating workflows make sure to identify the appropriate scope value for each workflow rule to minimize the number of related system events.
  • Take into consideration the overall load associated with workflow within a deployment. Think about the number of instances that each workflow definition triggers. Then also consider these factors which affect load of workflows:
    • number of workflows
    • which entities
    • number of records
    • data size
    • data load

Considering the factors above in the system on a typical day provides for better comprehension of the processes and load variance. Based on this analysis, the workflows can be optimized as required.

  • Review workflow logic wisely. Consider the following factors:
    • Workflows that include infinite loopbacks, due to semantic or logic errors never terminate through normal means, therefore greatly affect overall workflow performance.
    • When implementing workflow functionality within a CRM 2011 deployment, be sure to review the logic in workflow rules and any associated plug-ins for potential loopback issues.
    • As part of ongoing maintenance efforts, periodically publish workflow rules and review them to ensure that duplicated workflow rules are not affecting the same records.
  • When defining workflows that are triggered on update events, be cautious. Taking into account the frequency at which ‘Update’ events occur, be very particular in specifying which attributes the system looks for to trigger updates. Also, avoid using ’Wait’ states in workflows that are triggered on Update events.
  • Scale out as necessary, to improve performance in large deployments. Use dedicated computers to run the Async service for large-scale deployments. That being said, increasing the number of servers running the Async service creates additional stress on the server running Microsoft SQL Server. Therefore, make sure to follow appropriate optimization and tuning strategies on the data tier and investigate the possibility of increasing the number of computers running Microsoft SQL server.
  • Test workflows. Make sure to test and monitor the performance of new workflow functionality before implementing it in a production environment.
  • Async plug-ins. Think through whether plug-ins should run synchronously or asynchronously. When the priority is user responsiveness, running a plug-in asynchronously will enable the user interface to respond quicker to the user. But, asynchronous plug-ins introduce added load to the server to persist the asynchronous operation to the database and process by the Async Service. When scalability is essential, running plug-ins synchronously typically requires fewer loads on the servers than running plug-ins asynchronously.
  • Balancing workflows and asynchronous plug-ins. Asynchronous plug-in and workflow records in the asyncoperationbase table are managed with the same priority. Hence, introducing a large number of asynchronous plug-ins into a system can reduce overall throughput or increase the time between triggering and processing of individual workflows. For that reason, make sure to consider the relative importance of the workflows in the system before adding numerous asynchronous plug-ins to the solution.
  • Child Workflows. Child workflows run as independent workflow instances from their parents. This can facilitate parallel processing on a system with spare capacity, which can be useful for workflows with multiple independent threads of high processing activity. Additional overhead can be introduced if the parallel processing is not critical because other workflow logic threads are blocked waiting for external events to occur.

NOTE: If workflow functionality within a CRM 2011 implementation is not acting as expected, verify that the Async service is running properly. Often, restarting the Async service will unblock workflow processing without affecting the functionality of the workflows that were in the pipeline.

  • Monitor the Microsoft Dynamics CRM 2011 database for excess workflow log records. Workflow processing in Microsoft Dynamics CRM depends on on the Asynchronous Service, which logs its activity in both the AsyncOperationBase table and WorkflowLogBase tables. Performance may be affected as the number of workflow records in the CRM 2011 database grows over time.

Microsoft Dynamics CRM 2011 includes two specific settings, ‘AsyncRemoveCompletedJobs’ and ‘AsyncRemoveCompletedWorkflows’, which can be configured to ensure that Asynchronous Service automatically removes log entries from the AsyncOperationBase and WorkflowLogBase tables. These settings are as follows:

    • The ‘AsyncRemoveCompletedWorkflows’ setting is visible to users in the interface for defining new workflows, and users can set the Removal flag independently on each of the workflows they define.NOTE: When registering an Async plug-in, users can also specify that successfully completed Async Plugin execution records be deleted from the system.
    • Using the deployment Web service, users can change the AsyncRemoveCompletedJobs setting by. Nonetheless, the setting is by default configured to True, which ensures automatic removal of entries for successfully completed jobs from the AsyncOperationBase table.