Bug in business process flows created before december 2016 update (CRM v8.2)

Microsoft has intoduced some really nice features with Dynamics 365 (CRM v8.2), but also a bug for business process flows of existing customers created before the december 2016 update. This causes an error message on switching to another business process flow or the completly disappearance of the business process flows from the form.

Jiří Pešík has already blogged a method to identify and resolve the issue, but from my point of view it is not cloud suitable and not supported,because there are changes made directly on the database.

Cause

With the new features came also new fields in the system. Unfortunately they haven’t been filled during the update for already existing business process flows. One of them is the required field “uniquename” of the “workflow” entity. You can even see it when open the details pane of the new business process flow editor.

Bug in business process flows created before december update (CRM v8.2)

Identification

You can use a simple query in the advanced find to identfy concerned business process flows.

Bug in business process flows created before december update (CRM v8.2)

Resolution

Is just as easy as the identification. Deactivate your business process flow and the system will fill the name automatically and you can activate it again immediately. No code, no sql, just magic. 😉

 


Empty pipelinephase on opportunity quickcreate

You all know the most common usage of the pipelinephase field of an opportunity. It’s the sales funnel chart in sales dashboards.
By default the pipelinephase field is filled with the number of the current business process, followed by its name. But sometimes it stays empty. You can imagine how unhappy the sales guys are about that.

What I found out

It depends on how you create the opportunity. If you create an opportunity through the quickcreate feature, where it does not matter if you use the global “+” sign or the contextual “+” sign of a subgrid to create it, the pipelinephase field will not be filled until you step further in the next phase.

Workaround

Build an asynchronous workflow on opportunities that is triggered on create and fills the pipelinephase field if it is empty.

Below you find a solution to download that contains this workflow. It takes dynamically the phase name of the current business process. It is also an ondemand workflow, so that you can run from a view or advanced find that shows you all open opportunities with an empty pipelinephase field.

Issue reporting

There is already an proposal on CRM-Ideas for this issue. You can find it H E R E. It is already 9 month old and has only 4 votes. My appeal to you, follow the link, sign in and vote for it. The more votes it get, the higher is the attention from Microsoft.

 


Internet Explorer and promises

Microsoft shows us on Get started with the Microsoft Dynamics 365 Web API (client-side JavaScript) how to create a re-usable function using promises. Between the description and the example is a little note box that points out that Internet Explorer 11 doesn’t implement native promises. Most other browsers support promises natively, IE is the problem child – again.
Microsoft further advises that there are several polyfills and libraries which will implement promises to IE. But they don’t tell you how do this in an effective way.

Detection

As you don’t want to add and load superfluous libraries, you have to detect if the browser has promises implemented. In my first approach I used modernizr. 2KB more just for detection. That is not what I wanted and searched for a plain js solution and found it at stackoverflow.

Agony of choice

Now that we can detect if the browser has implemented promises or not, which polyfill or library should we implement additional? My decision fellt on the smallest possible solution I found – ‘ES6 Promise polyfill’ with only 2KB.

 


ImportSequenceNumber field in Dynamics 365

Today I stumbled over the meaning and purpose of the “ImportSequenceNumber” field in Dynamics 365 (or Dynamics CRM, If you have not got used to it like me).

The ImportSequenceNumber field itself

It’s an integer field that is reachable through the field list in a solution. It is searchable but you are not able to add it to a form.

ImportSequenceNumber field in Dynamics 365

ImportSequenceNumber purpose

Every import in Dynamics 365 is numbered with an ascending number which is globally stored in the “Organization.CurrentImportSequenceNumber” attribute. Every record created during an import gets this number as value for the ImportSequenceNumber field.
By this way Dynamics 365 can show you all records that are created during an specific import or let you delete all records created by an import.

ImportSequenceNumber field in Dynamics 365

 


CRM 2016 and Firefox 49 issue with notes

Since a few weeks I hear from more and more CRM users that their CRM notes have disappeared. They are all using Dynamics CRM 2016 (Online or Onprem) and Firefox. Other combinations are currently not affected. So it must be an CRM 2016 and Firefox 49 issue with notes on how Firefox retrieves the notes or displays them.

