Tip #1155: The Clock is Ticking on Your Endpoint

This is very much a collaborative post. Leon had a first go at it, George threatened to rip it all apart if posted because of the tiny technical inconsistencies. The verbal abuse discussion ensued, links were cross-checked, and now we have this.

We have known for a while that the Dynamics CRM 2011 endpoint is deprecated and, if we are using it to access the Dynamics 365 organization web service, we need to update our code. The linked article says

The 2011 endpoint will be removed some time after the release of Dynamics 365 version 9

Given this is a little vague, Leon raised it at the CRMUG Summit EMEA in Dublin earlier this year. At that time it was confirmed by Microsoft that the 2011 endpoint will be around at least until the release of v10.

So when is v10 coming out? At the time we did not know. Now looks like we do! The October ’18 Release Notes are out. This means that, assuming Microsoft stick to their schedule, and assuming that October release will be, in fact, version 10, it will be out in October this year. What does this mean for your Dynamics implementation?

No one can express it better than Matt “Platform Deity” Barbour (this is somewhat abridged and modified version):

  1. The deprecation does not mean that the endpoint will be removed AT version 10. Microsoft has a lot of metrics for various things including the SOAP usage and continuously evaluates the consequences of removing something as fundamental as the endpoint.
  2. The Organization Service (the IOrganizationService Implementation), used in the CrmServiceClient and Plugin\Workflow system is NOT deprecated. For folks building plugins, using the IOrganizationService is the right way to go, and will remain so for the foreseeable future.
  3. With regards to the CrmServiceClient, nothing changed since the deprecation notice.

    We plan to provide updates to the Dynamics 365 SDK assemblies and tools over the next several minor releases, retargeting them to use the Web API instead of the 2011 endpoint.

  4. Which approach to use?
    • If you’re building plugins, build around IOrganizationService and other SDK assemblies.
    • If you’re building using the .NET framework, the CrmServiceClient is the way to go.
    • If you’re building on non-Microsoft platform or .NET Core\Standard [at the moment], the Web API is the way to go.

Note that Web API is not explicitly mentioned in #2. For new developments you may want to consider Web API as well but do not expect the same level of support as exists for .NET, e.g. strong type support, authentication wrappers, diagnostics and such.

Why? Because OData, as an industry standard, has many different ways and methods folks can adopt to do this. Each offering their own flavor of features and capabilities to support the needs to the technology that is implementing it.

I’m sure that with time we will see 3rd party Web API wrappers emerging (and they do already exists) that will make development easier, and purists and minimalists happier. 

Call for action

Check the code that is talking to the Dynamics 365. Ensure that the code is using either Web API or SDK assemblies. This does not mean just plugins but anything integrating to Dynamics. It may be integration to another system or a custom web form application. All interactions need to be checked and if they are explicitly replying on the 2011 endpoint, bring them up to standard. The clock is ticking.

(And as painful as it is for me and many others, we’d have to admit that George was rightalmost two years ago.)

Tip #1154: When Unified Interface misbehaves

We know that Unified Interface is not yet on par with the classic UI. Some things are not yet there, some things will never be there because there are better ways to achieve the same results.

Since Dynamics 365 is a continuously updated beast, sometimes bugs and inconsistencies make their way into a working feature. The other day I was asked by Brent “I am a little afraid of what’s to come” Howard why, after the latest update for the Unified Interface (1.3.230-180801-000211) has removed the ability for users to Associate records in a N:N relationship. (To qualify: not just any relationships but the ones that involve contacts – t.j.). The workaround is for the user to switch out of the Unified Interface and use the classic UI however most of their work force are using the mobile interface and are only very basic PC users.

Walkthrough

When you add N:N relationship between an account and a custom entity, say, foo, and then add a subgrid to the account form, the menu looks like this:

N:N grid with Add Existing

That allows to associate an existing Foo record and create a new one if needed (association side panel has a +New button).

If you add a new N:N relationship between account and contact entity then subgrid menu will look like this:

N:N grid without Add Existing

Note that Add Existing is just not there.

Workaround

