Sonoma Partners Microsoft CRM and Blog

Speeding Up Web Resource Development with Imposter for Fiddler

Today's post was written by William Dibbern, Principal Developer at Sonoma Partners.

Anyone who has built a web resource for Dynamics CRM can tell you how frustrating it is without the right toolset.

Since all HTML, JavaScript, CSS, and images are stored in the database, they must all be uploaded through Dynamics CRM. Without a tool, you're left locating the web resource in a solution and using a web form to upload your changes. Try to use the built-in editor and you could risk formatting issues. All over GitHub and in the SDK you can find tools for helping to keep your local files in sync with CRM's copy by uploading them through the API. While that will certainly alleviate a lot of the pain, what if we could go further?

Let's do just that and take a look at a tool called Imposter.

What is Imposter?

Imposter is an extension to the widely popular Fiddler which allows you to serve up files from your local file system in response to requests from your browser.

The way Imposter works is that it hooks into Fiddler's API to see when the browser requests a web resource from the Dynamics CRM, and it uses some simple logic to figure out which file on your local system it should send in place of whatever the server has.

This has two advantages:

  1. You can make changes in the editor of your choice (I'm really partial to Visual Studio Code, but that's a story for another day.) and see those changes reflected immediately in your browser without having to upload the file to CRM and publish every time you make a change.
  2. You can make changes to the file and test them out without affecting anyone else accessing the system. Working on a rewrite of some JavaScript but need other developers to be able to keep working with the legacy code and only have one development environment? No problem anymore!

If you're familiar with Fiddler, you may be familiar with its AutoResponder functionality and therefore may be wondering what the advantage of Imposter is over this built-in functionality. Here are a few key points:

  1. You have to setup a rule per file if you want to swap out, manually. If you're clever, you can do this with a regex to swap out a whole directory however, Imposter lets you skip the regex and map a local directory to a URL fragment so you can serve up an entire directory of files with only one setting.
  2. Imposter comes with an implementation of "hot reloading" which means whenever you save changes to your code, the page is automatically refreshed to display the latest.
  3. When you start using Imposter you'll also notice it has a concept of "profiles." Each profile is a combination of a base URL to look for (so that Imposter knows when to try to swap out files and when not to), a local directory (where Imposter will look for files that match those that were requested), and some overrides (for when your file system and CRM don't line up perfectly). With these profiles, we can support working on multiple projects at the same time. This looks a lot cleaner than a bunch of rules in AutoResponder.

How do I use Imposter?

Once you've got Fiddler and Imposter for Fiddler installed, you'll see a new icon in your menubar. If you click it, you'll see several options. Let's start with adding a profile first.

Adding a Profile

  1. Click Imposter.
  2. Click Profiles.
  3. Click Add New.
  4. Notice a setting dialog opens.
  5. For Profile Name, we enter a friendly name for our profile. This name can be anything and is simply an identifier for you.
  6. For Base URL, you'll want to enter a fragment of the URL that you're going to be asking Fiddler to keep an eye on to swap files for.

Since we're working in CRM, we can just enter /WebResources/publisherprefix_/ (where "publisherprefix" is the prefix you've chosen in your solution, by default "new") and what Imposter will do is wait for any request that contains /WebResources/publisherprefix_/ in the URL, and it will attempt to parse a file name from that string.

So let’s say your browser requests a webpage at, Imposter will see the /WebResources/publisherprefix_/ segment of that URL and will start looking for a file in the CustomSearch folder called index.html. If found, Imposter will serve that file up in place of what the server has.

  1. In the Local Directory field, you'll enter the base path on your file system that Fiddler should try to use to look for matching files. Continuing the example in the previous step, if you entered C:\MyVisualStudioSoltion\WebProject\, Imposter would look for html in C:\MyVisualStudioSolution\WebProject\CustomSearch\.
  2. If you have any files that wouldn't match the pattern given in the previous step, like if you've been uploading your web resources as html instead of "namespacing" them like new_/index.html, then Overrides are where you go.
    Tip: If you're unfamiliar with simulating directories with CRM Web Resources, you can read a basic introduction on that here. You can put in any URL fragment you'd like to match on (ex. index.html) and then past in the complete path to that file on your file system.
  1. Click Save.

Fiddler image 1

Enabling Imposter

