The first part of the Email Router to ensure you don’t run into any issues is around the Email Router Configuration Manager. If you run into errors within the Email Router Configuration Manager, you will face these same errors when the Email Router is trying to process the email requests. We need to ensure that the configuration is error free.
The first step of ensuring the Email Router is configured properly is to click on Load Data. When clicking on Load Data, it is going out to the Organization service and retrieving a list of CRM users that have their User Profile configured for E-mail Router for the Incoming/Outgoing E-mail Access Configuration. If you run into an issue when clicking on Load Data, this indicates an issue accessing the CRM services, either the Discovery or Organization service endpoints. To troubleshoot this issue, ensure you take the URL provided within the Deployment Profile and append it with the following: URL/XrmServices/2011/Discovery.svc?wsd URL/XRMServices/2011/Organization.svc?wsdl
This should show an XML response like the following:
If you get any error accessing this URL, then you will need to troubleshoot those errors before the Load Data will ever work. Since there are a vast number of problems that can come up when accessing this URL, we will not cover any of these. However, knowing that Load Data is directly related to the Deployment Profile should help you
If you are able to access the Organization and Discovery services within Internet Explorer and not able to within Load Data, it could be an issue with the account running the Email Router service. When clicking on Load Data, it is running under the context of the Email Router service account. This account can be found within Services (Start > Administrative Tools > Services) with the name of Microsoft CRM Email Router. By default, the account running the Email Router service is Local System.
NOTE: The service account needs to be a Microsoft Dynamics CRM user or it needs to be added to the PrivUserGroup for CRM OnPremise customers.
If you experience an error where the Email Router Configuration Manager is not able to Load Data, try changing the service account running the Microsoft CRM Email Router service to a domain user. I have seen many situations where the Email Router is not able to connect to CRM due to proxy configuration. Within these environments, the internet proxy configuration is pushed out to users and not applied to servers/workstations.
If you still experience issues while clicking on Load Data after changing the service account to a domain user, then look at using a web debugger, called Fiddler, to try and give more information about what actual HTTP errors we are getting. Again, when clicking on Load Data, we are trying to access a couple of HTTP endpoints from CRM. In order for Fiddler to log the HTTP requests coming from the Load Data request, the Microsoft CRM Email Router service account must be the logged in user. Fiddler will only capture HTTP requests of the user that opened the application. We will cover using Fiddler in a later section but let’s view a situation where Fiddler can be used to help identify an issue with Load Data.
In this scenario, I can see that when clicking on Load Data I am getting a very generic response in my OnPremise environment with Claims and IFD enabled. When using the Auth endpoint for the Deployment Profile, the error I get from Load Data shows:
However, using Fiddler, I can get a better understanding of where the failure is occurring:
The error shows that it’s coming from ADFS. This could help me with troubleshooting as I now know to look at the ADFS logs and see what exception is being raised there.
After we have successfully loaded the users from the Load Data button, the next step to ensure the Email Router will work properly is to click on a user and then click on Test Access. So when we click on Test Access, what exactly is the Email Router doing? There is a lot of speculation of what this is exactly doing so let’s demystify and document what it actually does.
The first request being made is out to Exchange using EWS to do a GetFolder request for the default folder providing the user’s Mailbox email address and authenticating as the account within the Incoming Profile. The response that comes back should be that of the Inbox.
Now, as the account within the Deployment Profile, it logs into CRM and does a series of Organization service requests. The first one is a WhoAmIRequest. The WhoAmI response contains the user’s UserId, BusinessUnitId, and OrganizationId
The next CRM request being made is CheckRouterCompatibility. This is to verify that we are not using an older or newer version of the Email Router that is not supported by that version of Microsoft Dynamics CRM.
Lastly, we do a CheckIncomingEmailRequest and checking if the result comes back with a ReasonCode of ShouldDeliver
The first thing that happens is a WhoAmIRequest being made to the CRM server as the account specified in the Deployment Profile. The WhoAmI response contains the user’s UserId, BusinessUnitId, and OrganizationId
The next request being made is CheckRouterCompatibility. This is to verify that we are not using an older or newer version of the Email Router that is not supported by that version of Microsoft Dynamics CRM.
Lastly, it does one of the following:
SMTP: The Email Router is doing a HELO request. The router is looking for a ReplyCode of 220 within the response that comes back from the server. We can emulate a similar request by using a Telnet as discussed HERE:
EWS: The router is doing a GetFolder EWS request for the Default folder. The response that comes back should be that of the Inbox.
As long as no error is presented during these requests, then you should see Succeeded responses within the Email Router Configuration Wizard.
The next part of this post is to cover Troubleshooting Outgoing email issues.
SSRS Reports in CRM 2011 Online
Dynamics CRM 2011 Online now supports custom SSRS reports. There's a bit of setup required, though, including the installation of BIDS (part of SQL 2008) and a (free) add-on for CRM known as the Report Authoring Extension. In this video I go through the setup and show some basic SSRS authoring techniques.
What are methods in IOrganizationService
Use the IOrganizationService.Create method to create an instance (record) of any entity that supports the Create message, including custom entities.
Use the IOrganizationService.Retrieve method to retrieve an instance (record) of an entity.
Use the IOrganizationService.RetrieveMultiple method to retrieve a collection records. The query can be specified using a query expression or Fetch XML query. If the query includes an aggregate function.
Use the IOrganizationService.Update method to update an existing record.
Use the IOrganizationService.Delete method to delete an existing record.
Use the IOrganizationService.Associate method to create a link between two records that participate in a relationship.
Use the IOrganizationService.Disassociate method to delete the link between two records.
Use the IOrganizationService.Execute method to execute a message. This includes common processing like create and delete of data records and metadata, or it can be specialized processing such as import or detect duplicates.
IGH Solutions saves by switching to Microsoft Dynamics CRM
Hear how IGH Solutions switched over from Salesforce.com to Microsoft Dynamics CRM allowing them to save significant amounts of money and enjoy a cohesive environment in which their multiple business units can work.