Tip #99: Remember when your certificates expire

I will occasionally get the frantic “CRM is down” call from clients, and for on premises users, one of the most common reasons is expiring SSL certificates. If you just deploy CRM without claims authentication, when your CRM SSL certificate expires, CRM will still work, but users with receive a certificate error. However, if you deploy claims/IFD, if the certificate expires, the application will not be accessible by users. It will just stop working with no warning.

Administrators, if you don’t have a system for tracking expiration of SSL certificate expiration dates, you should have one. CRM can do that–set yourself a task for a month prior to the certificate expiration.

Tip #98: CRM SDK is now online

In case you don’t spend your afternoons lazily browsing MSDN pages online and missed this news, CRM SDK is now available online. Is it such a big deal? Not really, because you can always download latest SDK but

  • Online version is always up-to-date
  • When in need of a reference whilst discussing development topics, we can now simply point
  • It’s got boogle juice and is searchable using a browser and engine of your choice
  • Tips like this one becomes unnecessary
  • You can switch between versions for a topic

Tip #97: CRM Administrators Don’t Take this Shortcut

Okay, I understand, we are all busy and have more to do than time to do it. As CRM Administrators we can often spend most of our day reacting to requests with little time to actually plan our response.

Here is the typical scenario – The marketing manager calls you and lets you know that a new advertisement just appeared in the national trade publication. New inquiries are coming in right now and the ‘How did you hear about us?’ option set list doesn’t include this new marketing source. You are already backed up on other issues and don’t have a minute to spare to go into CRM and update the field. So what is the most expedient thing to do so the marketing managers’ VP doesn’t call your VP who calls you? You guessed it – assign the System Customizer role to the Marketing Manager or worse yet assign the System Administrator role so the manager can do it. Now you can get back to what you were working on.

DON’T DO IT!

Training is required for the System Admin or Customizer Role – they have extensive rights which can create significant Human Induced Catastrophe!

Any user that gets these roles must go through proper training first.

CRM System Admin

Tip #96: Reset temporary internet files after update rollup

Last week, most CRM Online organizations were updated to version 6.0.2.43 (update rollup 2). A number of users have reported after their environments were updated that users received error messages like the following

error

Error log text

<ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic" />
<Message>System.ServiceModel.Security.SecurityNegotiationException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #D359011E</Message>
<Timestamp>2014-03-21T12:24:39.6093808Z</Timestamp>
<InnerFault i:nil="true" />
<TraceText> [PipelineRollup: PipelineRollup.CreateFirstPipelineQuote] [1f88333e-1441-e111-8ef3-1cc1dee89ac3: PipelineRollup.CreateFirstPipelineQuote: Create of opportunity]
</TraceText>
</OrganizationServiceFault>

In most cases, these script errors will go away after resetting the browser cache/temporary internet files. This is a best practice–whenever you make a configuration change or you apply an update and users see unexpected results, the first thing to do is reset the user’s temporary internet files. Even if the user uses CRM for Outlook, CRM forms and charts and dashboards and reports and other system components are rendered using Internet Explorer.

Tip #95: Track emails using Forward Mailbox

CRM MVP Jukka Niiranen recently posted a great post covering the difference between activity tracking and synchronization in Microsoft Dynamics CRM. This is a frequently misunderstood topic, and Jukka does a fantastic job of explaining how tracking from Outlook gets the email into CRM, and synchronization updates activities automatically once the activities are in CRM.

So if you have users who are using CRM without Outlook and you want to track sent emails, one option is to use the forward mailbox option of the email router or server synchronization.

Things you need to know about the CRM forward mailbox feature:

  • CRM monitors the forward mailbox and tracks emails to CRM users or queues.
  • The user or queue’s email address must appear in the To or CC line.
  • The user associated with the email forwarded to the forward mailbox must have “forward mailbox” selected for their incoming email tracking method on their CRM mailbox settings.
  • The email must be forwarded as an attachment to the forward mailbox to be tracked.
  • The email address cannot be in the BCC line.

The forward mailbox is frequently used to provide a way for emails sent to a queue to be automatically converted to a CRM email in the queue, but it also can be used for tracking emails sent from outside of the Outlook client.

  1. Set up the forward inbox. This mailbox can use whatever email address you want. For example sake we will call this crmforward@company.com. .
  2. Create another email account and associate with a CRM user. For example sake, we will call this crmtrack@company.com using Microsoft Exchange 2010 or 2013. In CRM, set the user’s incoming email
  3. Log in to the crmtrack@company.com email box. One of the best ways to do this is using Outlook web access. Create an exchange rule to forward emails where crmtrack@company.com is in the to: or cc: line to forward the email to crmforward@company.com. Make sure you choose the option to forward as attachment.