Now that we've got a profile created, we can start things up.

  1. From the File menu in Fiddler, ensure Capture Traffic is checked. Having this turned off is like hitting the circuit breaker, no extensions will work as no traffic will be captured.
  2. From the Imposter menu, navigate to Profiles, then select your profile name, then click Enable. Note you can turn on as many profiles as you'd like.
  3. Notice in the Imposter menu now that Enabled is checked. You can quickly turn on or off Imposter from this menu without losing the state of which of your profiles are enabled/disabled.
  4. Clear your browser's cache and navigate to a web resource in CRM. You should see your local file system's changes being served up in the browser, and in Fiddler you'll see a blue highlight on web resources that were requested, matched, and replaced by Imposter.
    Tip: Fiddler’s highlighter can be glitchy, so if you want to know for sure whether a file was swapped, add the X-Imposter response header to the results grid in Fiddler.

Auto Reload

I bet you noticed the Auto Reload option in the Imposter menu, didn't you? Wondering what that is? When Auto Reload is enabled, Imposter will monitor the Local Directory in any enabled profile(s) and wait for changes. If it detects a change, any HTML web resource that was already swapped out by Imposter will automatically refresh itself to account for the newest updates. Awesome, right?

I would recommend using caution with this feature, though. If you swap out an HTML web resource hosted in an iframe, any event handlers attached to functions in that iframe could be broken when it refreshes, making the utility a little less useful. For that reason, I primarily use this feature for dialogs and fully custom pages.

Where is it?

All this talking and no links to download? Well here ya go: Imposter for Fiddler on GitHub. The tool is hosted on GitHub, so if you'd like to submit a feature request or any other changes, feel free! There is also a Wiki on the GitHub repository which has some great tips and tricks for using Imposter. Enjoy! 

Data shows no emotion

Topics: Microsoft Dynamics CRM

Bad Characters Messing Up Your Migration to Microsoft CRM Dynamics?

Today's post was written by Neal Sullivan, Senior Database Developer at Sonoma Partners.

As we work with clients to migrate data into Microsoft Dynamics CRM we often run into challenges with the incoming data.

Our migration process typically consists of moving the source data into a staging SQL Server database prior to the actual migration to CRM. Among other reasons, this gives us a place to do data cleansing prior to the CRM migration.

We run into many common issues such as field length differences and data type mismatches that are often found during the data mapping process with the customer. One less common issue we encounter in testing a migration is that some characters in the source data are not supported in CRM when importing data via the API. There are certain non-printable characters that are supported such as carriage-return and line-feed however others like record separator [char 30] or vertical tab [char 11] often are not accepted when migrating data to CRM.

We've developed a common SQL framework we use to allow us to do some data analysis and clean-up of these invalid characters in our staging tables prior to doing our push of the data to CRM. In most cases we run the data migration without any cleansing and capture any failed rows into an error table where we keep the source system record id and the CRM API error message. From there we can determine if any entities had errors around invalid characters. Here is an example of what that error would look like. In our example we are using the KingswaySoft CRM Adapter for SQL Server Integration Services.


Once we know what entities and fields have invalid characters we can start to build our cleanup routine from our base framework.

So which characters are going to cause us a problem?

In our research we found that the Microsoft Dynamics CRM API does not like asci characters below character number 32 (which is the space " " character). So we start with a list of 1 – 31 to represent potential bad characters. We also know that horizontal tab, carriage return, and line feed (CHAR(9), CHAR(13), and CHAR(10) respectively) are valid in CRM and should not be in this list of bad characters.

For the sake of examples, here is a sample script to spin up 10 ‘note’ records with potentially bad data in the NoteText field.

To create the list of bad characters, we used a Common Table Expression (CTE). The below script gives a numbered list containing the asci character values of known-bad characters called, ‘BadCharacters’.

From there it's a matter of writing a query that will join the known bad characters CTE with your stage table and have it review each character in the field that was reported as having bad characters in your error logging of your data migration. Here the SQL Cross Apply clause comes in handy to make this a simple process. In this example we are migrating notes into the CRM notes entity. I know from my error logging shown above that the notetext field in my stage table has some bad characters that CRM did not like. So I cross apply my BadCharacters table with my notes staging table and have it inspect the notetext field for bad characters (using the above CTE definition).