Kudos to Brett for finding the workaround that involves, you guessed it, poking around with the Ribbon Workbench.

  1. Create a small solution that includes contact entity and application ribbons.
  2. Open either standalone Ribbon Workbench or as part of the XrmToolBox and load that solution
  3. On the SubGrid ribbon you’ll find two Add Existing {0} buttons, select one with the Id of Mscrm.SubGrid.contact.AddExistingAssoc
  4. It’s a system button so nothing will show up until you right mouse click and select Customise Command (note that Scott is from UK and sneaked in correct spelling of the word Customise)
    Customise command for system button
  5. That will light up Solution Elements panel where you’ll find Mscrm.NotUci enable rule. The rule looks like this
    The rule that removes the Add Existing button
  6. Right click > Delete (you do have a backup, don’t you?)
    Delete the enable rule
  7. Publish the solution, then reload the form and here we go:
    N:N contact grid with Add Existing command

If I have to guess, the regression bug is in Xrm.Internal.isUci function from the Marketing/ClientCommon/Marketing_ClientCommon.js web resource but let’s wait and see how it’s going to be fixed.

(Facebook and Twitter cover photo by Tomas Sobek on Unsplash)

BAD Masterclass

CRM Tip of the Day and 365.Training present Business Application Developer (BAD) Masterclass

What is it

The Dynamics 365 Power Platform has a rapid release cadence and with that come the new features, new developments, and new challenges.This is your chance to get your hands on the new technologies and learn the new stuff before anyone else. Hear the news from the latest conferences and what does it mean for Business Application Developers.

Who’s behind it

BAD Masterclass is a brainchild of  yours truly, George Doubinski, founder of CRM Tip of the Day and CRM.Audio and David Yack, Microsoft Regional Director and author of https://xrm.tools.

What’s in it for me

Unlike any of the courses and trainings you find, it’s not about what you can do in Dynamics 365 world today, it’s about what will you use tomorrow. Aimed at proficient developers at the level 300-400, it covers new and upcoming technologies, trends, and best practices you need to create Business Applications for the future. It is delivered as a mix of presentations, talks, discussions, hands-on exercises, and developer challenges, all packed within 2 days of in-class learning.

This class is for all you experienced Dynamics 365/CRM developers who want to take your skills to the next level.

Where

    • 24-25 May 2018 Milan
    • 28-29 May 2018 Amsterdam (sold out)
    • 31 May-1 June 2018 London (sold out)
    • 8-9 October 2018 Colorado
    • 11-12 October 2018 Toronto

Agenda

Day 1

  • Introducing Masterclass and CRM Tip of the Day BAD Challenge
  • What’s new and what’s old for the Developer
  • Advanced Data Modelling
  • Group – Data Modelling Challenge
  • Form Scripting Updates + TypeScript
  • Work time – TypeScript
  • Virtual Entities
  • Work time – Virtual Entity Custom Provider
  • PowerApps: Canvas vs Model. Performance. Building custom data providers.
  • Group work time

Day 2

  • Themes from the latest conferences and announcements, and what does it mean for Business Application Developer
  • Authentication Essentials + Work time
  • Azure Building Blocks Overview
  • Azure Functions + Group work time
  • Logic Apps + Group work time
  • Cognitive Services + Group work time
  • Developer Challenge Wrap up

Note: Agenda is subject to change

Tip #1153: When Upgrading, Consider the Whole Ecosystem

It is that time of year when people turn their thoughts to upgrading; the October 18 release has been announced and for those on Dynamics 365 Online v8, the clock has started. I was recently with a client who had a pretty typical setup. They had Dynamics 365 Online, NAV 2016, and an online shopping system. They asked me about the looming upgrade of Dynamics 365 and if they should be concerned about anything.

I raised the usual recommendations regarding upgrading Dynamics (backing up, doing it in a non-production environment first etc.) but then we got talking about the rest of the setup. Firstly, they were using the NAV 16 Connector to talk to Dynamics but it was not working 100%. They had custom fields in NAV which never made it to Dynamics and this compromised the reporting in Dynamics, limiting its usefulness to the sales team. Knowing the NAV 16 Connector was not an on-going concern for Microsoft (and that it never handled custom fields well), the obvious choice was to move to Azure ASAP.

