Tip #1078: Illustrated tipster guide to the decision making process

The binary choices seem to rule the Dynamics 365 landscape as of late. Everyone has an opinion, everyone seems to know the right way to do things, everyone stands by their choices until their last Dynamics breath.

To stop very mature “did not – did to!” arguments when designing, building, and operating Dynamics 365 solutions, we present the ultimate, the one and only, the illustrated tipster guide to the decision making process:

(Full size hi-res image)

Judicious application of spießrutenlaufen is encouraged, as usual.

Tip #1077: Connect to the right instance

As Guido “Future Olive Farmer” Preite has discovered, sometimes CrmServiceClient may connect to the wrong instance. Just like that.

Dynamics 365 instances now can be backed up and restored at will. The side-effect of this awesomeness is that URLs and unique names may no longer match, leading to the fun times with connections. Here’s the scenario:

  • Instance https://foo.crm.dynamics.com with a unique name bar
  • Backup and restore that instance into https://bar.crm.dynamics.com, the unique name will be something like org1234567
  • If you use CrmServiceClient with a connection string that points to https://bar.crm.dynamics.com, it may actually connect to the first instance.

If you do experience this behavior, the workaround is to specify organization unique name in the connection string, i.e. use https://org1234567.crm.dynamics.com as URL parameter.

Thanks to Clément “French but not Tanguy” Olivier for the workaround and Matt “SDK Deity” Barbour for explaining the scenario.

(Facebook/Twitter cover photo by John Carlisle on Unsplash)

Tip #1076: Add all assets to your solution

A good observation from Nick “Benchpress” Doelman that, once you click Add All Assets when adding an entity to a solution, you won’t be able to remove any of the assets of that entity. Both, Add and Remove Components buttons will be gone.

The reason is fairly straightforward (though options could have been labelled better). Add All Assets does not simply mean “I want it all now!”, it implies the future as well, i.e. “I want it all now and forever”.

Add All Assets is like a super-vindictive ex-partner: gets all your assets after the divorce and still receives a slice of any future fortunes.

When Add All Assets option is checked, you no longer control assets of the entity, you just get them all. If someone else adds, say, a view, a form, or a field to the entity, you’ll get them in your solution as well. This is in a contrast with selecting some or even all components one by one where your solution won’t automatically get the future additions.

The components are easy to miss, make sure you test the solution export after crafting your selection. As Steve “Still an MVP” Mordue has pointed out, it’s possible to inherit some invalid attributes that would require a manual intervention.

Tip #1075: Get off the bad server process

One minute your instance is humming along just fine, then suddenly it’s spewing strange errors something like

The customized site map could not be used because it is configured incorrectly. The default site map has been applied instead.
To resolve this issue, repair the customized site map and import it again.

The url, as frequently is the case, contains even more bizarre

Error Details: Sub area with id “nav_workflow” has an empty title.

The sandbox copied couple hours prior is humming along just fine, the other users report that they had this issue few minutes ago but everything is unicorns and rainbows right now.

Most likely, there was indeed a temporary issue that has been resolved but now you are stuck with the bad front-end server/process that is dealing with your requests. Quick test: if you can connect in incognito mode then the rotten service-side connection that your session is pegged to (by the application load balancer), is most likely the case.

Solution: Delete the ApplicationGatewayAffinity cookie. How exactly you do that, depends on the browser (Firefox, Chrome). You don’t even need to logoff.

(Facebook/Twitter cover photo by Denny Luan on Unsplash)

Tip #1074: The minimum you need for an opportunity

I like to keep things simple and, sometimes, Dynamics’ in-built functionality make things complicated. Opportunities (and Leads) are a good example of this. There is no doubt Dynamics 365 is great choice for managing a sales pipeline but you need to find a balance between using all the functionality provided and keeping the system flexible enough to meet unanticipated future needs as well as friendly enough that sales people will use it.

So what is the minimum you need to manage a sales pipeline in CRM?

First of all, no Products. Unless you sell well defined widgets with well defined prices, Products will need some work. Then there is the whole setting up of price lists, tax rates, and units of measure and so on. Remove Products (if you can) and things get simpler.

In terms of fields, I believe the minimum Opportunity fields you need to have a pipeline are:

  • Contact or Account (depending on whether you are selling to people or companies)
  • Estimated Revenue (how much the deal is worth)
  • Probability (so you can weight the expected revenue when projecting future sales)
  • Estimated Close Date (so you know which quarter/year/reporting period the sale will close in)
  • Status Reason (So you can categorise your pipeline)

Arguably, Status Reason could be swapped out for Stage and you could link the stage with a probability via a workflow but, again, things are getting complicated and not necessarily adding value (we are stuck with Status/Status Reason anyhow so why not use it?). In terms of automated probability, sometimes an Opportunity at an early stage is a sure thing and Opportunities at a later stage are more shaky (lawyers arguing over the contact terms anyone?) At least at the start, my preference would be to leave stage and probability unlinked and let the sales person enter the values independently.

In my experience it is better to start out with a basic system and build on it, than build a complex one and try and simplify it later. To reference my favourite quote from Civilization IV, “A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away.”

Tip #1073: The story of the small change

“It’s a small change, we don’t need to test it” said many a CRM administrator. What could go wrong?

Maybe this ancient CRM proverb will make you rethink that idea:

Because the admin added a field to the opportunity form, the field count increased beyond the mobile field count limit,
Because the field count increased beyond the mobile field count limit the form script couldn’t find the “next appointment date” field on the opportunity,
Because the form script couldn’t update the “next appointment date” field, the workflow that creates the appointment didn’t run,
Because the workflow that creates the appointment didn’t run, the sales meeting didn’t synchronize to the sales rep’s calendar,
Because the sales meeting didn’t synchronize to the sales rep’s calendar, the sales rep missed the meeting,
Because the sales rep missed the meeting, she lost the sale,
For the want of a sale, the sales rep was fired,
And all for the want of a proper testing procedure on small configuration changes.

Many variations of this proverb have appeared over the years, such as one where an administrator removes an option from an option set that makes a business rule fail, leading to corporate bankruptcy, or a configurator adding a lookup field to the accout form without granting users security permission to the lookup entity making an approval process not run, causing a nuclear power plant reactor meltdown. Whichever variation you prefer, the lesson is the same:

  • Small changes can have big consequences
  • All changes, no matter how small, need to be properly tested before moving to production
  • There is a correlation between complexity of form scripts and work flows and the amount of testing required for small changes. A form with very few automations will need minimal testing when making changes to it, a form with many complex dependent automations will require extensive testing of modifications.

Tip #1072: Open existing contact in All Contacts view

I need to get out more often. Thanks to the relevance search, I have not used All Contacts view since the awkwardly named Dynamics 365 July 2017 Update seen the light of the day. Because if I have had, I would have noticed that clicking on any contact in this view opens New form instead of opening the existing record. Demian “Sostenga mi cerveza” Raschkovan pointed that out to me and casually mentioned that copying the view and replacing the system one with the cloned copy solves the issue.

Credit is where credit due. Nishant Rana mentioned this bug in October last year. And I like the workaround by Davide (thank you – whoever you are!) – just add and remove any column, publish customizations and the system view is now working!

Tip #1071: Extract images from Power BI

Scott “I don’t want to can’t be an MVP anymore” Sewell may have swallowed the blue pill (or was it the red pill?) but he still produces occasional nuggets of wisdom.

According to Scott, if you need to extract a background image or a custom element from an existing Power BI file, make a backup of the file, then rename the backup’s file extension from .pbix to .zip and extract the contents. The background files are stored as gifs or jpgs or whatever they were uploaded as. You’ll find them under the \Report\StaticResources\RegisteredResources folder within the zip. (And don’t get me started on whether it’s pronounced “gif” or “jif” – because I (Scott, that is – t.j.) prefer “jeef”…)

If you don’t have the report in Power BI Desktop format, you can export the report from the Power BI service.

(Facebook/Twitter cover photo by Vadim Sherbakov on Unsplash)

Tip #1070: Some Tips For Portal Web Forms

My team have built a fair few portal web forms in our current project and, over time, we have learned a few lessons. So, if you are about to launch into building web forms for a project, here are some pointers that may assist.

Plan Out the Web Form

The best lesson I learned from the first year computing course I did at university was to plan before you code (or in this case configure). It is very easy for a web form to get complicated very quickly, especially if there is branching in the form. Plan it out, simplify it where you can so you do not tie yourself in knots.

Use a Custom Entity

We have learned the hard way not to link web forms directly to, say, the Case entity. The problem is, as the number of web forms increases, the number of fields blow out. Putting them all on the one entity is a recipe for disaster (while substantial, there is a limit to the number of fields permissible on an entity.) Store web forms on a custom entity and use workflows to ‘convert’ them (you can always add form values to the Case description field after all). Use the same entity for groups of web forms where it makes sense i.e. where the same fields are used again and again. The other advantage of this approach is you get a definitive record of what was actually entered into the form before the Dynamics Users get a hold of the data.

Build the Web Form Backwards

The web form requires a starting step and each step needs to know the next step to go to. So if you build them in order, you have to remember to go back and link them all up. The alternative is to build the steps in reverse order.

Learn Metadata

Web form metadata provides a simple, yet powerful way to modify the behaviour of the web form steps. Learn what metadata can do. You will be pleasantly surprised.

Get a Good Developer in Your Corner

Configuration and metadata can only get you so far. Get a good developer in your corner for when you need to do something REALLY clever. Remember though, clever does not always come cheap.

Adopt Conventions

Another lesson from the school of bitter experience, is to adopt conventions for your web form configuration. Have conventions on how you name the entities, CRM forms (are they used by multiple web form steps, for example), web forms, web form steps and so on. A little bookkeeping up front will save a lot of headaches later on.

Tip #1069: Dynamics 365 for Marketing Preview is available

The shroud of NDA secrecy around Dynamics 365 for Marketing has been lifted and you can now watch Introduction to Dynamics 365 for Marketing.

EDIT 08-Feb-2018
Official announcement is available as a post by Kishan Chetan, Principal PM Manager, Dynamics 365 for Marketing. Tired of reading? You can now listen to Steve “Mr SMB” Mordue having a podcast conversation with Kishan on the topic.

You can also be awed by the new email designer, learn about customer journeys, or qualify your hottest leads.

The marketing (duh!) blurb reads

Turn prospects into business relationships with Microsoft Dynamics 365 for Marketing. Find and nurture more sales-ready leads using multi-channel campaigns and personalized lead nurturing. Align sales and marketing together with one source of shared information, connected processes, and Office 365 collaboration tools. Make smarter decisions using concise dashboards and reporting to improve marketing ROI.

If you’re fan of marketing but not marketing blurbs then go ahead and sign up for the preview program.

Unlike ill-fated MDM, This.Looks.Promising

(All marketing images look extremely generic and boring so for our Twitter/Facebook cover image I opted for a kitten. By Mikhail Vasilyev on Unsplash. Can’t go wrong with a kitten, right?)