Here are the results of the above query on my data set. I can see exactly what records, what the raw value is currently in that field, what the bad character was reported and where in the string it exists.


After I do my analysis and confirm that it’s acceptable to replace these characters an update script is run against my stage table. Here is my final script that I can include in my data migration process to swap out any bad characters with a blank string in my stage table prior to sending these records to CRM.

It should be noted that the CTE spins up 256 possible rows to cover every possible ascii character. In this case we know that we only want to do the cross apply on a subset of these potential values. But the BadCharacters CTE could be amended to include/exclude any ascii characters.

Topics: Microsoft Dynamics CRM

Save My Data! CRM Online Backup & Restore

With the Dynamics 2016 Spring Release for CRM Online, a much anticipated feature for CRM Online has finally been rolled out.  This is the ability for the end user to be able to manage database backups, and restore a backup to your Online instance whenever you want.  Previously customers had to engage Microsoft support to do this for them, but now they’ll be able to manage this process on their own.


There are no size limitations to the backups that can be taken (in case you have a large CRM database) but just know that the size does affect how long the backup and restore will take. 

In the O365 Admin center, when looking at your CRM instances table, you’ll see a new “Backup & Restore” link/tab that will take you to the area where the backups are taken, and where you would restore a backup to an instance.  From here you can also see when the last backup was performed for each instance.


Clicking on the “BACKUP & RESTORE” tab will bring you to the backup and restore home of the CRM Admin center where you can see a list of all the backups per instance you select in the drop down.  This is also where you can take different actions:  create a new user backup, edit an existing user backup, delete an existing user backup, and restoring a backup to a sandbox instance.


Creating a Backup

When you go to create a backup, you have the ability to provide a label and description for your backup.  This is the same dialog that will appear when you go to edit an existing backup allowing you to modify the name and description after you initially create it.


Backup Locations

With this new feature, users will only be able to backup to the CRM Online Server.  They’re currently not able to backup to any local location or anywhere in Azure.

The backups to the CRM Online Servers (Microsoft Data Centers) will be kept for 3 days.  Backups that are stored in CRM Online can be full backups (system backups) or incremental backups (user backups).  These are explained more below.

The backups themselves (system or on-demand user backups) do not count against your CRM Online storage space even though they’re backed up to the CRM Online Servers.

Backup Types:

The two following backup types are available for the CRM Online database:

  • System Backups
  • User Backups

System backups happen daily and are full backups.  What time of the day that they occur on cannot be confirmed and may vary, but they will happen at least once a day.  These will live on the CRM Online Servers, and will persist 3 days.

User Backups are incremental backups and therefore should backup and restore quicker.  These will also persist for 3 days.  There currently isn’t a limit to how many on-demand user backups you can take.

Restore Process

The backups themselves are encrypted, and you’re only able to restore back into a Sandbox instance.  If you want to restore to a Production instance, you’ll first need to convert the Production instance to a Sandbox instance, and then perform the restore.  The restore button will be grayed out for Production instances.


However, if you have to restore into a production instance, you can edit that instance to change it’s type to Sandbox, and after you do so, you’ll see the restore button in blue as in the screenshot in the Details section above.  Clicking on the restore button will pop the dialog that allows you to change the target to restore into.  Again this will only list sandbox instances.




During a restore, the instance you’re restoring into cannot be used.  Users will not be able to access the instance.  A good practice that’s supported would be to take a backup just before your CRM Online org is to be upgraded, and then if the upgrade fails for some reason (breaks some functionality), you can restore back to the backup taken which will restore you back to the previous version of CRM Online.

Delete Backup

Another action you can take on a backup in the backup and restore area is deletion of a user created backup.  Remember that after 3 days, the backups will be deleted automatically (this is shown in the “Expires On” column in the list of backups).  However a user may want to manually delete backups to clean up their list of user initiated backups.



With this new feature like all new features, come some limitations:

  • This is only available for CRM Online 2016 Update 1
  • You cannot take an On Premise backup, and restore it into your Online instance
  • Cannot backup your Online instance, and restore it to an On Premise org for reporting purposes
  • There is no API support
  • There is currently no ability to schedule backups (other than the daily system backup that’s taken automatically once a day)

Even with these limitations it’s great to see some more power coming to the CRM Online customers hands.  I’m sure Microsoft will continue to enhance this already powerful tool and maybe eliminate some of the current limitations in future versions.