Analysis

You can very quickly see that it is “only” a display problem when you opening the same CRM record with two different Browsers.

on Firefox 49

CRM 2016 and Firefox 49 issue with notes

on Chrome 54

CRM 2016 and Firefox 49 issue with notes

But, what happens? To find this out we have to deep dive into the CSS styling of CRM.
The Firefox developertools show us that Firefox has calculated “transparent” as color for the notetext.

CRM 2016 and Firefox 49 issue with notes

A look into the CSS source file shows us what Microsoft has defined as color.

CRM 2016 and Firefox 49 issue with notes

Exkurs: CSS coloring
Colors in CSS can be specified by the following methods:

  • HTML color names (140 named colors are available)
    {color: Aqua;}
  • RGB colors
    {color: rgb(0, 170, 255);}
  • RGBA colors
    {color: rgba(0, 170, 255, 0.5);}
  • HSL colors
    {color: hsl(200, 100, 100);}
  • HSLA colors
    {color: hsla(200, 100, 100, 0.5);}
  • Hexadecimal notation of RGB colors
    {color: #00AAFF;}
  • Hexadecimal shorthand notation of RGB colors. The browser doubles here every digit.
    {color: #0AF;}

CRM 2016 and Firefox 49 issue with notes

Now it is clear to you that Microsoft uses the hexadecimal notation, but not if it also wants to use the shorthand notation. Browsers until now ignored the fourth digit and interpreted it as shorthand notation and calculated #000000 (Black) for the note text. Till now we are talking about an inaccuracy that nobody has disturbed.

Firefox 49 Release Notes from September 20, 2016 – SOURCE
Excerpt: “Added support for specifying colors with an alpha channel using 4- and 8-digit CSS hex color values (#RRGGBBAA and #RGBA)”

BAM! There is the problem. Mozilla introduces the hexadecimal and hexadecimal shorthand notation of RGBA colors
Starting from Version 49, Firefox interprets Microsoft’s inaccuracy as an #RGBA value and calculates #00000000 from it what is black with 0% opacity as result.

Solution

The solution can only be delivered by Microsoft and is already included in Dynamics 365 (CRM V8.2). So I think it will be also fixed within the next update for CRM 2016.

Workaround

Instead of telling you to avoid Firefox until Microsoft provide a fix, I created a small script that corrects the color attribute for the notes. I know, it’s unsupported.

Drag and drop the “CRM Notes Firefox Fix” button on your Firefox bookmark toolbar to use it as bookmarklet. Click it each time you don’t see notes on CRM.

 


Dynamics CRM Bookmarklets V2

About a half year ago, I’ve shared my Dynamics CRM Bookmarklets collection with you. Currently the collection has been reworked several times and the number of Dynamics CRM Bookmarklets Sammlung has been nearly doubled. I was influenced particularly with the new ideas for the bookmarklets by Jukka’s ‘CRM Navigation Hacking’ and Markus ‘Find Dependencies for Uninstalling Solutions’.

Compared to my first “Dynamics CRM bookmarklets” article, the display format has changed. Mainly because the implementation was not working clean as a hyperlink. In addition, some functions were still packed in an anonymous function.

Do you want to use one of bookmarklets, you just need to creat any bookmark in the bookmark toolbar of your browser and you change the URL to “javascript: (function () {…” and everything after the line comes from.

If you work with several browsers and want to your bookmarks synced in all of them I can recommend you Xmarks.

Updates!

  • 2017-09-21: added “open record by id”
  • 2017-09-21: updated “update view”
  • 2015-07-19: added “new solution” and “open default solution”
  • 2015-04-26: added “open perfomance center”
  • 2015-04-19: added “update view”
  • 2015-04-15: added “clear localStorage” and “clear seesionStorage”

Should you have own ideas or bookmarks that I have not covered here, you can send me them very gladly.

 


E-mail tracking with custom email fields

Anyone who has ever worked with the Dynamics CRM for Outlook client, is familiar with the procedure of email tracking. You press the “Track” button and the CRM client creates on an e-mail record on the CRM server which again resolves the recipient and sender addresses, and linked to the corresponding records. But what if I want to same more e-mail addresses?

Are e-mails tracked when the e-mail adress is noted in a custom field?

The entity “Contact” has by default already three e-mail address fields. So, I’ve created a custom field as the fourth e-mail field.

When creating your own e-mail address field, it is important that chooses the “e-mail” format. So the CRM know that it can search here for e-mail addresses. By the way is then performed a validation in this field and the e-mail address is formatted as a mailto link, so that your email client will directly open when you click it.

new email field for contact

Next, I’ve created a contact record with four different e-mail addresses and wrote them a message to them and tracked it.

Conclusion to E-mail tracking with custom E-mail fields

In the following screenshot you can see that it works perfectly. All present and the new e-mail address field are actually assigned only by tracking to the contact, to set a regarding was not necessary.

contact with four mail addresses

 


Workflow ExecutionTimeSpan

Last week I had a problem as part of a service request at Microsoft. I should test how long it takes to create a record for a particular entity by a workflow. The whole thing had to be very precise, because the request has been caused by an excessive execution time of a plug-in chain when such a record has been created.

Experimental Setup

The workflow should create a new contact, based on the data of an existing contact record. Let’s name it a Light-copy without relations. It is so configured that an entry in the systemjobs will be created.

Workflow-Log

Unfortunately, the workflow log is not as meaningful as intended. It contains the only times to the minute.

Workflow ExecutionTimeSpan

But that brings me at least an idea. Dynamics CRM stores the data internally with a higher accuracy than it displays it on the surface. Now I just have to get that data, mind you in a CRM Online system.

Workflow ExecutionTimeSpan

Since it is well known fact that you can not access the database in CRM Online directly, I planned to create a query that returns “Created On” and “Modified on” of my workflow. I used the OData Query Designer from the Dynamics XRM Tools to create that query.
When selecting the fields for my query I found a field named “Zeitspanne für Ausführung” field, or in English “ExecutionTimeSpan”. BINGO! That sounds good!

The Query

YOURSERVERURL/xrmservices/2011/OrganizationData.svc/AsyncOperationSet?$select=Name,StartedOn,CreatedOn,CompletedOn,ModifiedOn,ExecutionTimeSpan&$filter=OperationType/Value eq 10&$orderby=CreatedOn desc

To make the URL more understandable for you:

  • The Organization Data Service (OData) URL of your CRM.
    YOURSERVERURL/xrmservices/2011/OrganizationData.svc
     
  • The table from which I need the data.
    AsyncOperationSet?
     
  • The columns from the table that I would like to see as result.
    $select=Name,CreatedOn,StartedOn,CompletedOn,ModifiedOn,ExecutionTimeSpan
     
  • There should be only system jobs of type “Workflow” being returned.
    $filter=OperationType/Value eq 10
     
  • Finally, I would like to have the results sorted by creation date, so that the most recent are on top.
    Who wants to look for a long time.
    $orderby=CreatedOn desc

The Result

In the marked area you can see the columns that we have retrieved and in line 23 the value of workflow ExecutionTimeSpan.
Thus, so the workflow had an execution time of 1.7 seconds.

With Power Query for Excel you can you view the data a little more beautiful, or a whole series of workflows to evaluate and calculate averages with Excel or be generated diagrams. Simply Excel.

Hope it helps!

 


Pass parameters to HTML Webresource

A HTML webresource can not just only show HTML elements on your form, furthermore you can work with JavaScript in it and interact with your form. IF you want to access the Xrm namespace of the form inside your HTML webresource, you simply need prepend “window.parent” to your function call.

This looks like in this example:

If you need a lot of such calls, you can make your life easier and create your own local variable and assign it the complete Xrm namespace
This could look like this:

Pass parameters to HTML Webresource

Alternatively, you can also pass static values to your webresource. Just add a custom parameter in properties dialog of the webresource.

Pass parameters to HTML Webresource

You can access the custom and contaxt parameters with the following script inside your webresource:

The custom parameters should be in the form “Name=Value” should be separated by comma.

The debugger shows you all the accessible parameters:

Pass parameters to HTML Webresource

Context parameters are green marked, custom parameters blue.

You can now access your values through the named array.

Have fun with it!