So we should upgrade NAV 2016 before the end of the year, right? Well there was another problem. NAV 2016 was connected to the online shopping system via a proprietary integration piece. If NAV 2016 got upgraded this would break and the online shopping system would need to be upgraded. The problem? the estimated cost to upgrade the online shopping system was six figures. Coming up with that in the next few months would be tricky.

The end solution? Dynamics 365 would go first. This was relatively low risk given the limited customisations and should not affect the other components. Next, rather than upgrade NAV 2016, I recommended they get either a custom NAV 2016 Azure Connector developed to meet their needs or, if this was too difficult, develop a custom integration piece. Initially this could cover the custom fields missing from Dynamics 365 and then, once it proved successful, expand to cover the entities and fields of the incumbent Connector if they wanted to manage it in one place. I warned them if a custom integration piece was developed it would likely be thrown away in the future as they move to using more Azure components but it was a reasonable short term measure until they upgrade the shopping site and NAV 2016.

The moral of the story? Consider the full ecosystem when looking to upgrade and the consequences it might have. Also, while there may be an obvious solution such as getting off of the NAV 16 Connector, consideration of the bigger picture may sometimes require short term compromise, rather than perfection.

Tip #1152: Attachments to Dynamics 365 Notes

Flow is great but can be frustrating at times, as Jerry “Once tipster – forever tipster” Weinstock has discovered when trying to add attachment to a note in Dynamics 365.

This is his story

File uploads to OneDrive etc work great. Files attach to emails with no issue. A super slick Flow feature! I am trying to get a photo to be an attachment to a Dynamics 365 Note. (Note creation works perfectly)

clip_image002

I have tried both the Dynamics 365 Create Record action and the new CDS Create Note (annotation) action. Both essentially return the same failure file type message when I try to open the photo.

clip_image004

I have tried wrapping it in in an expression, no positive results. Am I trying to do something that can’t be done currently or just not doing it right?

Help is on its way

Turns out, Create Note (annotation) action is not the right one to use in Flow, Dynamics 365 Create Record is the way to go. According to Stephen Siciliano (Principal Group PM Manager at Microsoft, in case you were wondering):

Specifically, you will need to base64() encode the data that you’re passing to the Document property. To associate it with a given record populate the Regarding field:

clip_image002

Tîpp Jäår $0.02

So, in short, create note attachment in one sweet action and use base64 to make sure that the content is right.

(Facebook and Twitter cover photo by DiEGO MüLLER on Unsplash)

Tip #1151: Name that web client

With so many upcoming and constantly changing features in the world of Dynamics 365/CRM, it’s no wonder that even the best of us are getting confused when it comes to naming things.

Regardless of what interface is chosen, it all looks like a web client Mark “Globetrotting Kiwi” Smith:

Currently what I hear used is Unified Interface or UCI is for the new interface and the old interface is the Web Client.  This seems strange to me as both interface still run in a web client or am I missing something?

Ask and you shall receive. Clarification came from Shilpa Sinha, Principal PM at Microsoft:

Unified Interface is the external name for the new interface and we are referring to the old interface as Classic UI.

So here you go, folks, they are both web clients but if anyone asks, it’s a new, exciting, and highly performant Unified Interface vs fully-featured but at some point becoming thing of the past Classic UI. As we know, classic stuff is perpetually in vogue with some people and, as with any antiques, it will get very expensive with time.

(Facebook and Twitter cover photo by Adrian Korte on Unsplash)

Tip #1150: Does your CRM pass the WIFY test?

When deploying Dynamics 365, and important question to as is What’s In it For You (WIFY). For each role — salesperson, csr, marketing, technician, what is the “why” for that user that will drive their adoption of the system.