For more information on this functionality, head over to Microsoft’s TechNet article.  As always, you can always Contact Us to help out with your CRM implementation.

How to get executives to pay attention to CRM
Topics: Microsoft Dynamics CRM Microsoft Dynamics CRM 2016 Microsoft Dynamics CRM Online

How to Use Microsoft Dynamics CRM Business Process Flows: The Checklist Strategy

Today's post was written by Trent Bell, Principal Consultant at Sonoma Partners.

Usability is “king” when it comes to CRM because the biggest killer of CRM is lack of user adoption. 

It is a self-perpetuating reality.  If it becomes difficult to enter data, then data will not be entered properly, if at all.  If good data does not exist or is incomplete, then your CRM can no longer be trusted, thus having no value.  It is vitally important to take “ease of use” seriously as you design your CRM solution.

Looking to enter activity related information on-the-go in Dynamics CRM? Explore Activity Buddy, a custom app built by Sonoma Partners.

So, how does this relate to Microsoft Dynamics CRM's business process flows?  There are a few usability concepts I would like to call out that are potentially affected by BPFs.

Concept #1 - User-guided Process

One might argue that the BPF concept’s main goal was to assist/guide users through the input or absorption of data as part of a business process for a particular record.  If the business has a defined process, then this can be a big benefit.  The use of BPFs breaks down in the case where an organization does NOT have a well-defined process around the particular data.  This one is somewhat obvious.

Concept #2 - Good Form Design

Most of us know the importance of “good” form design, where we try to strike the right balance between having an ample amount of fields on a form to be valuable while not over-cluttering it or creating a data-entry chore.  The BPF concept can be a great tool to assist with this idea by allowing you to get creative with the placement/usage of fields either in the BPF bar or in the body of the form…or both.

Strategy – The Checklist

While this is not the “end all, be all” answer, one strategy to consider that incorporates the concepts listed above is to simplify the user experience by only placing “checklist” type fields in the BPF bar.  This means all fields with real data values would be placed in the body of the form.  For example, instead of having a “Key Strategy” long description field in the BPF bar, place that field in the body of the form and create a new “Yes/No” field called “Key Strategy Determined?” that will go into the BPF bar.  The basic idea is to create “checklist” type fields for the key milestones or key data captures relevant to the ideal process you want your users to follow.  While it requires the creation of extra fields in the entity, the consistency and predictability that this approach provides to the BPF bar and body of the form can create clarity for the end user.

One strategy for how to use Microsoft Dynamics CRM Business Process Flows

A few pros and cons that come to mind with this strategy include the following:


  • BPF bar has consistent and predictable entry/feedback
  • “Data completion” status within a record is easily determined
  • Reporting is more simple (advanced finds can be done eliminating left outer-join issue)
  • Form body for data entry is more traditional


  • Creation of extra fields (checklist fields) to be managed
  • Need space to place all data entry fields in the form body (could be an issue if many fields exist)

I want to make it clear that I am NOT advocating for this to be the one and only approach to configure BPFs, but I do believe it can be an effective strategy for some situations.  Some key factors that may make your organization a candidate for this approach are:

  1. You have defined processes
  2. You need to report on your users’ data entry practices
  3. You want to highlight key data milestones

When business process flows were first introduced, I loved the idea of bringing certain fields up from the body of the form into the process bar, allowing attention to be focused on key fields.  The BPF feature also provided the opportunity to decrease form length.  With that said, I've seen users get confused or reluctant to embrace the BPF concept like I expected.  My hunch as to why this is has to do with mixing data entry and checklist type fields within the BPF bar and form body.  While it seems intuitive enough, I have found that this specific inconsistency can throw off some users.  While this “checklist” strategy may not work for everyone, I do believe it to be an effective and viable approach.


How to get executives to pay attention to CRM


Topics: Microsoft Dynamics CRM

Need to export more records to Excel? We’ve got you covered with the OrgDBOrgSettings Editor!

With Dynamics, the default maximum record count to export to Excel is 10,000.  While this may work for a lot smaller business without a lot of data, it won’t work for most organizations.  An instance of this came up recently where a client of ours kept hitting the 10,000 record limit though they had many more records to export.

