tag:blogger.com,1999:blog-11848440561726965012024-03-13T02:45:25.603+01:00Dynamics CRM ToolsA blog that will provide tools to facilitate your life when customizing and using Microsoft Dynamics 365 for CE and Power Apps Model Driven AppsTanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.comBlogger179125tag:blogger.com,1999:blog-1184844056172696501.post-13639660271099758582021-04-26T14:05:00.002+02:002021-04-26T14:05:30.849+02:00Use feature flags in your pluginsLately, 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!<div><br /></div><div>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.</div><div><br /></div><div>Let's take an example where a plugin must execute two features : Feature A and Feature B</div><div>
<pre><code>public class MyPlugin : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
var service = new MyCustomService();
service.ExecuteFeatureA();
service.ExecuteFeatureB();
}
}
</code></pre><div>We need to find a way to execute conditionally these methods, let's say because feature B is not tested or completed yet but we need to ship the assembly for the feature A.</div><div><br /></div><div>What I generally use is the unsecure configuration of plugin steps to store a JSON that will explain what feature needs to be activated or not. Here is what the JSON looks like:</div><div><pre><code>{"Features":[{"Enabled":true,"Name":"FeatureA"},{"Enabled":false,"Name":"FeatureB"}]}</code></pre></div><div><br /></div><div>So, in the constructor, I'm deserializing the configuration of the plugin step, so that I can use it easily in the Execute method. </div><div><br /></div></div>
<pre><code>public class MyPlugin : IPlugin
{
private readonly PluginFeature _feature;
public MyPlugin(string unsecureConfiguration, string secureConfiguration)
{
if (!string.IsNullOrEmpty(unsecureConfiguration))
{
_feature =
SerializerHelper.ReadObject<PluginFeature>(
new MemoryStream(Encoding.Default.GetBytes(unsecureConfiguration)));
}
}
public void Execute(IServiceProvider serviceProvider)
{
var service = new MyCustomService();
if (_feature.Features.FirstOrDefault(f => f.Name == "FeatureA")?.Enabled ?? true)
{
service.ExecuteFeatureA();
}
if (_feature.Features.FirstOrDefault(f => f.Name == "FeatureB")?.Enabled ?? true)
{
service.ExecuteFeatureB();
}
}
}
</code></pre><div>The benefit of this implementation is it does not require any query to find the flag. Because, yes, we could also use a custom entity or environment variables to store the same kind of configuration but that requires to query these data.</div><div><br /></div><div>Of course, in a real world scenario, I'm using a base class that handles all this code automatically, so I just have to write the following:</div><div><br /></div>
<pre><code>public class MyPlugin : Plugin
{
public MyPlugin(string unsecureConfiguration, string secureConfiguration) : base(unsecureConfiguration, secureConfiguration)
{
}
public override void PostOperationCreate(CreationServiceProvider serviceProvider)
{
var service = new MyCustomService(serviceProvider);
if (IsFeatureEnabled("FeatureA"))
{
service.ExecuteFeatureA();
}
if (IsFeatureEnabled("FeatureB"))
{
service.ExecuteFeatureB();
}
}
}
</code></pre><div><br /></div>Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com0tag:blogger.com,1999:blog-1184844056172696501.post-81240444373469149032018-07-04T08:08:00.000+02:002018-07-04T08:10:23.650+02:00What is coming in July’18 release of XrmToolBoxHi XrmToolBox community!<br />
<br />
<div align="justify">
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.</div>
<div align="justify">
<strong><br /></strong></div>
<div align="justify">
<strong>Connecting to D365 Online using Multi Factor Authentication (MFA)</strong></div>
<div align="justify">
<br /></div>
<div align="justify">
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.<br />
<br /></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0KIH4NPF_t_lL0rBDmYE835PX0loA9G7e6Lc-R2DUevH5QGyKpwuUL8XQFlGFy06dNWtgfVNUSg8Zex1oimAvB_GAGs-HvYsy5dRXQApSmnDJWSptYBSzLUM3aYUUZilvbgjCwtkrnSw/s1600/cw1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br /></a>
<br />
<div style="margin-left: 1em; margin-right: 1em; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0KIH4NPF_t_lL0rBDmYE835PX0loA9G7e6Lc-R2DUevH5QGyKpwuUL8XQFlGFy06dNWtgfVNUSg8Zex1oimAvB_GAGs-HvYsy5dRXQApSmnDJWSptYBSzLUM3aYUUZilvbgjCwtkrnSw/s1600/cw1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="427" data-original-width="987" height="172" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0KIH4NPF_t_lL0rBDmYE835PX0loA9G7e6Lc-R2DUevH5QGyKpwuUL8XQFlGFy06dNWtgfVNUSg8Zex1oimAvB_GAGs-HvYsy5dRXQApSmnDJWSptYBSzLUM3aYUUZilvbgjCwtkrnSw/s400/cw1.png" width="400" /></a></div>
<div style="margin-left: 1em; margin-right: 1em; text-align: center;">
<br /></div>
<br />
<div align="center">
</div>
<div align="justify">
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. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjETNWPqLoAhieyQVxUTtYlOrXyViXlVTof4Lb3V-kwli7EmMD7VMGtqVfTPvDIj9gsA_okew-BWZMYwr5hZga-CgEM3pevg5aDx8-wrtk0i0TzpqFDvfVl8bpF2YubJ1lVtPcHW6fPb8I/s1600/cw2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="427" data-original-width="987" height="172" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjETNWPqLoAhieyQVxUTtYlOrXyViXlVTof4Lb3V-kwli7EmMD7VMGtqVfTPvDIj9gsA_okew-BWZMYwr5hZga-CgEM3pevg5aDx8-wrtk0i0TzpqFDvfVl8bpF2YubJ1lVtPcHW6fPb8I/s400/cw2.png" width="400" /></a></div>
<a href="https://www.blogger.com/$image[30].png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><br /></div>
<div align="justify">
<br /></div>
<div align="justify">
</div>
<div align="justify">
</div>
<div align="justify">
This step provides a link to explain how to create an Azure AD application for Microsoft Dynamics 365.</div>
<div align="justify">
<br /></div>
<div align="justify">
<strong>Highlighting environment in XrmToolBox</strong></div>
<div align="justify">
<br />
This is a pretty new feature request but I thought it is really an helpful one, so I implemented it immediatly.</div>
<div align="justify">
<br /></div>
<div align="justify">
How many times did you alter production organization from XrmToolBox, whereas you thought you were altering dev organization, just because it is not so easy to differentiate which plugin is connected to what organization?<br />
<br /></div>
<div align="justify">
So, the point of this feature is to allow you to define some settings to highlight a plugin when connected to a specific organization. During the last step of the connection wizard, you will now see a new button to define highlight settings.</div>
<div align="justify">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJUzroPRvSvlZLn6OAqm3Jsnou5NssW-pWRcuGKHLgx2iVgAlHYzvovJAkkRcJdxn1rDSNIvmDnDXvzq2HGNF7hxSX6Hz6H-IyOsqm3z07y1CzgfVb7Rrmj3Yb4c6l5MudHDVkDyFuNfQ/s1600/cw3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="427" data-original-width="987" height="172" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJUzroPRvSvlZLn6OAqm3Jsnou5NssW-pWRcuGKHLgx2iVgAlHYzvovJAkkRcJdxn1rDSNIvmDnDXvzq2HGNF7hxSX6Hz6H-IyOsqm3z07y1CzgfVb7Rrmj3Yb4c6l5MudHDVkDyFuNfQ/s400/cw3.png" width="400" /></a></div>
<br /></div>
<div align="justify">
</div>
<div align="justify">
<a href="https://www.blogger.com/$image[28].png"><br /></a></div>
<div align="justify">
By clicking this button, you will be prompted to choose one of both predefined template (Production or UAT) or to choose your own settings.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0crKasb4YJLlq73ZxKADujrFKaiUHtqMISsmqR0pskLW2cm8SA-_VnCacIsn2GPT-okE5hNGZKW09gqC9c_fjrsoSA74U3KIU3WSXE4r7SV2zUfJ26riKbOywNRIwsq0i5TRwha54rDk/s1600/ph1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="825" data-original-width="1498" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0crKasb4YJLlq73ZxKADujrFKaiUHtqMISsmqR0pskLW2cm8SA-_VnCacIsn2GPT-okE5hNGZKW09gqC9c_fjrsoSA74U3KIU3WSXE4r7SV2zUfJ26riKbOywNRIwsq0i5TRwha54rDk/s400/ph1.png" width="400" /></a></div>
<br /></div>
<div align="justify">
<br /></div>
<div align="justify">
</div>
<div align="justify">
</div>
<div align="justify">
This dialog shows you a preview of how the plugin will be highlighted. If you click on Custom radio button, then an additional dialog appears to let you choose colors you want, and even retrieve color from the organization theme (CRM 8.1 and above only).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggZOMK2D-YvD_-XXPcRKjHYntCc08M5YQgrd_VTrrTlGhifODc4pcoPuPG7lkiAsQFJCnKFTBjzaCUqhlzeH1bbUTcMZ9ZraTHTHTb6uiTgkT6B80lVzvHKE1d4pxUG3u6553g6sqXUss/s1600/ph2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="825" data-original-width="1498" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggZOMK2D-YvD_-XXPcRKjHYntCc08M5YQgrd_VTrrTlGhifODc4pcoPuPG7lkiAsQFJCnKFTBjzaCUqhlzeH1bbUTcMZ9ZraTHTHTb6uiTgkT6B80lVzvHKE1d4pxUG3u6553g6sqXUss/s400/ph2.png" width="400" /></a></div>
<a href="https://www.blogger.com/$image[30].png" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><br /></div>
<div align="justify">
<br /></div>
<div align="justify">
</div>
<div align="justify">
Each time you change a setting, the custom template is refreshed to show you the result in real time.</div>
<div align="justify">
These highlighting settings are stored in you connection information. So each time you open a plugin with this connection, or when you update a plugn connection, the highlighting is displayed.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBru1Puh3oGIuS5Cuh-EfbhHAEunj7KTvuj9xEy5pFtxGCxcDo8fdsK7bwF4QCCYNenO107E7T1VXBJbS9QXQLjRU26MfF5ZcaDViQDWtPHkSD2oRiMgVXEYtfkdHtkd-aPWGa-i3k1zA/s1600/ph3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1025" data-original-width="1600" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBru1Puh3oGIuS5Cuh-EfbhHAEunj7KTvuj9xEy5pFtxGCxcDo8fdsK7bwF4QCCYNenO107E7T1VXBJbS9QXQLjRU26MfF5ZcaDViQDWtPHkSD2oRiMgVXEYtfkdHtkd-aPWGa-i3k1zA/s400/ph3.png" width="400" /></a></div>
<br /></div>
<div align="justify">
<br /></div>
<div align="justify">
</div>
<div align="justify">
As you can see, there is now way you don’t figure out you are acting on a plugin connected to the production organization!</div>
<div align="justify">
<br /></div>
<div align="justify">
<strong>Opening the same plugin with multiple connections</strong></div>
<div align="justify">
<strong><br /></strong></div>
<div align="justify">
It may happens you need to open the same plugin on different organizations, to compare configuration or metadata, for example. XrmToolBox now allows to select multiple connections when opening a plugin. </div>
<div align="justify">
<br /></div>
<div align="justify">
This will open the same plugin as many time you selected connections.</div>
<div align="justify">
<br /></div>
<div align="justify">
<strong>Conclusion</strong></div>
<div align="justify">
<strong><br /></strong></div>
<div align="justify">
I hope you will find these new feature helpful! Some other minor improvements are planned. You will have the whole list when release notes are out.</div>
<div align="justify">
<br /></div>
<div align="justify">
Enjoy!</div>
Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com0tag:blogger.com,1999:blog-1184844056172696501.post-81976484240363097302017-10-26T09:05:00.001+02:002017-10-26T09:05:04.055+02:00Dynamics 365 CE v9 : Icons for entities<p>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.</p><p>So, when customizing custom entities, there is now three possibilities to define icons: Small icon, Medium icon and Vectorial icon</p><p><a href="https://lh3.googleusercontent.com/-oRqoMSVI_As/WfGJAfiHNyI/AAAAAAAABAE/a65vH0mQvrAgjESYVRG_DJyAPuupP2ougCHMYCw/s1600-h/image%255B22%255D"><img width="469" height="291" title="image" style="display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-4yqsMj1kujQ/WfGJBBC4SiI/AAAAAAAABAI/UqLBXTDY4JMCblr42kC6o5Ui48URAuqWgCHMYCw/image_thumb%255B8%255D?imgmax=800" border="0"></a></p><p><a href="https://lh3.googleusercontent.com/-02IBs4ybMaE/WfGJBvYaWmI/AAAAAAAABAM/8lsTIxVzTN82V4FphKwP4g4lCHTn2XlJgCHMYCw/s1600-h/image%255B26%255D"><img width="473" height="299" title="image" style="display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-rukpqVFMGa0/WfGJCaPyYwI/AAAAAAAABAQ/aLFXmYpC8ek7GW6EZr9NK1UhtexeTimbQCHMYCw/image_thumb%255B10%255D?imgmax=800" border="0"></a></p><p><br></p><p><strong>Small icon</strong>: Used in the Solution Explorer and in the Lookup controls</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr><p>
<a href="https://lh3.googleusercontent.com/-qbt5ReNvgZw/WfGJDJlf-9I/AAAAAAAABAU/wTrInhL8VtwikuZykX7pQCBaddWUXKLHwCHMYCw/s1600-h/image%255B14%255D"><img width="190" height="244" title="image" style="display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-oo45ZqgFrUk/WfGJD7QJ9KI/AAAAAAAABAY/MEHKQfA14T0cZHcyHn2iAqjngSR0325WgCHMYCw/image_thumb%255B5%255D?imgmax=800" border="0"></a></p><p align="center">Solution explorer</p><td width="50%" valign="top"><p><a href="https://lh3.googleusercontent.com/-2aN4FFRoWjo/WfGJETg7AdI/AAAAAAAABAc/uio8ab5FTQQzBYoFlNbHZbGcBo87Z-ROwCHMYCw/s1600-h/image%255B18%255D"><img width="349" height="120" title="image" style="display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-Pj7o_sOyna0/WfGJFJuiMoI/AAAAAAAABAg/z4SblyBQ8TUSke3WJqGzljeBONfH8q-RwCHMYCw/image_thumb%255B6%255D?imgmax=800" border="0"></a></p><p align="center">Lookup control</p></td>
<td width="50%" valign="top"></td>
</tr>
</tbody>
</table>
<p>This icon must have a size of 16 pixels by 16 pixels, transparent background and forecolor #5D5D5D</p><p><strong>Medium icon</strong> : Used in the standard web interface Site map</p><p><a href="https://lh3.googleusercontent.com/-KkVucx3-7Kc/WfGJF1NcPcI/AAAAAAAABAk/O_itMo8Le-0lgw2clKtzmrHjhRExhum8wCHMYCw/s1600-h/image%255B3%255D"><img width="321" height="186" title="image" style="display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-rBcpvVAsSo8/WfGJGmDHJZI/AAAAAAAABAo/yFFu6KEdeh8B57iduwPyhcWgW6Zcw7BtQCHMYCw/image_thumb%255B1%255D?imgmax=800" border="0"></a></p><p>This icon must have a size of 32 pixels by 32 pixels, transparent background and white forecolor</p><p><strong>Vectorial icon</strong> : Used in the Unified Client Interface Site map</p><p><a href="https://lh3.googleusercontent.com/-7rASbB1tKM0/WfGJHNMAv4I/AAAAAAAABAs/wOjD4L9FA0ohwzsfA0o0PQdPVbiRtueAQCHMYCw/s1600-h/image%255B29%255D"><img width="178" height="244" title="image" style="margin: 0px; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-3HpuZ4MqTLc/WfGJH1MjQtI/AAAAAAAABAw/TJFDpX4XStEnZOghsRBmILxK4b1QAU-FACHMYCw/image_thumb%255B11%255D?imgmax=800" border="0"></a></p><p>This icon must be a vectorial image with transparent background and black forecolor. D365 will adapt the color to render the icon properly.</p><p>You can find icon for your entities on <a href="http://www.flaticon.com">www.flaticon.com</a>, some icons are free, even in SVG format.</p>Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com0tag:blogger.com,1999:blog-1184844056172696501.post-74059136830199307332017-09-15T09:01:00.001+02:002017-09-15T09:06:54.462+02:00Dynamics Portals : Add a local login control on the home page<div style="text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif;">Dynamics portals are a great solution to create portals and expose Dynamics 365 data to people not using our beloved XRM application.</span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"></span> </div>
<div style="text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif;">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.</span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"></span> </div>
<div style="text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif;">The problem is the login page is a hidden page that cannot be customized. </span></div>
<div style="text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif;">So, I found a (dirty) way to handle this request.</span></div>
<div style="text-align: justify;">
</div>
<h2>
<span style="font-family: Arial, Helvetica, sans-serif;">First, create your own login control</span></h2>
<span style="font-family: Arial, Helvetica, sans-serif;">In my home page template, I added two input controls and two buttons (Sign In and Lost password), like below, nothing fancy.</span> <br />
<br />
<a href="https://lh3.googleusercontent.com/-cOvW1DuSWj0/Wbt6pHHGa3I/AAAAAAAAA_c/OK8YsLXQhKMigcEAEVBQoTVz9PqncGWlQCHMYCw/s1600-h/image%255B7%255D"><img alt="image" border="0" height="343" src="https://lh3.googleusercontent.com/-3lsnXx6foiw/Wbt6p6-eqTI/AAAAAAAAA_g/zMdLqNI8-oIth6Nd72B9zv-yyxnySzzHgCHMYCw/image_thumb%255B3%255D?imgmax=800" style="background-image: none; display: inline;" title="image" width="550" /></a><br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif;">The code is the following</span><br />
<pre> </pre>
<pre style="-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255); color: black; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;"><span style="color: #a65700;"><</span><span style="color: maroon; font-weight: bold;">h3</span><span style="color: #a65700;">></span>Identifiez vous<span style="color: #a65700;"></</span><span style="color: maroon; font-weight: bold;">h3</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: maroon; font-weight: bold;">div</span><span style="color: #274796;"> </span><span style="color: #074726;">style</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"</span><span style="color: #bb7977; font-weight: bold;">display</span><span style="color: #808030;">:</span><span style="color: #074726;">none</span><span style="color: purple;">;</span><span style="color: #0000e6;">"</span><span style="color: #274796;"> </span><span style="color: #074726;">id</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"loginMessage"</span><span style="color: #274796;"> </span><span style="color: #074726;">class</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"alert alert-danger"</span><span style="color: #a65700;">></span><span style="color: #a65700;"></</span><span style="color: maroon; font-weight: bold;">div</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: maroon; font-weight: bold;">div</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: maroon; font-weight: bold;">div</span><span style="color: #274796;"> </span><span style="color: #074726;">class</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"form-group"</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: maroon; font-weight: bold;">label</span><span style="color: #274796;"> </span><span style="color: #074726;">for</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"txtLogin"</span><span style="color: #a65700;">></span>Nom d'utilisateur<span style="color: #a65700;"></</span><span style="color: maroon; font-weight: bold;">label</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: maroon; font-weight: bold;">input</span><span style="color: #274796;"> </span><span style="color: #074726;">type</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"text"</span><span style="color: #274796;"> </span><span style="color: #074726;">class</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"form-control"</span><span style="color: #274796;"> </span><span style="color: #074726;">id</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"txtLogin"</span><span style="color: #274796;"> </span><span style="color: #074726;">placeholder</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"tapez ici votre identifiant"</span><span style="color: #a65700;">/></span>
<span style="color: #a65700;"></</span><span style="color: maroon; font-weight: bold;">div</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: maroon; font-weight: bold;">div</span><span style="color: #274796;"> </span><span style="color: #074726;">class</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"form-group"</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: maroon; font-weight: bold;">label</span><span style="color: #274796;"> </span><span style="color: #074726;">for</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"txtPassword"</span><span style="color: #a65700;">></span>Mot de passe<span style="color: #a65700;"></</span><span style="color: maroon; font-weight: bold;">label</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: maroon; font-weight: bold;">input</span><span style="color: #274796;"> </span><span style="color: #074726;">type</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"password"</span><span style="color: #274796;"> </span><span style="color: #074726;">class</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"form-control"</span><span style="color: #274796;"> </span><span style="color: #074726;">id</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"txtPassword"</span><span style="color: #274796;"> </span><span style="color: #074726;">placeholder</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"tapez ici votre mot de passe"</span><span style="color: #a65700;">/></span>
<span style="color: #a65700;"></</span><span style="color: maroon; font-weight: bold;">div</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: maroon; font-weight: bold;">div</span><span style="color: #274796;"> </span><span style="color: #074726;">class</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"form-group"</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: maroon; font-weight: bold;">div</span><span style="color: #274796;"> </span><span style="color: #a65700;">></span>
<span style="color: #a65700;"><</span><span style="color: maroon; font-weight: bold;">button</span><span style="color: #274796;"> </span><span style="color: #074726;">class</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"btn btn-primary"</span><span style="color: #274796;"> </span><span style="color: #074726;">id</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"btnLogin"</span><span style="color: #a65700;">></span>Se connecter<span style="color: #a65700;"></</span><span style="color: maroon; font-weight: bold;">button</span><span style="color: #a65700;">></span> <span style="color: #a65700;"><</span><span style="color: maroon; font-weight: bold;">button</span><span style="color: #274796;"> </span><span style="color: #074726;">class</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"btn btn-default"</span><span style="color: #274796;"> </span><span style="color: #074726;">id</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"btnLostPassword"</span><span style="color: #a65700;">></span>Mot de passe oublié ?<span style="color: #a65700;"></</span><span style="color: maroon; font-weight: bold;">button</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"></</span><span style="color: maroon; font-weight: bold;">div</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"></</span><span style="color: maroon; font-weight: bold;">div</span><span style="color: #a65700;">></span>
<span style="color: #a65700;"></</span><span style="color: maroon; font-weight: bold;">div</span><span style="color: #a65700;">></span></pre>
<br />
<h2>
<span style="font-family: Arial, Helvetica, sans-serif;">THEN, ADD AN HIDDEN IFRAME WITH LOGIN PAGE</span></h2>
<pre><span style="font-family: Arial, Helvetica, sans-serif;">This is quite easy too. Add an iframe in the home page template with login page in it, and style it to hide it</span></pre>
<br />
<pre style="-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255); color: black; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;"><span style="color: #a65700;"><</span><span style="color: maroon; font-weight: bold;">iframe</span><span style="color: #274796;"> </span><span style="color: #074726;">id</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"loginFrame"</span><span style="color: #274796;"> </span><span style="color: #074726;">src</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"/SignIn?returnUrl=%2F%3F"</span><span style="color: #274796;"> </span><span style="color: #074726;">style</span><span style="color: #808030;">=</span><span style="color: #0000e6;">"</span><span style="color: #bb7977; font-weight: bold;">display</span><span style="color: #808030;">:</span><span style="color: #074726;">none</span><span style="color: purple;">;</span><span style="color: #bb7977; font-weight: bold;">visibility</span><span style="color: #808030;">:</span><span style="color: #074726;">hidden</span><span style="color: purple;">;</span><span style="color: #0000e6;">"</span><span style="color: #a65700;">></span><span style="color: #a65700;"></</span><span style="color: maroon; font-weight: bold;">iframe</span><span style="color: #a65700;">></span></pre>
<span style="font-family: Courier New;"></span><br />
<h2>
<span style="font-family: Arial, Helvetica, sans-serif;">THEN, DO THE MAGIC WITH A SCRIPT</span></h2>
<div style="text-align: justify;">
<pre><span style="font-family: Arial, Helvetica, sans-serif;">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.</span></pre>
</div>
<div style="text-align: justify;">
<pre><span style="font-family: Arial, Helvetica, sans-serif;">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.</span></pre>
</div>
<div style="text-align: justify;">
<pre><span style="font-family: Arial, Helvetica, sans-serif;">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.</span></pre>
</div>
<pre> </pre>
<a href="https://lh3.googleusercontent.com/-w3STnRZ31Pw/Wbt6qfvhnQI/AAAAAAAAA_k/4Sw0FRtxgCICJYhLAGowjqW38_KfkX2TQCHMYCw/s1600-h/image%255B10%255D"><span style="font-family: Arial, Helvetica, sans-serif;"><img alt="image" border="0" height="201" src="https://lh3.googleusercontent.com/-n2eR9OZxsoQ/Wbt6q8dJ2DI/AAAAAAAAA_o/EEj3ZQ2K6D4cliplZhpg2zxR45JWJmmhgCHMYCw/image_thumb%255B4%255D?imgmax=800" style="background-image: none; display: inline; margin: 0px;" title="image" width="244" /></span></a><br />
<br />
<pre><span style="font-family: Arial, Helvetica, sans-serif;">Here is the script</span></pre>
<br />
<pre><pre style="-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255); color: black; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;">$<span style="color: #808030;">(</span><span style="color: maroon;">"</span><span style="color: #0000e6;">#btnLogin</span><span style="color: maroon;">"</span><span style="color: #808030;">)</span><span style="color: #808030;">.</span>on<span style="color: #808030;">(</span><span style="color: maroon;">"</span><span style="color: #0000e6;">click</span><span style="color: maroon;">"</span><span style="color: #808030;">,</span><span style="color: maroon; font-weight: bold;">function</span><span style="color: #808030;">(</span><span style="color: #808030;">)</span><span style="color: purple;">{</span>
<span style="color: maroon; font-weight: bold;">var</span> login <span style="color: #808030;">=</span> $<span style="color: #808030;">(</span><span style="color: maroon;">"</span><span style="color: #0000e6;">#txtLogin</span><span style="color: maroon;">"</span><span style="color: #808030;">)</span><span style="color: #808030;">.</span>val<span style="color: #808030;">(</span><span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: maroon; font-weight: bold;">var</span> password <span style="color: #808030;">=</span> $<span style="color: #808030;">(</span><span style="color: maroon;">"</span><span style="color: #0000e6;">#txtPassword</span><span style="color: maroon;">"</span><span style="color: #808030;">)</span><span style="color: #808030;">.</span>val<span style="color: #808030;">(</span><span style="color: #808030;">)</span><span style="color: purple;">;</span>
$<span style="color: #808030;">(</span><span style="color: maroon;">"</span><span style="color: #0000e6;">#loginFrame</span><span style="color: maroon;">"</span><span style="color: #808030;">)</span><span style="color: #808030;">.</span>contents<span style="color: #808030;">(</span><span style="color: #808030;">)</span><span style="color: #808030;">.</span>find<span style="color: #808030;">(</span><span style="color: maroon;">"</span><span style="color: #0000e6;">#Username</span><span style="color: maroon;">"</span><span style="color: #808030;">)</span><span style="color: #808030;">.</span>val<span style="color: #808030;">(</span>login<span style="color: #808030;">)</span><span style="color: purple;">;</span>
$<span style="color: #808030;">(</span><span style="color: maroon;">"</span><span style="color: #0000e6;">#loginFrame</span><span style="color: maroon;">"</span><span style="color: #808030;">)</span><span style="color: #808030;">.</span>contents<span style="color: #808030;">(</span><span style="color: #808030;">)</span><span style="color: #808030;">.</span>find<span style="color: #808030;">(</span><span style="color: maroon;">"</span><span style="color: #0000e6;">#Password</span><span style="color: maroon;">"</span><span style="color: #808030;">)</span><span style="color: #808030;">.</span>val<span style="color: #808030;">(</span>password<span style="color: #808030;">)</span><span style="color: purple;">;</span>
$<span style="color: #808030;">(</span><span style="color: maroon;">"</span><span style="color: #0000e6;">#loginFrame</span><span style="color: maroon;">"</span><span style="color: #808030;">)</span><span style="color: #808030;">.</span>contents<span style="color: #808030;">(</span><span style="color: #808030;">)</span><span style="color: #808030;">.</span>find<span style="color: #808030;">(</span><span style="color: maroon;">"</span><span style="color: #0000e6;">#submit-signin-local</span><span style="color: maroon;">"</span><span style="color: #808030;">)</span><span style="color: #808030;">.</span>click<span style="color: #808030;">(</span><span style="color: #808030;">)</span><span style="color: purple;">;</span>
checkInterval <span style="color: #808030;">=</span> <span style="color: maroon; font-weight: bold;">setInterval</span><span style="color: #808030;">(</span><span style="color: maroon; font-weight: bold;">function</span><span style="color: #808030;">(</span><span style="color: #808030;">)</span><span style="color: purple;">{</span>
<span style="color: maroon; font-weight: bold;">var</span> isLogged <span style="color: #808030;">=</span> $<span style="color: #808030;">(</span><span style="color: maroon;">"</span><span style="color: #0000e6;">#loginFrame</span><span style="color: maroon;">"</span><span style="color: #808030;">)</span><span style="color: #808030;">.</span>contents<span style="color: #808030;">(</span><span style="color: #808030;">)</span><span style="color: #808030;">.</span>find<span style="color: #808030;">(</span><span style="color: maroon;">"</span><span style="color: #0000e6;">#Username</span><span style="color: maroon;">"</span><span style="color: #808030;">)</span><span style="color: #808030;">.</span><span style="color: maroon; font-weight: bold;">length</span> <span style="color: #808030;">===</span> <span style="color: #008c00;">0</span><span style="color: purple;">;</span>
<span style="color: maroon; font-weight: bold;">var</span> summary <span style="color: #808030;">=</span> $<span style="color: #808030;">(</span><span style="color: maroon;">"</span><span style="color: #0000e6;">#loginFrame</span><span style="color: maroon;">"</span><span style="color: #808030;">)</span><span style="color: #808030;">.</span>contents<span style="color: #808030;">(</span><span style="color: #808030;">)</span><span style="color: #808030;">.</span>find<span style="color: #808030;">(</span><span style="color: maroon;">"</span><span style="color: #0000e6;">#loginValidationSummary</span><span style="color: maroon;">"</span><span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: maroon; font-weight: bold;">if</span><span style="color: #808030;">(</span>isLogged<span style="color: #808030;">)</span><span style="color: purple;">{</span>
location<span style="color: #808030;">.</span>reload<span style="color: #808030;">(</span><span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: purple;">}</span>
<span style="color: maroon; font-weight: bold;">else</span> <span style="color: maroon; font-weight: bold;">if</span><span style="color: #808030;">(</span>summary<span style="color: #808030;">.</span><span style="color: maroon; font-weight: bold;">length</span> <span style="color: #808030;">===</span> <span style="color: #008c00;">1</span><span style="color: #808030;">)</span><span style="color: purple;">{</span>
$<span style="color: #808030;">(</span><span style="color: maroon;">"</span><span style="color: #0000e6;">#loginMessage</span><span style="color: maroon;">"</span><span style="color: #808030;">)</span><span style="color: #808030;">.</span>append<span style="color: #808030;">(</span>summary<span style="color: #808030;">.</span>text<span style="color: #808030;">(</span><span style="color: #808030;">)</span><span style="color: #808030;">)</span><span style="color: purple;">;</span>
$<span style="color: #808030;">(</span><span style="color: maroon;">"</span><span style="color: #0000e6;">#loginMessage</span><span style="color: maroon;">"</span><span style="color: #808030;">)</span><span style="color: #808030;">.</span>show<span style="color: #808030;">(</span><span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: maroon; font-weight: bold;">clearInterval</span><span style="color: #808030;">(</span>checkInterval<span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: purple;">}</span>
<span style="color: purple;">}</span><span style="color: #808030;">,</span><span style="color: #008c00;">1000</span><span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: purple;">}</span><span style="color: #808030;">)</span><span style="color: purple;">;</span></pre>
</pre>
Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com0tag:blogger.com,1999:blog-1184844056172696501.post-31865667544241547852017-06-13T18:08:00.001+02:002017-06-13T18:08:18.839+02:00New XrmToolBox plugin : Portal Records Mover<p>Hi Dynamics 365 community!</p> <p align="justify">Today, I’m releasing a new plugin for XrmToolBox : Portal Records Mover</p> <p align="justify">This plugin come from the need to export/import portal records that have been created/updated since a specific date.</p> <p align="justify">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.</p> <p align="justify">So, how to do it easily?</p> <ul> <li> <div align="justify">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.</div></li> <li> <div align="justify">I cannot use standard export because I would need to export multiples entities and even NN relationships and manage import of multiple files.</div></li> <li> <div align="justify">I could use custom code to export/import records…</div></li></ul> <p align="justify">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.</p> <p><a href="https://lh3.googleusercontent.com/-cpg8248c1RY/WUAN6um6qfI/AAAAAAAAA-U/QdshGQV2siMkLtG08ebEqbn0O1SPz3KOgCHM/s1600-h/image%255B3%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-YPSVg3GL_t8/WUAN7ZltFpI/AAAAAAAAA-Y/yIvDjXda528JlKemhk4CXphTNfthty_FQCHM/image_thumb%255B1%255D?imgmax=800" width="546" height="338"></a></p> <p>You can also import the file in a new organization</p> <p><a href="https://lh3.googleusercontent.com/-iu8Oddqlhac/WUAN7-coT7I/AAAAAAAAA-c/P0vTCNQ0B9YHABfbjmV7riHKk2I8ka6cwCHM/s1600-h/image%255B7%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-AmLy0MHIzuM/WUAN8RmCYNI/AAAAAAAAA-g/TMh76naHWtA4O-EH1Y43Sv3OnaDobTI5wCHM/image_thumb%255B3%255D?imgmax=800" width="549" height="340"></a></p> <p align="justify">This is very a first shot so I hope there is no too much bugs. If so, please reports them on <a href="https://github.com/MscrmTools/MscrmTools.PortalRecordsMover/issues" target="_blank">Github</a></p> <p align="justify">As usual the plugin is available in the Plugins Store in XrmToolBox</p> <p align="justify">Enjoy!</p>Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com1tag:blogger.com,1999:blog-1184844056172696501.post-45866621486774750362017-02-01T09:28:00.001+01:002017-02-01T09:28:14.009+01:00Display Performance Center in Chrome<p>Today, I was assigned a task to compare form load performance between available browsers for Windows (ie Chrome, FireFox, IE and Edge).</p> <p>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 <a href="http://www.powerobjects.com/2014/10/07/microsoft-dynamics-crm-2013-performance-center-2/" target="_blank">here</a></p> <p>This performance center is available in all browsers (at least with CRM 2016+) but the key combination closes Chrome!</p> <p>A small tip then, you can create a bookmark with the following target : </p> <p>javascript:Mscrm.Performance.PerformanceCenter.get_instance().TogglePerformanceResultsVisibility()</p> <p>Or you can also use the Chrome extension Level Up</p>Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com3tag:blogger.com,1999:blog-1184844056172696501.post-45288473418373584222016-09-21T13:29:00.001+02:002016-09-21T13:31:14.185+02:00New XrmToolBox plugin : Attribute Usage Inspector<p align="justify">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.</p> <p align="justify">Ok, I was wrong and found out that a version for CRM 2015/2016 also exists.</p> <p align="justify">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.</p> <p align="justify">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.</p> <p align="justify">You can also export the result in a raw Excel file.</p> <p align="justify">Here is a screenshot</p> <p align="justify"><a href="https://lh3.googleusercontent.com/-bq-1-BEPB34/V-JvBlK3E_I/AAAAAAAAA88/GL0_b5sJU2Y/s1600-h/image%25255B3%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-NInBl-Ju86Y/V-JvCEjPTsI/AAAAAAAAA9A/SdCc9LsNQ_0/image_thumb%25255B1%25255D.png?imgmax=800" width="562" height="262"></a></p> <p align="justify">As usual, please use the Plugins Store in XrmToolBox to get this plugin. </p> <p align="justify">Happy inspection!</p>Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com8tag:blogger.com,1999:blog-1184844056172696501.post-24442425387883224412016-06-10T09:02:00.001+02:002016-06-10T09:02:31.120+02:00Improved Iconator for XrmToolBox<p align="justify">Hi Dynamics CRM community! It’s been a long time since the last article on this blog!</p> <p align="justify">Today, I want to share with you what’s new on Iconator plugin for XrmToolBox and where these changes come from.</p> <p align="justify">Believe it or not but, in my day to day consultant work, I’m not customizing Dynamics CRM anymore but mainly focus on development. So, working with Dynamics CRM icons was not part of my job. But lately, I had to work on a project with me and myself only, so it did require that I create entities and update their icons to have a shiny CRM application. And even if Iconator is a helpful plugin, it was not helpful enough. The major concerns were:</p> <ul> <li> <div align="justify">Cannot set entities color. You can do it in customizations but one by one entity.</div></li> <li> <div align="justify">Icons used in SiteMap (the 32x32 pixels white ones) don’t fit well if the white color touch icon edges. This is particularly true with icons from <a href="http://www.FlatIcon.com" target="_blank">FlatIcon.com</a> (which I recommend, by the way)</div></li></ul> <p align="justify">You know me, it couldn’t stay that way… So I updated Iconator plugins</p> <p align="justify">First, I added possibility to optimize 32x32 images. To do so, click on “Optimize 32x32 Images” button. A dialog opens and shows all 32x32 images that don’t have a 2 pixel transparent border. The dialog shows how the optimized images will fit in its 32x32 canva. You can also change the background and icon color (for preview only) to see what it looks like with you own custom theme. Select images to optimize and click on “Update Icons” and Voilà!</p> <p align="justify"><a href="https://lh3.googleusercontent.com/-fOhq7_76VNA/V1pmAoUUwBI/AAAAAAAAA78/0pc3HG97hv8/s1600-h/image%25255B4%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-JnR9tlxS3Rs/V1pmA832z-I/AAAAAAAAA8E/1lADTIkwVWA/image_thumb%25255B2%25255D.png?imgmax=800" width="542" height="386"></a> </p> <p align="justify">Second point, being able to change Entity color. Let’s imagine I optimized and apply the above icon to the selected entity. By clicking on “Change color” button, I can select another color for the entity, preview the change and apply it by clicking on “Apply color change” button.</p> <p><a href="https://lh3.googleusercontent.com/-l4Fkh5B9yXs/V1pmBSOvpfI/AAAAAAAAA8M/Up2yH0TZgB8/s1600-h/image%25255B8%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-G0EJ5ZNeflI/V1pmBUX1XRI/AAAAAAAAA8U/3AOx6uUKlOg/image_thumb%25255B4%25255D.png?imgmax=800" width="541" height="384"></a></p> <p>Last point, it’s now possible to select multiple entities to update their icons and color in one single operation.</p> <p>This update will be available soon in the XrmToolBox Plugins Store so keep an eye on it or follow me on Twitter (@TanguyTOUZARD) to be notified when the plugin update is available.</p>Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com7tag:blogger.com,1999:blog-1184844056172696501.post-2484295862611574142016-04-28T22:11:00.001+02:002016-04-28T22:11:50.723+02:00Welcome to the XrmToolBox Plugins StoreWow! It's been a long time since I did not write an article on my blog!<br />
<br />
Today, I'm releasing the April 2016 version of XrmToolBox. This new version comes with an integrated plugins store. So, what does it mean?<br />
<br />
It means each and every developer can share his/her XrmToolBox plugins without the need to ask me permissions or help to distribute the plugins across the world.<br />
<br />
Here is what the Plugins Store looks like<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgadtS811fB0ns7mOCE-EiBZGn1PXZg5_I_Gj4YAvaoe2Vti0a3CEDbR7qbEjmfJV0WVpL9yX7Sy_XhQDDmp92PLgq1fLt6QRKaVXGmYE36BCgmLo4KKcZJXxsmqkB_aCFI8Wg9t0jLkbE/s1600/PluginStore.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="154" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgadtS811fB0ns7mOCE-EiBZGn1PXZg5_I_Gj4YAvaoe2Vti0a3CEDbR7qbEjmfJV0WVpL9yX7Sy_XhQDDmp92PLgq1fLt6QRKaVXGmYE36BCgmLo4KKcZJXxsmqkB_aCFI8Wg9t0jLkbE/s400/PluginStore.png" width="400" /></a></div>
<br />
<br />
As you can see, Jonas Rapp and Daryl Labar already shared their plugins through this new channel. To install their plugins, just select them and click on "Install selected packages" button and you are good to go!<br />
<br />
The Plugins store is also capable to detect that a new version of an installed plugin is available and let syou update it.<br />
<br />
The Plugins store is launched automatically after XrmToolBox startup but you can disable this in the store form itself or in XrmToolBox options. The Plugins Store is also available from the main application toolbar.<br />
<br />
So, what do you need to do if you want to share your XrmToolBox plugin? Just follow <a href="https://github.com/MscrmTools/XrmToolBox/wiki/Distribute-your-plugins-through-XrmToolBox-and-NuGet" target="_blank">this procedure</a> on XrmToolBox wiki<br />
<br />
Finally, you can download this new version on the <a href="http://www.xrmtoolbox.com/" target="_blank">XrmToolBox website</a>, as usual. Or maybe you installed March version and if everything goes as expected (crossing fingers), you should be able to update your XrmToolBox application automatically thanks to the XrmToolBox auto updater released in previous version.<br />
<br />Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com7tag:blogger.com,1999:blog-1184844056172696501.post-35803099238805322462015-07-31T13:29:00.001+02:002015-07-31T13:29:35.208+02:00New XrmToolBox plugin : Chart Manager<p align="justify">Just this once, the August release is published in July. Indeed, I’m on holidays this evening and I want to be sure everybody has the chance to get a new release of XrmToolBox with a new plugin : Chart Manager</p> <p><strong>Chart Manager</strong></p> <p align="justify">Chart Manager is a plugin that helps you to export/import charts from/to Microsoft Dynamics CRM in bulk. It also allows to edit the XML definition of a chart directly, without the need to export/import.</p> <p align="justify"><a href="http://lh3.googleusercontent.com/-WODg2JpC-HU/VbtcG7iGcrI/AAAAAAAAA6k/PdzYUaVIDcA/s1600-h/ChartManager-2%25255B3%25255D.png"><img title="ChartManager-2" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="ChartManager-2" src="http://lh3.googleusercontent.com/-1eNIxCceh6M/VbtcHZJsrTI/AAAAAAAAA6o/FrkSfrUONig/ChartManager-2_thumb%25255B1%25255D.png?imgmax=800" width="541" height="369"></a></p> <p><strong>XrmToolBox</strong></p> <p align="justify">The toolbox itself and some plugins have been updated to fix bugs and add enhancements. The release note is <a href="https://github.com/MscrmTools/XrmToolBox/releases" target="_blank">available here</a>.</p> <p align="justify">If you are already using XrmToolBox, you should have received an Update Notification. If not, just go to <a href="http://www.xrmtoolbox.com">www.xrmtoolbox.com</a> to download the latest version.</p> Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com6tag:blogger.com,1999:blog-1184844056172696501.post-87976989302542454152015-07-06T13:21:00.001+02:002015-07-06T13:21:19.929+02:00New XrmToolBox version and MVP award<p>Hi everybody,</p> <p align="justify">First of all, maybe you already saw it on social networks but I’' have been renewed as a Microsoft Dynamics CRM MVP for the 6th time! Great honor to be part of the CRM MVP group again and thanks to all XrmToolBox users that make this possible.</p> <p align="justify">Regarding XrmToolBox, I just released a new version today.</p> <p align="justify"><strong>New plugins management</strong></p> <p align="justify">It is a breaking change version since plugins management have been revamped to use Microsoft Extensibilty Framework, which means plugins need to be migrated to this new plugins mechanism to work. This new mechanism helps to manage plugins automatically with no custom code, and also allow to deliver files with multiples plugins inside.</p> <p align="justify">If you use plugins other than ones shipped with XrmToolBox, you might want to keep the previous version available until other plugins are migrated. Of course, all plugins shipped with XrmToolBox are compatible.</p> <p align="justify"><strong>Usage statistics</strong></p> <p align="justify">I aslo implemented a new mechanism that will help me and other developers to understand how often plugins are used. To do so, when starting XrmToolBox, a prompt will ask for your agreement to send totally anonymous information about your usage of XrmToolBox plugins. To be clear, the only data sent is the version of XrmToolBox and the name of the plugin executed.</p> <p align="justify">Here is the prompt</p> <p align="justify"><a href="http://lh3.googleusercontent.com/-8I8VpxnVfwQ/VZpkpN4oc8I/AAAAAAAAA5k/ISO4zn6oDa0/s1600-h/XrmToolBoxStatisticsQuestion%25255B2%25255D.png"><img title="XrmToolBoxStatisticsQuestion" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="XrmToolBoxStatisticsQuestion" src="http://lh3.googleusercontent.com/-Kf0XRJ__-Uc/VZpkpgxqQpI/AAAAAAAAA5o/K9omW_kuxRc/XrmToolBoxStatisticsQuestion_thumb.png?imgmax=800" width="244" height="132"></a></p> <p align="justify">You can always change your mind by de/activating this feature in XrmToolBox options</p> <p align="justify"><a href="http://lh3.googleusercontent.com/-iaFuklz_f0c/VZpkp89xJQI/AAAAAAAAA5w/WrR5vRUFrs8/s1600-h/XrmToolBoxStatisticsSetting%25255B2%25255D.png"><img title="XrmToolBoxStatisticsSetting" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="XrmToolBoxStatisticsSetting" src="http://lh3.googleusercontent.com/-_cr-Ko3C1UU/VZpkqlAMiCI/AAAAAAAAA54/MfbNPAJrLn0/XrmToolBoxStatisticsSetting_thumb.png?imgmax=800" width="244" height="138"></a></p> <p align="justify"> <p align="justify">You will be able to see statistics on <a href="http://statcounter.com/p10479559/summary/?guest=1" target="_blank">statecounter</a></p> <p align="justify"><strong>Help content (developers)</strong></p> <p align="justify">Developers can now include a help link in their plugins. By implementing interface IHelpPlugin, a new menu is available to redirect users to a help web page of your choice.</p> <p align="justify"><a href="http://lh3.googleusercontent.com/-XgpxHBdwE14/VZpkrIc5sFI/AAAAAAAAA6A/xaouU_eQMqQ/s1600-h/XrmToolBoxHelp%25255B3%25255D.png"><img title="XrmToolBoxHelp" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="XrmToolBoxHelp" src="http://lh3.googleusercontent.com/-TaLj5aPqC2M/VZpkrgWOpAI/AAAAAAAAA6I/VOKwlU3xgy8/XrmToolBoxHelp_thumb%25255B1%25255D.png?imgmax=800" width="544" height="112"></a></p> <p><strong>Other updates</strong></p> <p>To see the complete list of other changes, read the release notes</p> <p><strong>Download</strong></p> <p>As usual, you can download the latest version on <a href="http://www.xrmtoolbox.com">www.xrmtoolbox.com</a></p> Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com2tag:blogger.com,1999:blog-1184844056172696501.post-57522565920834766032015-06-09T10:16:00.001+02:002015-06-09T10:16:59.080+02:00XrmToolBox version 1.2015.6.9<p>Today, I released a new version of XrmToolBox that is mainly a maintenance release (see <a href="https://github.com/MscrmTools/XrmToolBox/releases" target="_blank">release note</a> for details).</p> <p>Nevertheless, two enhancements have been made to the XrmToolBox application:</p> <ul> <li>Search bar has now focus when XrmToolBox is open: This will avoid an extra click to reach search bar, so you can start typing the tool you want to use as soon as XrmToolBox is displayed<br> <li>Connection selection dialog now has a “Most Recently used” feature that allows to display connections that have been used recently so when you often work on the same organizations, these connections are displayed on top of the connection list</li></ul> <p>Without “Most Recently used” feature activated</p> <p><a href="http://lh3.googleusercontent.com/-0YSB7_vqjvg/VXag8C-gL1I/AAAAAAAAA44/ftgJUtCN7Rc/s1600-h/NoMru%25255B2%25255D.png"><img title="NoMru" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="NoMru" src="http://lh3.googleusercontent.com/-QrFO2D6sStE/VXag9OXpcVI/AAAAAAAAA5A/FGf_oRifAqY/NoMru_thumb.png?imgmax=800" width="244" height="193"></a></p> <p>With “Most Recently used” feature activated</p> <p><a href="http://lh3.googleusercontent.com/-0TY3XkKPaQ8/VXag9p4LTtI/AAAAAAAAA5I/x3gYH_HcsxY/s1600-h/Mru%25255B2%25255D.png"><img title="Mru" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="Mru" src="http://lh3.googleusercontent.com/-aCrMhE6b-wY/VXag-Wq822I/AAAAAAAAA5M/m2tNPZ0wWxI/Mru_thumb.png?imgmax=800" width="244" height="193"></a></p> <p>As usual, this release is available for download on <a href="http://www.xrmtoolbox.com">www.xrmtoolbox.com</a></p> Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com0tag:blogger.com,1999:blog-1184844056172696501.post-59063430602237237112015-05-06T17:04:00.001+02:002015-05-06T17:04:32.026+02:00New XrmToolBox version : v1.2015.5.6<p>A new version of XrmToolBox is available! No new tools from me but some bug fixes and enhancements. The release note is available <a href="https://github.com/MscrmTools/XrmToolBox/releases" target="_blank">here</a>.</p> <p>Just be aware that plugins are now stored in a subfolder “Plugins” in “XrmToolBox” folder. This is to ensure XrmToolBox.exe is found easily in the main folder. If you are a XrmToolBox plugin developer and your plugin is storing its own settings file, then please check if everything is still working.</p> <p><strong>Other plugins</strong></p> <p>Maybe you already know it but XrmToolBox github wiki page lists available plugins for XrmToolBox. Some new plugins were added lately so please have a look <a href="https://github.com/MscrmTools/XrmToolBox/wiki/available-plugins-for-XrmToolBox" target="_blank">here</a></p> Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com6tag:blogger.com,1999:blog-1184844056172696501.post-85215791868815633672015-02-21T14:58:00.001+01:002015-02-21T14:58:11.937+01:00XrmToolBox first release on Github!<p>Hi XrmToolBox friends,</p> <p align="justify">Today is a big day for XrmToolBox! First release on Github has been published and I have a lot of news to announce!</p> <p><strong>XrmToolBox on Github</strong></p> <p align="justify">I already made this announcement before but that’s official now, with this first release, XrmToolBox is hosted on Github and CodePlex project won’t receive updates anymore.</p> <p align="justify">You can reach this project on Github by following <a href="https://github.com/MscrmTools/XrmToolBox" target="_blank">this link</a> (or read following announcement)</p> <p><strong>XrmToolBox home page</strong></p> <p align="justify">XrmToolBox has its own home page now! You can bookmark <a href="http://www.xrmtoolbox.com">www.xrmtoolbox.com</a>. It has never been easier to find where XrmToolBox resides!</p> <p align="justify">If you are a XrmToolBox plugin developer, and you want me to provide you a subdomain of XrmToolBox.com, just ask (you can see the FetchXml Builder example here : <a href="http://fxb.xrmtoolbox.com">http://fxb.xrmtoolbox.com</a>). .</p> <p align="justify"><strong>New tool: FLS Bulk Updater!</strong></p> <p align="justify">I don’t know if you already faced this scenario but I had to update 10 Field Security Profiles with more than 300 Fields Permissions. And it was a nightmare… Ok, you can select multiple Fields Permissions for one profile and update them in bulk. But you still have to open each Field Security Profile… boring…</p> <p align="justify">FLS Bulk Updater displays all Field Security Profiles, and all Fields Permissions. You just have to tick profiles and fields you want to update and select properties to apply. Click on “Update FLS”, you’re done!</p> <p><a href="http://lh5.ggpht.com/-ZZvlm5lRSc4/VOiO8PPQsOI/AAAAAAAAA4Q/efpD9dbJVGY/s1600-h/image%25255B3%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://lh3.ggpht.com/-l2kyEomzIfY/VOiO8n58kUI/AAAAAAAAA4U/DDPAJgOgJYs/image_thumb%25255B1%25255D.png?imgmax=800" width="552" height="273"></a></p> <p>You can also check properties for one Field Security Profile by selecting it in the profiles list.</p> <p><strong>XrmToolBox development</strong></p> <p>XrmToolBox includes three new interfaces that helps you to add shortcuts to your own CodePlex or Github projects and to add PayPal donations links (like XrmToolBox does).</p> <p>Download</p> <p>To download the latest release, go to <a href="https://github.com/MscrmTools/XrmToolBox/releases" target="_blank">XrmToolBox Github project releases page</a></p> Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com2tag:blogger.com,1999:blog-1184844056172696501.post-60402779339157266612015-01-20T22:27:00.001+01:002015-01-20T22:27:41.116+01:00XrmToolBox new version : Welcome CRM 2015<p align="justify">XrmToolBox previous version was a great success : More than 5K downloads, 13 ratings with an average rate of 4,7/5.</p> <p align="justify">So today, I’m proud to release a new version of XrmToolBox. This is kind of a major version since a lot of changes are included in this release. Please read blow</p> <h3>CRM 2015 and .Net Framework 4.5.2</h3> <p align="justify">This release is the version of XrmToolBox to use CRM 2015 SDK assemblies. That means plugins for XrmToolBox can now uses new capabilities of CRM 2015 SDK (of course, it can still connect to CRM 2011 and 2013). That means above all that XrmToolBox now requires .Net Framework 4.5.2.</p> <p align="justify">When launching this new version, if your computer does not contain this version of .Net Framework, you will be prompt to download and install it.</p> <h3>Signed assemblies</h3> <p align="justify">Thanks to Digicert.com which provides free code signing certificate to Microsoft MVP’s, files that are shipped with XrmToolBox package are now all digitally signed. That means you can check if files your are using with XrmToolBox come from me and were not altered by another developer.</p> <p>To check this, just look at file properties</p> <p><a href="http://lh5.ggpht.com/-ZxmVpRKrQdY/VL7IRLOG1cI/AAAAAAAAA3o/ffZZ2ubngPo/s1600-h/image%25255B3%25255D.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="image" src="http://lh3.ggpht.com/-4IdCuLUUiuo/VL7IR2x5NVI/AAAAAAAAA3w/NylaifdMvaw/image_thumb%25255B1%25255D.png?imgmax=800" width="270" height="145"></a></p> <h3>Updated version checker</h3> <p align="justify">If you are using XrmToolBox previous version, you should already have received a notification about this new version. I updated this dialog box to display also a “What’s new“ section. This allows you to check what are the new features before going to CodePlex download page.</p> <p><a href="http://lh6.ggpht.com/-gyG0QSsxZNc/VL7IScYqY6I/AAAAAAAAA34/nUrS-cnNCUA/s1600-h/XrmToolBoxUpdate%25255B3%25255D.png"><img title="XrmToolBoxUpdate" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="XrmToolBoxUpdate" src="http://lh4.ggpht.com/-uzlb6oxY7dw/VL7IS8SODyI/AAAAAAAAA38/cRk9NyRpWio/XrmToolBoxUpdate_thumb%25255B1%25255D.png?imgmax=800" width="548" height="398"></a></p> <h3>Other updates among others</h3> <p>Here are some of the other updates (for a complete list, go to download page):</p> <ul> <li> <div align="justify">The rate of the latest version of XrmToolBox on CodePlex is now displayed on the main application</div></li> <li> <div align="justify">When closing XrmToolBox, if plugins are opened, you are prompted for a confirmation</div></li> <li> <div align="justify">You can close XrmToolBox plugins with a middle click on tabs</div></li> <li> <div align="justify">All MscrmTools plugins have been migrated to the new development model from Daryl Labar</div></li></ul> <h3 align="justify">Download</h3> <p>As usual, you can download latest version on <a href="http://xrmtoolbox.codeplex.com/releases" target="_blank">CodePlex</a></p> Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com4tag:blogger.com,1999:blog-1184844056172696501.post-78579139043360737852014-12-02T10:44:00.001+01:002014-12-02T10:44:52.704+01:00New XrmToolBox release : control your plugins list easily<p>Today, I released a new version of XrmToolBox. No new tool in this release but you now have the possibility to select the plugins to display and the ones to hide (without removing them from the XrmToolBox folder).</p> <p>Here is the option dialog</p> <p><a href="http://lh5.ggpht.com/-ezDaohsi6H0/VH2KD2DQcNI/AAAAAAAAA3I/V7C8T_DfMh8/s1600-h/image%25255B3%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://lh5.ggpht.com/--PNbexK0cx4/VH2KEquxqfI/AAAAAAAAA3M/DhUu0eM0WKU/image_thumb%25255B1%25255D.png?imgmax=800" width="562" height="406"></a></p> <p>This version includes also improvements for some tool.</p> <p>Check the download page on <a href="http://xrmtoolbox.codeplex.com/releases/" target="_blank">CodePlex</a> to view a list of improvements</p> <p>Next release will probably support Microsoft Dynamics CRM 2015 (even if this version should be able to connect to this version, not tested yet)</p> Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com2tag:blogger.com,1999:blog-1184844056172696501.post-69801684208623504032014-11-21T11:01:00.001+01:002014-11-21T11:01:22.147+01:00New XrmToolBox plugins : FetchXmlBuilder and Solution History<p>This is a great time for XrmToolBox! A lot of external plugins for XrmToolBox are coming from everywhere!!</p> <p>Well, they are two new plugins but they are amazing:</p> <ul> <li><a href="https://solutionhistory.codeplex.com/" target="_blank">Solution History</a></li> <li><a href="https://fxb.codeplex.com/" target="_blank">FetchXml Builder</a></li></ul> <p>Just click on the link to go to their CodePlex projects and download them</p> Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com3tag:blogger.com,1999:blog-1184844056172696501.post-77636778476701917342014-11-11T19:57:00.001+01:002014-11-11T19:57:00.918+01:00Such a great family!<p>I’m currently in Seattle for a dedicated CRM MVP Summit, and look who’s there? All the CRM MVP family!</p> <p><a href="http://lh6.ggpht.com/-iib_FGBx1cw/VGJb-bNCW1I/AAAAAAAAA2w/j1oromzkLt4/s1600-h/WP_20141111_10_38_31_Pro__highres%25255B3%25255D.jpg"><img title="WP_20141111_10_38_31_Pro__highres" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="WP_20141111_10_38_31_Pro__highres" src="http://lh4.ggpht.com/-aGKYj_cjNNE/VGJb-1u-kXI/AAAAAAAAA20/pOyD-HlQQ3Y/WP_20141111_10_38_31_Pro__highres_thumb%25255B1%25255D.jpg?imgmax=800" width="555" height="314"></a></p> Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com3tag:blogger.com,1999:blog-1184844056172696501.post-48269431573101603862014-10-15T11:56:00.001+02:002014-10-29T09:37:38.879+01:00What’s new in XrmToolBox worldIf you are using the latest version of XrmToolBox, then you should see this popup when launching it <br />
<a href="http://lh6.ggpht.com/-LGnWPjvPNcg/VD5Eu1e8HjI/AAAAAAAAA1I/9HTFFVufLZY/s1600-h/image%25255B3%25255D.png"><img alt="image" border="0" src="http://lh6.ggpht.com/-Ho_t66_fLz8/VD5EvXZKmxI/AAAAAAAAA1Q/zaytJ31Hpws/image_thumb.png?imgmax=800" height="155" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="244" /></a><br />
This was the super cool hidden feature of the previous version! It works (I’m relieved…)<br />
In this new release of XrmToolBox, there is three new features, as described below<br />
<b>Optimization in plugin development</b><br />
<div align="justify">
Thanks to Daryl LaBar, one of the developer of other XrmToolBox plugins, the way to develop plugins for XrmToolBox has never been so easy. All you have to do is to create a user control that inherits from PluginBase class. All the connectivity is handle by the base class and you just have to focus on what your tool should do.</div>
<div align="justify">
Daryl added also helper classes to handle asynchronous call in a really easy way. <a href="http://blog.allegient.com/how-to-make-it-easier-to-create-a-plugin-for-the-xrmtoolbox" target="_blank">Read his blog article on this topic</a>.</div>
<div align="justify">
The documentation on CodePlex project page explains how to use the new development model.</div>
<div align="justify">
<b>A new tool : Metadata Browser</b></div>
<div align="justify">
Even if Microsoft delivers a metadata browser solution in the CRM SDK package, it is just a pain to install this solution in each organization I am working on. So I developed a XrmToolBox plugin that does the same job : allows you to browse metadata from your organization. It’s a first version and I may have forgotten some features but I think it’s quite complete.</div>
<div align="justify">
How does it work?</div>
<div align="justify">
The first action of the tool is to retrieve the list of entities</div>
<div align="justify">
<a href="http://lh4.ggpht.com/-i6nKwGC93VY/VD5EwANl_5I/AAAAAAAAA1Y/SZMcNCLFvcI/s1600-h/image15.png"><img alt="image" border="0" src="http://lh3.ggpht.com/-fx427rfQ0P4/VD5Ex1eBRyI/AAAAAAAAA1g/W6psomUBCGc/image_thumb7.png?imgmax=800" height="395" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="547" /></a></div>
<div align="justify">
By double clicking on an item, you can then see the metadata for the selected entity</div>
<div align="justify">
<a href="http://lh4.ggpht.com/-VIL03cY_40E/VD5Eyl5DqEI/AAAAAAAAA1o/eymBhlHG32I/s1600-h/image3.png"><img alt="image" border="0" src="http://lh3.ggpht.com/-hWo4xDZPp3A/VD5EzgDOL-I/AAAAAAAAA1s/ZGvXyljAp9o/image_thumb1.png?imgmax=800" height="384" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="531" /></a></div>
<div align="justify">
You can browse all set of metadata included attributes, relationships and privileges. You can also see these items in lists for better reading</div>
<div align="justify">
<a href="http://lh6.ggpht.com/-mEFc5mO8pRQ/VD5E0O734lI/AAAAAAAAA14/C-3ykMxmYx4/s1600-h/image7.png"><img alt="image" border="0" src="http://lh6.ggpht.com/-TvvEpXMhh44/VD5E02-Q4WI/AAAAAAAAA18/ghRLD-w6KIE/image_thumb3.png?imgmax=800" height="386" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="534" /></a></div>
<div align="justify">
Again, when double clicking on an item, its properties are displayed in a property grid</div>
<div align="justify">
<a href="http://lh3.ggpht.com/-hTACL-O3210/VD5E1V773DI/AAAAAAAAA2I/UycZjE09F2s/s1600-h/image11.png"><img alt="image" border="0" src="http://lh3.ggpht.com/-1iNgn5Gpkto/VD5E2BhselI/AAAAAAAAA2M/NDgVZADYIUU/image_thumb5.png?imgmax=800" height="384" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="531" /></a></div>
<div align="justify">
To come back to previous screen, just click on button “Hide Panel”</div>
<div align="justify">
You will have the possibility to select columns you want to display in lists and their order. This configuration will be saved to avoid to reconfigure the layout you want each time.</div>
<div align="justify">
As usual, this tool is included in XrmToolBox package available on <a href="http://xrmtoolbox.codeplex.com/">CodePlex</a></div>
<div align="justify">
<b>Another new tool : User Settings Utility</b></div>
<div align="justify">
This one was asked by my fellow MVP Scott Sewell. It allows to update user personal settings in bulk like <a href="http://crm2011usersettings.codeplex.com/">this solution does</a>.</div>
<div align="justify">
<a href="http://lh6.ggpht.com/-he9tZTFZlsY/VD5E2owl5kI/AAAAAAAAA2Y/g053cHdL7Dk/s1600-h/image4.png"><img alt="image" border="0" src="http://lh6.ggpht.com/-AGn26mnYET0/VD5E3vEJRhI/AAAAAAAAA2c/zmgx67eT2gQ/image_thumb1%25255B1%25255D.png?imgmax=800" height="361" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="539" /></a></div>
<div align="justify">
Again, this tool is included in XrmToolBox package available on <a href="http://xrmtoolbox.codeplex.com/">CodePlex</a></div>
Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com10tag:blogger.com,1999:blog-1184844056172696501.post-6052671259865081102014-09-17T15:18:00.001+02:002014-09-17T15:18:19.241+02:00New XrmToolBox plugin : Bulk Form Attribute Manager<p>And now a new version of XrmToolBox!</p> <p align="justify">This release includes a new plugin that will help you to apply some actions on attributes displayed in mutliples forms. The need for this tool came from a XrmToolBox user that has an entity with 180 forms. Imagine how long it takes to change one attribute property on each of these forms…. Nightmare!</p> <p align="justify">So, the tool will help you to change the following properties for an attribute on multiple forms:</p> <ul> <li> <div align="justify">Label</div></li> <li> <div align="justify">Visibility</div></li> <li> <div align="justify">Read Only</div></li> <li> <div align="justify">Lock</div></li></ul> <p align="justify">The tool can also help you to add/remove an attribute on multiple forms. When adding an attribute, you need to specify next to which existing attribute this new field will be added. If available space, the attribute is just added. If no space available, a new row in the section is added before adding the new attribute.</p> <p align="justify"><a href="http://lh5.ggpht.com/-O9lzfYkNpk4/VBmKFMyzxGI/AAAAAAAAA0w/2wapV0GhPaY/s1600-h/image%25255B3%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://lh3.ggpht.com/-bT5V0omRZAo/VBmKGQ-ET3I/AAAAAAAAA04/ADExDMnRStY/image_thumb%25255B1%25255D.png?imgmax=800" width="553" height="400"></a></p> <p align="justify">Some other tools in the toolbox have been fixed as some lists had a size problem (due to Visual Studio 2013 Update 3, as far as I can tell). That should now be fixed.</p> <p align="justify">Another great feature of the new version of XrmToolBox is the Check Version feature: when the toolbox starts, it calls CodePlex download page to see if there is a new version available. If so, a popup warns you and you can open the download page. That should help you to keep the toolbox up to date (you can also follow the project on CodePlex to receive new version notification).</p> <p align="justify">As usual, the new version can be downloaded on <a href="http://xrmtoolbox.codeplex.com/">CodePlex</a></p> Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com2tag:blogger.com,1999:blog-1184844056172696501.post-25412111768401441632014-08-15T16:19:00.001+02:002014-08-15T16:19:16.719+02:00New XrmToolBox plugin from Andy Popkin: Bulk Workflow Tool<p align="justify">It’s a long time since I’m in touch with Andy Popkin from ZeroToTen. We were talking about the possibility to add multiple plugins to my XrmToolBox tool. I already announced this in a previous blog post without mentionning the exact purpose of the upcoming tools.</p> <p align="justify">So today, Andy released the first XrmToolBox plugin of (I hope) a long list : The Bulk Workflow Tool.</p> <p align="justify">You can find all information about this tool on <a href="http://www.zero2ten.com/blog/crm-2013-bulk-workflow-tool-for-xrmtoolbox/" target="_blank">this blog post</a>, and you can download the plugin <a href="http://goo.gl/zPUL0X" target="_blank">here</a>.</p> <p align="justify">I would like to finish this post with a special thank you to Andy for participating to the XrmToolBox adventure!</p> Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com0tag:blogger.com,1999:blog-1184844056172696501.post-39195384164654508432014-07-16T16:22:00.001+02:002014-07-16T16:25:55.162+02:00New XrmToolBox plugin : User Roles Manager<p>Again, this tool is an application for Robert Boyer, my suggestion box for XrmToolBox tools currently <img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-bottom-style: none; border-right-style: none; border-left-style: none" alt="Sourire" src="http://lh5.ggpht.com/-YFuDDmT8bb4/U8aKl9a_lqI/AAAAAAAAA0E/OslDMPPUe7g/wlEmoticon-smile%25255B2%25255D.png?imgmax=800"></p> <p>So, the tool allows you to select multiple roles and multiple users or teams to:</p> <ul> <li>Add the selected roles to selected users or teams</li> <li>Remove the selected roles to selected users or teams</li> <li>Remove all existing roles from selected users or teams and add them roles selected</li></ul> <p>There is some limitations:</p> <ul> <li>You cannot use remove roles action on your own profile</li> <li>Business unit roles, that are not inherited from root business unit can only be added to users/teams in the same business unit</li></ul> <p>I hope this tool will improve your productivity when the need to add or remove multiple roles on multiples users or teams comes.</p> <p>Here is a screenshot of the plugin:</p> <p><a href="http://lh3.ggpht.com/-kiyuL-TKjaA/U8aKmxLxDpI/AAAAAAAAA0M/46SgCwS_F7Q/s1600-h/image%25255B3%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://lh4.ggpht.com/-MtzCEaHTtfU/U8aKnvP7gdI/AAAAAAAAA0U/ihxRbIU9TCM/image_thumb%25255B1%25255D.png?imgmax=800" width="557" height="333"></a></p> <p>As usual, this tool is available as part of the XrmToolBox on <a href="http://xrmtoolbox.codeplex.com" target="_blank">CodePlex</a></p> <p>NB: There is also a bunch of updates for other tools, check them on the download page</p> Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com5tag:blogger.com,1999:blog-1184844056172696501.post-40866519260070532212014-05-28T11:59:00.001+02:002014-05-28T11:59:10.506+02:00New XrmToolBox plugin : Import/Export NN relationships<p>Two plugins in one day! wow!</p> <p>This one was, in fact, developed a couple of months ago.</p> <p align="justify">One of my colleague was using a solution from my fellow MVP Andrii Butenko which allows to import/export NN relationships in a silverlight web resource. This was nice but my colleague was using other attributes than primary key to do the mapping and Andrii’s solution does not support this.</p> <p align="justify">So he asked me to develop a XrmToolBox’s plugin that could do this.</p> <p align="justify">And, here it is! You can select entities and relationships and moreover, choose mapping attributes on both enitities. I only let text and number attributes selectable as other does not really make sense for mapping purposes.</p> <p align="justify">Then you can import or export NN relationships!</p> <p align="justify">Here is a preview</p> <p align="justify"><a href="http://lh4.ggpht.com/-I0pDPIKPyn8/U4WzaTqR44I/AAAAAAAAAzs/DAept1BfQS8/s1600-h/image%25255B3%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://lh6.ggpht.com/-M4ELJ8r2KlQ/U4WzbMmsfKI/AAAAAAAAAz0/fUPKl46Ilzk/image_thumb%25255B1%25255D.png?imgmax=800" width="548" height="398"></a></p> <p align="justify">As usual, this plugin, among other, is available with XrmToolBox on <a href="http://xrmtoolbox.codeplex.com/">CodePlex</a></p> Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com13tag:blogger.com,1999:blog-1184844056172696501.post-39023879435079367932014-05-28T11:50:00.001+02:002014-05-28T11:50:17.564+02:00New XrmToolbox Plugin : Solution Components Mover<p>Hey guys,</p> <p align="justify">Here is another tool for the XrmToolBox! This one, like the previous one, was asked by a member of the community (by the way, he is the same guy than for Synchronous event order editor).</p> <p align="justify">It allows you to move all or defined components from a solution to another one. What’s the point? Well, when working on a specific feature, you might want to isolate the corresponding items in a specific solution. When the feature is completed, you want to transfer components from your specific solution to the deliverable solution.</p> <p align="justify">Instead of adding each type of components, one by one, this tool helps you add them in a bulk.!</p> <p align="justify">Here’s a preview</p> <p align="justify"><a href="http://lh3.ggpht.com/-U41rHueFeac/U4WxTwkGv2I/AAAAAAAAAzY/-0GBBRIgqaI/s1600-h/image%25255B3%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://lh6.ggpht.com/-xOToqyqo_So/U4WxU5lZW5I/AAAAAAAAAzg/LA5CpPVjChc/image_thumb%25255B1%25255D.png?imgmax=800" width="548" height="398"></a></p> <p align="justify">As usual, this plugin, among other, is available with XrmToolBox on <a href="http://xrmtoolbox.codeplex.com/" target="_blank">CodePlex</a></p> Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com4tag:blogger.com,1999:blog-1184844056172696501.post-47202903110391171602014-04-15T13:44:00.001+02:002014-04-15T13:44:42.860+02:00New XrmToolBox plugin : Synchronous events execution order editor<p align="justify">Last week, I receive a request from Rob Boyers that was asking for a tool that can help him to order execution order of synchronous events, plugin steps and workflows.</p> <p align="justify">Indeed, in Dynamics CRM 2013, you can set the “rank” property of a plugin step to define its execution order among other steps in the same message and stage, using the PluginRegistrationTool. Unfortunately, there is no such way to edit the “rank” property of a synchronous workflow in a UI. </p> <p align="justify">So, here is the “Synchronous events execution order editor”, a new XrmToolBox plugin</p> <p align="justify"><a href="http://lh5.ggpht.com/-s3Fez4komKs/U00bpj5x9dI/AAAAAAAAAyU/eoicmjzkT_4/s1600-h/image%25255B3%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://lh5.ggpht.com/-PiF6r3av_UQ/U00bqW3ivPI/AAAAAAAAAyY/F8hQ36i2dTM/image_thumb%25255B1%25255D.png?imgmax=800" width="554" height="284"></a></p> <p align="justify">It works only with CRM 2013 and loads all synchronous plugin steps and workflows and group them by Entity, Message and Stage. When selecting a stage, you can see all events registered and you can update the rank value.</p> <p align="justify">Then, just click on the button “Apply update(s)” to update events on the organization. Just a note: for synchronous workflows that are activated, they will be deactivated, updated then activated back.</p> <p align="justify">As usual, the XrmToolBox and its plugins are available on <a href="http://xrmtoolbox.codeplex.com/" target="_blank">CodePlex</a></p> Tanguyhttp://www.blogger.com/profile/11346655744554013623noreply@blogger.com1