Now when users create an email on their iPad that they want to track in CRM, they can CC the email to crmtrack@company.com. The Exchange rule will forward the email to the crmforward mailbox, from where it will be automatically tracked in CRM. CRM will automatically resolve any email addresses in the header to any accounts, contacts, leads, users, or custom email enabled entities.

Downsides to this approach:

  • Users cannot set the regarding object when they CC the email to the crm tracking email address; however, the standard activity rollup will make the email appear in the activity history of the parent accounts or contacts of any people who are activity parties on the email.
  • Recipients of the email will see the crm tracking address in the header, so you will want to be sure to use an innocuous sounding address for your tracking email address.

Tip #94: Cancel workflow in style

If you decided to follow our previous tip and cancel workflows only when necessary, you may wonder what does the Set Properties button for this step do. As it turns out, stopping workflow has a single property called Status message:

Cancel workflow properties

The best use of this property comes with the new real-time workflows in CRM 2013. If the workflow is part of transaction initiated by a user e.g. when creating a record, and Status message property is not set then the user will see a generic error message:

Business Process Error
ISV code aborted the operation.

If Status message property is set then it will be displayed instead of “ISV code aborted the operation.”. The best part is that status message can be built at run-time to contain references to the attributes of the workflow records:

Sample message for canceled workflow

Tip #93: When to cancel workflow

When a workflow needs to be stopped, workflow editor offers two choices: Succeeded and Canceled. The main difference is that Canceled status is considered to be an error which has the following implications:

  1. Log records are retained (if flag is set to retain logs for failed workflows).
  2. For real-time workflows the transaction the workflow is part of is rolled back and the entire operation fails.

In short, canceling workflow is considered to be abnormal termination and should only be used when something unexpected has happened, the entire operation should be canceled (for real-time workflows) and further investigation is warranted.

Tip #92: Cascading Relationships – The Forgotten Customization

If you have implemented your CRM organization and not done a sanity check of the built-in cascading relationships for the COLAC (contact, opportunity, lead, account, case) entities vs. your corporate business practices then you have missed an important step in the architecture process.

When you have a one-to-many relationship there are effects to the related entity when you make changes to the parent record. These changes impact ownership, record status/state, and access rights. You can accept the out of the box behavior or you can customize it to fit the way your organization works. For example when ownership of an Account record is assigned to another CRM user, who should own all the open and closed – activities, opportunities, cases, etc? This can have significant impact on performance tracking, access to records and customer insight.

The MSDN system has a good technical article on this subject. And although this link references CRM 2011 it is equally applicable to CRM 2013.

http://msdn.microsoft.com/en-us/library/gg309412.aspx

Dynamics CRM Entity Cascading Relationship

Dynamics CRM Entity Cascading Relationship

Tip #91: CRM 2013 Online Trials Direct Link

It is a defacto standard process these days to sign up for a 30 day CRM 2013 Online Trial for various purposes – testing a new solution, doing a demo, some ad-hoc experimentation or as a possible go live project.

However, if you go to links like the following, they won’t actually get you there very quickly or make it very hard to figure out how to kick off a new instance:

1. http://www.microsoft.com/dynamics/

2. https://community.dynamics.com/

The link to use and book mark is: http://www.microsoft.com/en-us/dynamics/crm-free-trial-overview.aspx

Tip #90: Simulate OnLoad event for form updates

As some people noticed, in CRM 2013 OnLoad event handlers are not firing after save of the form. This is by design as form saves and refreshes are now granular. That means that some of the code migrated from 2011 may not work as expected if it relies on OnLoad event being fired after every save. To avoid redesigning and rewriting the code, OnLoad can be simulated and the key to the solution is that OnChange event on individual field does fire after the form save if the field was changed on the server.

Let’s say you have the following sophisticated handler registered for the OnLoad event:

function Form_OnLoad() {
   Xrm.Utility.alertDialog("On Load");
}

and you want it to fire when anything is updated and form is saved (either by user or by auto save).

You can yell “Bingo!” upon completion of the following steps:

  1. Add a boolean (two options) field to the entity
  2. Add this field to the form, hide it
  3. Add Form_OnLoad event handler (or whatever it’s called in your solution) to that field
  4. What we need to force now is update of that field on the server-side. For that, add a real time workflow that toggles the value of the attribute:Toggle attribute in workflow
  5. Since this workflow needs to fire when anything changes, register it for all attributes with the exception of the system attributes like Modified On and the boolean field itself to avoid getting infinite loop errors.
  6. Bingo!