Typically in the past, if the customer was CRM OnPremise, you would be able to access this setting (along with the other OrgDBOrgSettings) using direct SQL.  Updating these values with SQL definitely wasn’t supported, but at least you could have conversations of updating the settings if you had individuals that knew what they were doing, or you created a support ticket with Microsoft to help you out.

However, if you had CRM Online, these settings weren’t available to you through the UI or even through SQL since with Online, you don’t have direct SQL access to your database.  What can you do?

That’s where the OrgDBOrgSettings editor comes in to play.  You can download the managed solution from this link.  The process to get it installed and use it is pretty simple.  Download the managed solution from that link, import it in as a normal solution into your environment, and then open up the solution.

From the configuration page of the solution, you’ll see the different settings that you have access to, what the default value is, what the current value is, and what the maximum value is (there are some limitations – you cannot update the MaxRecordsForExportToExcel to 500,000,000).


To edit a value, either double click on a row, or click the Edit link in the row for that setting.  When you do so, you have the option to set a custom value, or revert back to the default.  A checkbox at the bottom of the configuration page can be set or unset which will display a prompt to confirm the change upon making an update.



If you try to set a value over the maximum, you’ll get a message stating the requested change wasn’t saved, and the value will remain as it currently is.


This is a great utility to make supported updates to the OrgDBOrgSettings without having to reach out to Microsoft Support.  For a full list of all the settings that can be updated and a description of what the setting drives, navigate to this link.  Also, for more explanation on how to use the tool and what it can be used for, see this post from Sean McNellis who created the solution.  While this solution has been available for some time now, we’re hoping this is a great refresher to let you know what tools are available for free to help you make changes on your own.

Topics: CRM Best Practices Microsoft Dynamics CRM Microsoft Dynamics CRM 2013 Microsoft Dynamics CRM 2015 Microsoft Dynamics CRM 2016 Microsoft Dynamics CRM Online

Marketo Triggering MSCRM's Duplicate Detection

Today's post was written by Matt Dearing, Development Principal at Sonoma Partners.

For those that may be unfamiliar, Marketo’s solution offers marketing automation, email, and many other services. 

We recently ran into an error while working on a Marketo integration with one of our clients, where the solution wasn’t obvious at first.  We saw the following error logged when certain updates were pushed to MSCRM contacts:

“A record was not created or updated because a duplicate of the current record already exists.”

It seemed odd that updates from Marketo were triggering MSCRM duplicate detection, as we only allowed Marketo to update a couple of fields that were not a part of any criteria for duplicate detection rules in the CRM organization.

In general, making create/update calls against the MSCRM API will not trigger duplicate detection unless explicitly specified through the use of the SuppressDuplicateDetection parameter.

What's interesting about SuppressDuplicateDetection is that if you explicitly specify it as false while updating a record, even when the fields that are being set in the update are not a part of the duplicate criteria, MSCRM will still throw a duplicate error if the existing record already matches another in the system.

For example, if you have 2 contacts (ContactA and ContactB) in MSCRM with the same email address, and a duplicate detection rule that matches on email address, updating any field on the contact (job title, for instance) will still trigger the duplicate detection exception. 

The following code demonstrates this:

In this example, the duplicate detection error will be thrown because ContactB is already a duplicate of ContactA, due to them both having the same email address, even though email address is not altered in this update request.

We discovered that Marketo has a few internal flags, not exposed to end users, for suppressing MSCRM duplicate detection errors when creating/updating lead records or when updating contact records from Marketo to MSCRM.

My assumption is that Marketo explicitly sets SuppressDuplicateDetection to false when making MSCRM API calls. The internal Marketo flags are then used to dictate the value of SuppressDuplicateDetection passed to MSCRM. We worked with Marketo support to get this flag updated for our customer's Marketo instances and now all our changes in Marketo are flowing back to CRM as expected.

Contemplating your own Marketo Integration?  Let’s work together!

Topics: Microsoft Dynamics CRM

CRM Upgrade with SQL AlwaysOn

Today's post was written by Neil Erickson, Development Principal at Sonoma Partners.

As a firm that specializes in CRM consulting, we are proponents of using the technology we sell in our own processes. 

When upgrading to Dynamics CRM 2015 we went through the effort of moving to new hardware for both the CRM servers and SQL server. We decided that it was time to implement SQL AlwaysOn for redundancy.  A year later when it was time to upgrade one of our systems to CRM 2016, we elected for an in-place upgrade since both Windows and SQL remained up to date.

