Search This Blog

Thursday, October 26, 2017

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

image

image


Small icon: Used in the Solution Explorer and in the Lookup controls

image

Solution explorer

image

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

image

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

image

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 your entities on www.flaticon.com, some icons are free, even in SVG format.

Friday, September 15, 2017

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.

image

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>
    <input type="text" class="form-control" id="txtLogin" placeholder="tapez ici votre identifiant"/>
</div>
<div class="form-group">
    <label for="txtPassword">Mot de passe</label>
    <input type="password" class="form-control" id="txtPassword" placeholder="tapez ici votre mot de passe"/>
</div>
 <div class="form-group">
    <div >
      <button class="btn btn-primary" id="btnLogin">Se connecter</button> <button class="btn btn-default" id="btnLostPassword">Mot de passe oublié ?</button>
    </div>
</div>
</div>

THEN, ADD AN HIDDEN IFRAME WITH LOGIN PAGE

This is quite easy too. Add an iframe in the home page template with login page in it, and style it to hide it

<iframe id="loginFrame" src="/SignIn?returnUrl=%2F%3F" style="display:none;visibility:hidden;"></iframe>

THEN, DO THE MAGIC WITH A SCRIPT

What does the script? when clicking on the login button, copy login and password from your custom login control, then paste them in the login iframe, then click on the login button in the iframe.
Set a timer to check periodically if the login succeeded. How to detect that? if the Username textbox is not in the iframe anymore, then the login succeeded. So, refresh your homepage: Voila! you are connected.
If the Username textbox is still there and there is a validation summary on the page, login failed. Read the error message and display it on your home page.
 
image

Here is the script

$("#btnLogin").on("click",function(){
        var login = $("#txtLogin").val();
        var password = $("#txtPassword").val();

        $("#loginFrame").contents().find("#Username").val(login);
        $("#loginFrame").contents().find("#Password").val(password);
        $("#loginFrame").contents().find("#submit-signin-local").click();
       
        checkInterval = setInterval(function(){

            var isLogged = $("#loginFrame").contents().find("#Username").length === 0;
            var summary = $("#loginFrame").contents().find("#loginValidationSummary");

            if(isLogged){
                location.reload();
            }
            else if(summary.length === 1){
                $("#loginMessage").append(summary.text());
                $("#loginMessage").show();
                clearInterval(checkInterval);
            }            
        },1000);      
    });

Tuesday, June 13, 2017

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 plugin! The plugin allows to select portal entities and to define some options to retrieve records. Then you can be more precise by selecting only records you need. Finally, you can export the records in a file.

image

You can also import the file in a new organization

image

This is very a first shot so I hope there is no too much bugs. If so, please reports them on Github

As usual the plugin is available in the Plugins Store in XrmToolBox

Enjoy!

Wednesday, February 1, 2017

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