Create generic custom help pages in CRM2015

Since MSCRM 2015 is released, it is possible to create per entity  links to Helppages. So you can host some pages somewhere and open these from an entityform or view. It’s also possible to set one global Help URL for all entities include some parameters. The part with the parameters is interesting, because you get the possibility to create a custom helppage which is feeded with CRM data.

1. Create an entity for the helptext per entity

I created an entity ‘Helptext’ with two attributes:

  • Entityname: The technical name of the entity wherefore the Helptext is written
  • Helptext: In this field is the Helptext stored

helptextentity 2. Create a HTML Webresource, this is the helppage

We need one page which is called when the user press the help questionmark. The technical name of the current entity will be added to the querystring. With this name it is possible to query the helptext which belong to that entity.

For example, the HTML of the page look like this:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
		<title>Stammie CRM Help page</title>
        <script src="../../ClientGlobalContext.js.aspx" type="text/javascript" ></script>
        <script src="../Script/SDK.REST.js" type="text/javascript" ></script>
        <link rel="stylesheet" href="">
        <link rel="stylesheet" href="../Style/Macaw.css">

        <script type="text/jscript">
            function onLoad() {

            function retrieveData() {
                var div = document.getElementById('helptext');

                div.innerHTML = 'De data wordt geladen...';

                SDK.REST.retrieveMultipleRecords('mcw_helptext', "$filter=mcw_entityname eq '" + getParameterByName('typename') + "'", function (results) {
                    var firstResult = results[0];
                    if (firstResult != null) {
                        div.innerHTML = firstResult.mcw_helptext;
                    else {
                        div.innerHTML = "No helptext is configured for this entity.";
                }, function (a, b, c) { alert('Error: ' + b) }, function () { });


            function getParameterByName(name) {
                name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
                var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
                    results = regex.exec(;
                return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));

	<body onload="onLoad()">
        <div class="navbar">
            <h1>Stammie CRM</h1>
            <h2>This is the help page</h2>
        <div id="helptext" />

How does it works?

1. There is some HTML and some javascript in the webresource. When the page is loaded the  HTML is styled by the CSS sheets and the ‘onLoad()’ function is called.

2. The ‘onLoad()’ calls ‘retrieveData()’. This function execute an OData request to the CRM Service. It queries for the entity ‘Helptext’ where the mcw_entityname field is equal to the ‘typename’ parameter in the querystring. When the query result has at least one record, the helptext value of the first record will be shown in the ‘helptext’ DIV. So in this case the HTML can be styled whatever you want, you only need a DIV with id ‘Helptext’.

3. Setup the global help URL

Go to Setting –> Administration –> System Setting and search for the Custom Help URL part.


Set both booleans to Yes and add the URL of the Webresource to the URL field. This URL is shown when the webresource form is opened from the solution. The ‘Append parameters to URL’ boolean will add the typename (and some other) parameter to the querystring behind the URL. This parameter is used in the code as described  in step 2.

4. Add helptext for the entity
In this example we add some simple helptext for the ‘account’ entity:

Add a new ‘Helptext’ record (the entity described in step 1):


Make sure the entityname is always the technical name.

This is it. When you open an Account form or view and you press the questionmark right above, the custom helppage will be shown and the DIV is filled with the helptext as filled in in the Helptext Entity.


Ofcourse the page need some improvements. Maybe it is an good idea to add a WYSIWYG tekst editor or something in the Helptext Form to create simple markups in the helptext.


Index issues by migration CRM 4 database to CRM 2011

Some days ago I was asked by a customer to migrate their CRM4 organization to CRM2011. I’ve done this multiple times before so I said this will be no problem.

After starting the import wizard in CRM2011 the import tool breaks after one minute. The error said that the index ‘ndx_LocalizedLabel_ForTableJoins’ was not found on the database. That was true. The index was deleted by the customer by an Index Optimization Tool.

I tried to make a dummy index with the same name. This solved this issue, but while migrate the database again, the next errors occurs: ndx_LocalizedLabel_ForSingleSelect did not exist.

This happened two more times: ndx_LocalizedLabel_ForPublish and MetadataSchema.Attribute.attr_column_number.

So remember: You may add indexes to make better performance on the database, but NEVER delete the standard indexes. But when this is happened, you can add them with the same name, no matter what the index is really indexing.

CRM 2015 Released 2014Q4: What’s new

Microsoft has confirmed the next major release of Dynamics CRM will be available in the 4th quarter of 2014.
Microsoft Dynamics CRM 2015 (previously code-named Vega) will be an update for Dynamics CRM Online and CRM On-Premise editions.
As with any pre-release the new features and enhancements announced may be liable to change but here are 15 important updates to highlight!

1. Search Improvements

As a long requested user improvement we’re delighted that Dynamics CRM 2015 will enable universal searches to be run from any screen.
Click the new magnifying glass icon in the main navigation bar to open a search display. Keywords and (*) wildcard characters can be used to find records across multiple entities using your specified fields.
To find records using more detailed search criteria a new Advanced Find icon will also be added to the CRM nav bar.
On the search results page filters can be applied to display only the matches for a specific entity type.

2. New Outlook Configuration Wizard

Dynamics CRM 2015 will feature a redesigned Outlook Configuration Wizard to simplify the process for setting-up CRM and Outlook Integration

3. Calculated Fields

Automated field calculations can now easily be run in CRM thanks to a new field type.
Until now, Dynamics field calculations could be applied but only using custom script. In CRM 2015 automatic calculations can be set using inbuilt functions in the standard interface.
As a result a sales team can use calculated fields to:
• Check a weighted opportunity value based on probability
• Confirm the number of days an opportunity has been open
• Apply a % discount if a quote exceeds a defined value
Each of these field calculations can be performed automatically without the need to firstly run an on-demand workflow.
Calculated fields can be configured for multiple CRM entities and will reference other fields in the same entity, or fields in related entities.

4. Improved Business Rules

First introduced in 2013, Business Rules get a makeover in Dynamics CRM 2015:

  • Set default values and use SHOW / HIDE field business rules to personalise displays when new records are created to prefill data, &/or remove selected fields
  • Apply AND/OR, IF…ELSE, IF…THEN logic to define more complex rule structures, for example if a lead is for more than 50 units, or referred by an existing customers then mark as a hot prospect

5. Branching Logic for Guided Processes

Dynamics CRM 2015 develops the business process flow functions that were introduced in CRM 2013.
This resolves a restriction with the original release that did not allow branching logic.
CRM 2015 enables more complex flows to be defined including sales qualification processes which can split into two branches based on field values. For example, a sales process flow can be branched based on expected close time enabling a separate branch for opportunities due to close immediately.

6. Client API for Business Flows

Another improvement to business flows in CRM 2015 is the introduction of a client API enabling complete programmable access.
Using JavaScript code processes can be set to improve the transition between flow stages and ensure that users are working on the correct step.
For example, if a hot lead prospect is identified based on one or more field values JavaScript can be applied to accelerate this priority lead to a latter stage in the process flow thereby removing the need for CRM users to progress this lead through every defined step.

7. Sales Hierarchies

Users can now visualise a hierarchy of accounts, products or users from a new view in Dynamics CRM 2015.
The new hierarchical view groups associated records enabling CRM teams to explore and navigate these structures.

8. Product Entity Enhancements

CRM 2015 features several improvements that improve the management of products in Microsoft Dynamics.

  • Bundle products with tailored price lists to simplify opportunity / quote creation
  • Increase cross-selling by getting recommendations for add-on & complimentary products / services on the opportunity form
  • Set product attributes including ‘updatable’, ‘read-only’ & ‘hidden’ to control how individual products are used by a sales team in opportunities, quotes & orders

9. Improved CRM App for Tablets

Two improvements in CRM 2015 to call out for Dynamics on iPad, Windows 8 and Android tablets are:
• When working offline use drafts to create new CRM records & synchronise the changes
• Build an app home page personalised with pinned records & dashboard views

10. Rollup Fields

Do you ever need to know how many active cases a contact has? Or, the total forecast opportunity revenue for an account?
CRM 2015 introduces roll-up fields that capture metrics at record level and aggregates these statistics across one-to-many relationships.
Values are rolled-up from child to parent records as an asynchronous job which can be set to run as a recurring or one-off process.
Roll-up values on the parent record can be displayed a whole number, decimal, currency and date / time to summarise these values without the need to rely on a CRM plug-in.

11. Pause / Resume SLAs

Service Level Agreement entities were introduced in the Spring’14 update to help service teams resolve cases in line with agreed SLAs.
CRM 2015 adds further SLA capabilities including options to pause and resume SLA’s, and track how long a case was on-hold or awaiting a customer response.
Enhanced SLA details shown on individual case records list a history of SLA status changes detailing when a case was paused.

12. Improve Sync Between CRM & Outlook or Exchange

CRM 2015 enables users working with Outlook / Exchange to sync more types of information including:
• Additional contacts & task fields
• Assigned tasks
• Appointment attachments

13. Field Level Security for Standard CRM Fields

In addition to custom fields, CRM 2015 includes options for database administrators to restrict access to out of the box fields.
Permissions to access sensitive data can be more tightly controlled by hiding or setting read-only permission to all CRM fields.

14. Nested Quick Create Forms

The CRM Quick Create Form is expected to be updated allowing users to create new multiple records from a single screen. For example, a new account and a new child contact can be created from a single quick create display.

15. Changes to Supported Operating Software & Applications

As announced earlier in 2014, Microsoft has confirmed the following software will not be supported with Microsoft Dynamics CRM 2015:
• Windows Server 2008 & 2008 R2
• SQL server 2008 & 2008 R2
• Windows Small Business Server (all versions)
• 2008 Series Terminal Servers
• Windows Vista
• SharePoint 2007
• Exchange 2007
• Internet Explorer 8 & 9
• Microsoft Office 2007

That’s just 15 changes arriving soon in Microsoft Dynamics CRM!

Microsoft Dynamics CRM