The upgrade process was going along without issue until the following error occurred:

System.Exception: Action Microsoft.Crm.Tools.Admin.SetReadCommittedSnapshotIsolation failed. ---> System.Data.SqlClient.SqlException: The operation cannot be performed on database "Grapevine_MSCRM" because it is involved in a database mirroring session or an availability group. Some operations are not allowed on a database that is participating in a database mirroring session or in an availability group.

Microsoft Dynamics CRM with SQL AlwaysOn

Upon reading the exception, my first thought was that we would need to completely undo the availability group and then rebuild it once the upgrade was complete.  Due to the size of the database, I expected that this could add an additional two hours to the upgrade process. 

Luckily, this process was not as lengthy as I imagined.  It was possible to go in and remove it from the Availability Group and have the upgrade process retry the action.

Remove Datasbase from Availability Group

This leaves the database running on what was the Primary Replica, and in the restoring state on the secondary.





Once the upgrade finishes you can add the database back to the availability group. Because the secondary is still in restoring mode, it will simply catch up the changes. This takes considerably less time than a full backup and restore cycle, and it can be accomplished by selecting “Join Only” for your initial data synchronization preference.

Topics: CRM Upgrade Microsoft Dynamics CRM

Microsoft Announces Dynamics 365 Integrated Cloud Platform

Today's post was written by Kayla Silverstein, Marketing Specialist at Sonoma Partners.

A rivalry well-known in the CRM space: Microsoft Dynamics vs. Salesforce

Microsoft took a significant step to improve its CRM solution and upstage its cloud-based competitor with the announcement of a new application: Microsoft Dynamics 365.

Available this fall, Microsoft Dynamics 365 combines Microsoft Dynamics CRM and ERP cloud solutions into a single cloud service. New purpose-built applications within the tool help manage specific business functions, including Financials, Field Service, Sales, Operations, Marketing, Project Service Automation, and Customer Service.

Microsoft addressed the launch of their new solution with the following:

“Business processes are at the core of every business. Across all industries our customers are looking to adapt their customer engagement and business operations processes to the digital era, to secure and expand their businesses. This ‘digital transformation’ requires a degree of business process agility – and a unification across the business – not supported by the traditional ‘siloed’ ERP and CRM approach of the past.”

The unveiling of Dynamics 365 provokes interest within the CRM world for a variety of reasons:

  • It demonstrates the increasing demand for CRM within a cloud environment.
  • It represents the need for an integrated business solution and the desire to simplify the massive amount of tools businesses are expected to utilize.
  • It shows that Microsoft understands the need to be nimble in the CRM world to compete with other market leaders.

Microsoft also recently announced their intention to acquire LinkedIn. The ability to combine CRM, ERP, Office 365, and LinkedIn is a useful one, and it could stand to give Microsoft a bit of an edge over industry rivals Salesforce and Oracle.

One thing is for sure: the real winner is the consumer. As these companies compete fiercely for market share, the consumer will benefit from ongoing innovation and acquisitions.

Topics: Microsoft Dynamics CRM

How to Build Interactive Dashboards in Dynamics CRM

Today's post was written by Nick Costanzo, Principal Consultant at Sonoma Partners.

By now, most organizations using Dynamics CRM for service management have become familiar with the Interactive Service Hub which includes built in dashboards for Tier 1 &  Tier 2 support, as well as Knowledge Managers.

However, if you’re in a different roll, such as an account manager, there are no pre-built dashboards at your disposal.  Fortunately, CRM allows the creation of additional interactive dashboards to meet the needs of all CRM users, and provide them with actionable data. Some common requests we hear include:

  1. Show me critical cases for my account
  2. Highlight the last date me or someone from my team contacted my account
  3. I need to categorize my accounts by priority