If you cannot clearly answer that question, there is a strong chance that the adoption of the system will be limited. Or if your answer is “we want them to…” it is a clear sign that the system is driven more by what management wants than what users need. Will the value that users receive from the system be greater than the amount of work they need to invest in it? In many traditional CRM deployments, that answer has been no — say we want our users to put all of their contacts in the system and track their activities — people will not see value from the system until they invest a fair amount of time to populating their data in the system.

Fortunately, Microsoft has added many intelligent features to Dynamics 365 Online that reduce the time to value for users and makes the application a system that users want to use. Some examples:

  • Insights powered by Inside View
  • LinkedIn Sales Navigator
  • Relationship Assistant
  • Email insights
  • Coming soon — Who knows Whom powered by office graph
  • Coming soon — Text analysis and recommendations from notes
  • Coming soon — AI based talking points that summarize important details from activity history

By giving users an intelligent system that provides value without requiring a major investment of effort by users, you will provide an application that makes user’s lives easier and in return gives management what they want.

(Facebook and Twitter cover photo by Riccardo Annandale on Unsplash)

Tip #1149: Create custom schedule for your flows

Today’s tip is from Marius “flow like a river” Lind. (And you can also become a tipster by sending your tip to jar@crmtipoftheday.com)

A great man once asked,

can I set a custom schedule for when to run my flows?

The answer is yes, and like so many other solutions it involves nesting flows.

  1. First, create a flow which has a timer trigger, I created one which triggers once per month.
  2. Next, I create parallel branches inside this flow, for each branch you initialize a new variable.
  3. Now add a “do until” loop which says loop until variable equals whatever you need.
  4. Next you add a/multiple start flow action(s) which triggers the flow(s) in question.
  5. Add a delay action which delays for the time period you need.
  6. Finally add a variable incrementor.

Timed flow
Now you’ve got a flow scheduler which can start your flows in whatever fashion you need. Happy pillaging!

Tip #1148: Use visual controls + calculated fields to create an in-form dashboard

Want to add some sizzle to you form configuration? Phil Dudovicz recommends using visual controls with calculated fields to create a nice looking dashboard in your Dynamics 365 Unified Interface form. The following is an example of an investor form that visually displays relevant investor data.

Let’s take a closer look at how this is built:

  1. Current Year return

  • Calculated Field
  • Data Type: Decimal Number
  • Field Type: Calculated
  • ((new_investmentvalue – new_investmentvaluejan1) / new_investmentvalue) * 100
  • Control: Arc Knob
  • Value: hsl_currentyearreturn
  • Min: .1
  • Max: 15
  • Step: .1

2. Return vs. Goal

  • Data Type: Decimal Number
  • Field Type: Calculated
  • (new_investmentvalue / new_investmentgoal) * 100
  • Control: Arc Knob
  • Value: hsl_goalprogress
  • Min: 0
  • Max: 100
  • Step: 1

By combining visual controls with calculated fields you can easily add visual context to a record and give your users a richer user experience.

Thanks for the tip, Phil. Do you have a tip for us? Send it to jar@crmtipoftheday.com.

(Facebook and Twitter cover photo by Paula May on Unsplash)

Tip #1147: Revisiting Queues and Teams

Almost two years ago I wrote on the merits of using Teams vs Queues for managing Cases. While I stand behind what I wrote (Teams are simpler but Queues are more powerful) another element raised its head recently which is worthy of consideration if you are going down the path of setting up Case management.

Teams are a great, simple way of managing Cases. You set the ownership and set up some dashboards to view the Cases and you are away. However, unlike Queues, Teams have another important purpose in Dynamics: security. A common security pattern in Dynamics is to have separate Business Units, each with a ‘sharing Team’ so that Users in one Business Unit can hide their records from the other Business Units or allow specific individuals to see them via the sharing Team. I described this model in Tip 1067. So what happens when these two ideas collide?

For the most part using Teams for security and Case management still works ok. However, if you have a list showing “All Cases Owned By My Teams” make sure the list of Cases are the ones you expect. Similarly if you have a “All Cases Owned By User in My Teams”, make sure these are the Users you are expecting. In short, as you are using Teams as both a grouping for Cases and a grouping for Security, if the groupings are not aligned, there may be confusion and unexpected results.