Use feature flags in your plugins

Lately, there was a discussion on Twitter about the best practice to handle plugins: One class per plugin? One project per plugin? or anything else? On my side, I'm using one project for all the plugins for the same customer. This is what I answered on Twitter. Then came a question : How do I handle the fact that some plugins may have not been tested or completed yet and I need to release the plugins assembly. The answer was : Feature flag! What is a feature flag? It's a concept that will allow to enable/disable some features or portion of code depending on a configuration. Let's take an example where a plugin must execute two features : Feature A and Feature B public class MyPlugin : IPlugin { public void Execute(IServiceProvider serviceProvider) { var service = new MyCustomService(); service.ExecuteFeatureA(); service.ExecuteFeatureB(); } } We need to find a way to execute conditionally these methods, let's say because feature B

What is coming in July’18 release of XrmToolBox

Hi XrmToolBox community! As there is some interesting new features coming in next release, I wanted to write a blog post rather than just a release note on XrmToolBox portal. I would like to focus on three new features today. Connecting to D365 Online using Multi Factor Authentication (MFA) It has been a much requested feature since months, so I’m really happy to give you the capability to connect with an account protected with MFA. It was  already possible by using Connection String but you can now connect using UI only. When ticking the MFA checkbox, you will be presented with a new connection wizard step that requires you to provide information about an Azure AD Application (AppId and Reply Url). You get it, MFA requires this kind of application. You may need to asked your Office 365 admin to create the application. This step provides a link to explain how to create an Azure AD application for Microsoft Dynamics 365. Highlighting environment in

Dynamics 365 CE v9 : Icons for entities

With version 9 of Dynamics 365 Customer Engagement, Microsoft added a new type of image web resource : SVG files. They are vectorial images that can be used in any size. These images are used for Unified Client Interface, the new web interface also introduced in this version. So, when customizing custom entities, there is now three possibilities to define icons: Small icon, Medium icon and Vectorial icon Small icon : Used in the Solution Explorer and in the Lookup controls Solution explorer Lookup control This icon must have a size of 16 pixels by 16 pixels, transparent background and forecolor #5D5D5D Medium icon : Used in the standard web interface Site map This icon must have a size of 32 pixels by 32 pixels, transparent background and white forecolor Vectorial icon : Used in the Unified Client Interface Site map This icon must be a vectorial image with transparent background and black forecolor. D365 will adapt the color to render the icon properly. You can find icon for

Dynamics Portals : Add a local login control on the home page

Dynamics portals are a great solution to create portals and expose Dynamics 365 data to people not using our beloved XRM application.   One of our customers asked us to have a login control directly on the home page instead of having to click on “Sign In” link, then show the login page, then log… I think you got it.   The problem is the login page is a hidden page that cannot be customized. So, I found a (dirty) way to handle this request.   First, create your own login control In my home page template, I added two input controls and two buttons (Sign In and Lost password), like below, nothing fancy. The code is the following   < h3 > Identifiez vous </ h3 > < div style = " display : none ; " id = "loginMessage" class = "alert alert-danger" > </ div > < div > < div class = "form-group" > < label for = "txtLogin" > Nom d'utilisateur </ label > &l

New XrmToolBox plugin : Portal Records Mover

Hi Dynamics 365 community! Today, I’m releasing a new plugin for XrmToolBox : Portal Records Mover This plugin come from the need to export/import portal records that have been created/updated since a specific date. I implemented a portal for one of my customer last year and he updated pages content and some other portal records. This portal needs new features so we added new portal records in our development organization. But it is not an option to deliver again these pages since it would overwrite customer changes. So I needed a way to deliver only specific portal records. So, how to do it easily? I cannot use Configuration Migration from CRM SDK since it would export all records for defined entities, not only the newly created or modified ones. I cannot use standard export because I would need to export multiples entities and even NN relationships and manage import of multiple files. I could use custom code to export/import records… Better! I can now use an XrmToolBox pl

Display Performance Center in Chrome

Today, I was assigned a task to compare form load performance between available browsers for Windows (ie Chrome, FireFox, IE and Edge). You might be aware that Dynamics CRM/365 include a performance center you can use by pressing Ctrl+Shift+Q. Once activated, it records load times and helps you understand your form load performance. More information here This performance center is available in all browsers (at least with CRM 2016+) but the key combination closes Chrome! A small tip then, you can create a bookmark with the following target : javascript:Mscrm.Performance.PerformanceCenter.get_instance().TogglePerformanceResultsVisibility() Or you can also use the Chrome extension Level Up

New XrmToolBox plugin : Attribute Usage Inspector

A colleague of mine recently asked if it was possible to inspect data usage to determine which attributes are useless in a CRM 2016 organization because not filled with any value. My first answer was: no. I used to know a solution named CRM Data Detective that does the same but for CRM 4 and CRM 2011 only. Ok, I was wrong and found out that a version for CRM 2015/2016 also exists. Anyway, the major problem with this solution is the fact that if the entity you want to inspect has more records than the AggregateQueryRecordsLimit (which is 50,000 in CRM Online and cannot be updated), then you don’t get real usage statistics. This plugin resolves this limitation by querying actual records instead of performing aggregation query (only if aggregation query fails because of the limit). This can impact performance but if you really needs it, you get it. You can also export the result in a raw Excel file. Here is a screenshot As usual, please use the Plugins Store in XrmToolBox to get th