Here are a few simple steps to satisfy these requests:

  1. Create a new interactive account dashboard.


  2. Select a multi-stream dashboard with 3 column layout.

    3 column layout

  3. For this example, I’ve also added 2 new fields on accounts:

    a. Open Priority Cases – A rollup field to update the number of open cases with a priority of Critical or High at any given time.
    b. Last Contacted Date – A date field updated via workflow or plugin when new activities created for the account.

  4. Next I created 3 new account charts:

    a. Priority Cases by Account
    b. Account Last Contacted Date
    c. Accounts by Priority

    3 charts

  5. Finally, added 4 data streams to the dashboard:

    a. My Active Accounts which will actively filter based on what the I select on the charts above.
    b. Open Priority Cases to view and drill into the case details.
    c. My Active Contacts to view individuals I can reach out to at these accounts.
    d. My Appointments to view which appointments I have scheduled and plan my meetings based on priority.

    4 data streams

  6. Once these are completed, I can publish all customizations and begin using the dashboard.

    Full Dashboard

Now any account manager can log in to view the accounts they own and interact with the data in CRM.  For example, I can click on the 1 priority case for A. Datum, see that I’ve just contacted them last week, then decide on the appropriate time to follow up with the customer:

A. Datum

Similarly I can drill into my top accounts and the other charts will filter based on my selection so I can take action on the data presented to me. 

A few limitations to note, the dashboards are limited to the standard entities posted here, along with custom entities.  Hopefully in the future additional standard entities such as opportunities will be included to further extend this interactive experience. Additionally, these dashboards need to be accessed via the interactive service hub, so it would be nice to see them extended to the core CRM areas in the future. In the meantime, happy interacting with CRM!

Topics: Microsoft Dynamics CRM

Where are my Voice of the Customer Survey Responses?

I previously wrote a post about the basics of the new Dynamics CRM 2016 Voice of the Customer feature (also known as surveys for the common ear).

However, in my testing I’ve seen instances where my Survey Responses weren’t being created in Dynamics CRM. Remember, this feature is using Azure Web Services so that the Survey and Response Data are synchronized between Dynamics CRM and Azure to take the heavy survey workload off of your transactional Dynamics CRM database.  Therefore a delay in responses getting created is expected, but not a delay of hours or days like I had seen.

In order to see if your VoC jobs are running correctly, go to to Settings –> System –> System Jobs.  Perform a quick search for v* to pull back jobs that begin with the letter v.   What I saw were that there didn’t appear to be a system job running for the past month.

If you do come across this scenario, below are a few things you can do to get your Survey Responses to appear in CRM.


Retrigger Response Processing from the Solution

The simplest fix is to navigate to the Voice of the Customer Solution (Settings –> Customization –> Solutions –> VoiceOfTheCustomer).  From the Configuration Page, you should see a link to “Retrigger response processing if responses are not received within 15 minutes of being completed” – click that and you should initiate a pull from Azure to pull this data back into Dynamics CRM.


Look at the System Jobs

Another thing you can do is open up your most recent Voice of the Customer System Jobs to see why they stopped.  In my example below it appeared as if a record in the system that was needed for the workflow was deleted.  In this example the check statement is checking the Voice of the Customer Configuration record so it appears as if that record may have been deleted at some point which caused the workflow to fail and stop processing.  This leads me to the next resolution step.


Delete and Recreate the Configuration Record

The Voice of the Customer Configuration record may have been deleted / manually recreated.  However, the only supported way for the Voice of the Customer solution to successfully process and return survey results to Dynamics CRM is to have the configuration record created from the Voice of the Customer Solution. 

Therefore if you have a Configuration record currently (which may had been manually created by someone), you need to first off delete this Configuration record. 

Note:  Before you do so, make note that when you delete this record and recreate it, you’ll need to recreate your surveys as the existing surveys will no longer work.  They’ll work in a sense that users will be able to hit them and fill them out, but results will no longer ever be returned to them.  This probably isn’t a big deal because the reason you’re going through this troubleshooting is because the records weren’t being returned in the first place.

Navigate to the solution in Settings –> Solutions –> Voice of the Customer.  On the Configuration tab of the solution, go through the same process you did when you initially setup Voice of the Customer which is check off the agreement to the terms and conditions, and then click on Enable Voice of the Customer. 


If you navigate to System Jobs once again, and filter on those that start with v*, you should see the workflows running successfully periodically and your survey responses should start to flow in for your new survey.  Remember, your old survey and workflows you created with the old survey email snippet will need to be recreated so new survey responses can start to be processed.


Topics: Microsoft Dynamics CRM Microsoft Dynamics CRM 2016 Microsoft Dynamics CRM Online