Search This Blog

Thursday, December 20, 2012

Did you notice the script finder?

Maybe you noticed there was a new tool in the toolbox. It’s a really simple one that displays all scripts referenced on all entities accross an organization. It is really useful when you arrive on a project without knowing what was really done on forms.

image

I will maybe add an export feature as I’m quite sure someone will ask for it.

Just an extra information: thanks to the toolbox, it took me only 30 minutes to develop this tool!

Downloading the toolbox and Assemblies error

It had to happen…

image

It seems that when downloading the toolbox, assemblies contained in the package are locked by Windows, if you copy/paste files from the archive directly. So, before running the tool, display assemblies properties and unblock them…

image

Or you can simply extract files from the archive using Windows extract built-in feature that seems to remove this lock.

Wednesday, December 19, 2012

Toolbox for Microsoft Dynamics CRM 2011 released!

Ok, I know what you think, previous post about this tool wasn’t necessary since I succeed to release the tool today. Well, yes, you are right…

Anyway, here is the toolbox, a single tool that will include all my tools. It comes with some of my best tools already included (other ones will follow later):

  • Attribute Bulk Updater
  • Iconator
  • Role Updater
  • Scripts Finder
  • SiteMap Editor
  • Solution Import
  • View Layout Replicator
  • WebResources Manager

I developed this toolbox because there was too much executables for all my tools and I wanted a way to ease the development of other tools.

As usual, it’s free and, hopefully, without major bugs (knocking wood…)

image

CodePlex web site includes a documentation page that explains how to create your own tools that can be included in this toolbox. Just by implementing a public interface of the tool, you will be able to develop your own tool without dealing with connection procedure and message display, it’s already managed by the toolbox. So, do not hesitate to create your own tool! I will be happy to list it on the CodePlex page.

Each tool is displayed with a logo (not required), a title, a description and an author

image

image

You just have to click on it to open it in a new tab (so that multiple tools can be opened in the toolbox). You will be prompted to decide if you need a connection to a CRM organization immediatly. If not, each action that requires a connection will open a connection dialog.

Let’s stop talking! Here is the CodePlex page!

Tuesday, December 18, 2012

Create a truly personal field with Field Level Security

Since Microsoft Dynamics CRM 2011 was released, I never had the chance to really use Field Level Security feature. Last week, I was asked to implement a secured field that should be accessed only by the owner of the record, even if the record itself can be accessed by anyone.
 
This can be achieved with one field level security profile and one plugin.
 
Field Level Security Profile
The field level security profile basically restrict Read and Update of the field to all users (or all teams) but allows Create. This way, anyone can create a record with access to the secure field. When created, as all users can’t read or update, the field is not accessible anymore.
 
Plugin
The plugin will handle this problem. On PostCreate event, it will share the secured field with the owner. For this, we use the entity PrincipalObjectAttributeAccess to give Read and Update access to the secured field to the owner of the record.

public void ShareSecureFieldWithOwner(Entity record)
{
    // Any method that helps you find the AttributeMetadata Id
    var attributeId = FindSecuredAttribute();

    if (attributeId != Guid.Empty)
    {
        var userAccess = new PrincipalObjectAttributeAccess
                             {
                                 AttributeId = attributeId,
                                 ObjectId = record.ToEntityReference(),
                                 PrincipalId = record.OwnerId,
                                 UpdateAccess = true,
                                 ReadAccess = true
                             };

        context.AddObject(userAccess);
        context.SaveChanges();
    }
}

Voilà! You have now a secure field accessible only for the owner of the record!

Monday, December 17, 2012

What's coming next...

Hi everybody,

It's a long time since I posted my last article on this blog. Well, I have a lot of work on many projects for our customers at Javista and not so much time to be active on this blog.

But I'm still working on my tools and the next one won't really be a new tool, more a toolbox. The idea is to have only one executable which will be able to embed all my previous tools, and more, tools that would be developed based on interfaces provided by this toolbox. The toolbox will handle all connection features, tool presentation and progress messages from tools.

This way, there will be only one tool in order to access many features. More, if you are using Windows 8 start screen, that means only one tile to access all tools.

image

Here is a preview of the UI (Image, Version, Author and description of each tool is handle by the tool itself, no by the toolbox)

image

The tool will surely be released before all my tools get converted to this new plugin system. I just hope it will be done in the coming month. Tools that are not yet converted will follow later.

You will then be able to develop your own plugin that will integrate smoothly in this toolbox.

Stay tuned for the release date!

Monday, October 15, 2012

New tool: Iconator for Microsoft Dynamics CRM 2011

Maybe you remember CRM 4.0 days where it was possible to use Microsoft’s Demonstration tool to update quickly entity icons… There is no such tool for CRM 2011 since UI allows us to define icons for custom entities based on available image web resources. The boring thing is when you need to update multiple entities: you have to create web resources first, then for each entity, specify large icon and small icon.

So, I’m sure you already understand what’s happening: Here is a new tool that will allows you bulk update custom entities icons: The iconator (thanks to Julie and George for finding the name Sourire)

This tool has been developed in collaboration with my colleague at Javista, Lloyd Sebag (Credits go to him for starting this project)

Features

  • Connect to any type of Microsoft Dynamics CRM 2011 deployment (OnPremise, IFD, Online, Online with Office 365)
  • Apply icons to multiple entities in a single action
  • Load new image web resources
  • Reset entities to default icons

Screenshots

1

2

Where to find the tool

As usual, the tool is available on CodePlex

Documentation is also available on CodePlex

Donations

If you think this tool is helpful and improve your productivity in releasing quality customizations, you can make a donation using the Paypal button on the right pane of this blog. Thanks

Friday, October 5, 2012

Update maximum number of rows exported to Excel…

… without the need to perform SQL update!

Andrii Butenko developed a small utility to change this value, you can find all information here

Thursday, September 20, 2012

Tool update : SiteMap Editor

Rboyers, a codeplex user request a feature which is really a smart one, that will improve again your productivity!

The idea is to “hide” a sitemap component. Being able to not show it on the CRM application but still having this information in the SiteMap Editor.

This is the new feature I implemented today!

To “hide” (I prefer talking about deactivation), right click an item and click on “Disable”

image

The item is now “disabled” (In fact, its XML part is commented, so it still exists and the tool can read this comment as a normal node)

image

You can now update the SiteMap and look at the CRM application, the item disabled is not visible but still exists as comment in the SiteMap XML

To “show” back the item, right click the item and click on “Enable”

Still available on CodePlex

Friday, August 17, 2012

PHP to CRM Online : An easy way to do

Last week, for two of my customers, I was asked to find the way to communicate with CRM Online using PHP. I don’t know anything about PHP so it was quite a challenge to do it.

image

Nevertheless, Microsoft provide some help with the CRM Developer training kit (download it here). It contains a sample to connect to CRM Online with PHP (The lab is named “CRM Online from PHP”) but this sample is out of date since Microsoft changed the authentication model in Microsoft Dynamics CRM Online.

Here is the changes to perform in order to make this sample working.

Use of SSL v3

First thing is to enable use of SSL v3 in the PHP sample. To do this, open the file “LiveIDManager.php” and find the method GetSOAPResponse. This method uses Curl (Client URL Request Library) to perform url calls. Add the following lines before the call of method “curl_exec”:

curl_setopt($cURLHandle, CURLOPT_SSLVERSION , 3);


The final code for the curl use should be like below


$cURLHandle = curl_init();
curl_setopt($cURLHandle, CURLOPT_URL, $soapUrl);
curl_setopt($cURLHandle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($cURLHandle, CURLOPT_TIMEOUT, 180);
curl_setopt($cURLHandle, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($cURLHandle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($cURLHandle, CURLOPT_HTTPHEADER, $headers);
curl_setopt($cURLHandle, CURLOPT_POST, 1);
curl_setopt($cURLHandle, CURLOPT_POSTFIELDS, $content);
curl_setopt($cURLHandle, CURLOPT_SSLVERSION , 3);

$response = curl_exec($cURLHandle);
echo (curl_error($cURLHandle));
curl_close($cURLHandle);


Use of new endpoint for authentication


Still in LiveIDManager.php, the method “authenticateWithLiveID” retrieves authentication token based on the Microsoft account specified (formerly known as Live Id). There is two calls to login.live.com, as below:


$binaryDATokenXML = LiveIDManager::GetSOAPResponse("/liveidSTS.srf" , "login.live.com" , "https://login.live.com/liveidSTS.srf", $soapTemplate);

and

$securityTokenXML = LiveIDManager::GetSOAPResponse("/liveidSTS.srf" , "login.live.com" , "https://login.live.com/liveidSTS.srf", $securityTemplate);


If your organization uses the new authentication model, then the endpoint to use is not “/liveidSTS.srf” but “/extSTS.srf


You will also find the code below that select the Endpoint reference for CRM Online depending on the Url specified for the organization.


$URNAddress = "urn:crm:dynamics.com";

if (strpos($CRMUrl,"crm4.dynamics.com")) {
$URNAddress = "urn:crm4:dynamics.com";
}

if (strpos($CRMUrl,"crm5.dynamics.com")) {
$URNAddress = "urn:crm5:dynamics.com";
}

$securityTemplate = sprintf(
$securityTokenSoapTemplate, LiveIDManager::gen_uuid(), LiveIDManager::getCurrentTime(), LiveIDManager::getNextDayTime(), $liveIDUsername, $liveIDPassword, $cipherValue, $URNAddress);

these “urn” are no more used in the new authentication model for CRM Online. Here is the new values you have to use:















Old valueNew value
crm:dynamics.comcrmna:dynamics.com
crm4:dynamics.comcrmemea:dynamics.com
crm5:dynamics.comcrmapac:dynamics.com

Conclusion


With few updates on the lab from CRM Developer toolkit, you will now be able to communicate with CRM Online from PHP

Monday, July 9, 2012

New tool, new site, stop creating optionset by hand!

Hi guys,

About a month ago, Jerry Weinstock (MVP CRM), asked me some help to develop a tool that will allow you to create option set faster than ever. He wanted to create a community web site where people can share and get files containing options set for Dynamics CRM.

The tool and the website are now ready!

Just go to CrmOptionSet.com

Monday, July 2, 2012

MVP Awards : Everything comes in threes

 

MVP_Horizontal_BlueOnly

It was expected but is now confirmed! I was renewed as a Dynamics CRM MVP.

So, I’m still part of this incredible community of experts that brings so much to the whole Dynamics CRM community. This is my third year with, as usual, exciting events coming (MVP Summit, and a special MVP evening in Paris this month)

Thanks to all of you that read my blog (not so much interesting these days) and use my tools (this is why I’m a MVP, really).

About that, please stay tuned, there will be soon an announcement about a new tool made in collaboration with another MVP…

Tuesday, June 26, 2012

How to use my tools with CRM Online and OSDP authentication

When using my tools with CRM Online, you can get Authentifcation Failure error since few days/weeks/months. This is because Microsoft is migrating CRM online organization to OSDP plaform.

What happens when connecting or updating a connection

You should receive an error message similar to the one below:

image

How to connect successfully to your organizations

Simply tick the new “Use OSDP” checkbox. That should work!

image

Monday, June 25, 2012

Some news about my tools

Hi guys,

Here are some news about my tools :

OSDP authentication mechanism for my tools

Maybe some of you have noticed that my tools can’t connect to specific CRM online organizations… This is due to the fact that Microsoft is migrating CRM Online organizations to Office 365 administration/provisionning/billing platform (known as OSDP).

Last version of my connection controls is able to connect with this new authentication system but I need to update all my tools in order to make them compliant with this authentication mechanism. So if there is an emergency for you to use my tools with OSDP, please use discussion page of related CodePlex project. Otherwise, tools will be updated when I’ll more time…

SiteMap Editor : 10,000 downloads !

I’m very happy that my SiteMap editor has been downloaded more than 10,000 times! I think I can tell it is really the most used of my tools!

[Off topic]

I just have to wait one more week to know if I am renewed as a MVP… can’t wait to have the answer… Stay tuned for it Sourire

Tuesday, June 12, 2012

New tool! Solution Extender for Microsoft Dynamics CRM 2011

You know, solutions management is really a great feature in Microsoft Dynamics CRM 2011. Unfortunately, there are some limitations on what can be included or not in a solution.

So, today, please let me introduce the Solution Extender! It is an application that can export specific CRM 2011 components from an organization and import them back in the same or another organization (unique id’s of components are not retained).

Current features

Export/Import:

  • Duplicate detection rules
  • Saved views (userquery)
  • Saved views (userquery) that will be converted to system view when importing

Download

As usual, the tool and its source code is released on CodePlex. Please use discussions to ask for more components managed in this application.

Screenshots

image

Export wizard

image

image

image

Import wizard

image

Monday, May 21, 2012

Tool updated : Metadata Document Generator 2.0

Hi folks!

Today, I released a new version of my tool Metadata Document Generator

It now uses a new UI, a new assembly for Excel generation (Gembox.Spreadsheet) and prepare the future with a new wizard style behavior.

New features will come in coming months since it is now easier to add features.

Some screenshots

image_12

image_18

As usual, the tool is available on CodePlex

Wednesday, May 16, 2012

Metadata Document Generator updated

I’m pleased to announce that I updated my tool to generate metadata documentation.

Please review change below:

NEW FEATURES
Word document is now using headings for better navigation
Use of GemBox Software Document assembly to generate Word document
Thanks to them! http://www.gemboxsoftware.com/

BUG FIXES
Export fails if two entities have same display name
Export fails if entity has more than one main form
Clicking multiple time on "Check all" button duplicate attributes list
Not working if attributes are Selected
Unable to create connection on Partner VM
Does not generate document in other than main language
Export to Word hangs with Custom Entities

As you can see, Word generation is the almost the only part that has been updated. Hope it will help you more than ever to build documentation!

Thursday, May 10, 2012

Q2 2012 Service Update Beta released

So, as many people, your read the Preview Guide for Q2 2012 Service Update and can’t wait anymore to test all these new features?
You can test it now!
Microsoft release a public beta version yesterday. Just remember that this Q2 2012 Service Update is also known as Release 8, which is not Update Rollup 8.
You will find below a quote shamelessly copied Girish Raja's blog for more information.

What does the beta include?

  • A test only on-premises build
  • Pre-recorded feature overview sessions and power point presentation files
  • Pre-release implementation guide
  • SDK and readme.
Again we’d like to emphasize that the beta release is for test purposes only, and not for production usage. There is no migration path from the beta to the final release, so please plan accordingly and use appropriate test environments. There are elements of upcoming release that are not included in the beta, for example Mobility or CRMOnline specific features are not offered as part of the beta but will be available in the final release.

Where can you get the beta release?

The bits are available on Microsoft Connect site. Please follow the steps below to get access.
  1. Please provision an account on the R8 Beta Connect site by clicking on this link. https://connect.microsoft.com/site687/InvitationUse.aspx?ProgramID=7663&InvitationID=crnb-FJTQ-QPB3
  2. Please complete the R8 Beta Access Survey using this link. (this link will not work until you complete step 1 above) http://connect.microsoft.com/site687/Survey/Survey.aspx?SurveyID=14211
  3. Please access the R8 Beta Package using this link. (this link will not work until you complete steps 1&2 above) https://connect.microsoft.com/site687/Downloads
  4. Please pose any questions about the R8 Beta using this R8 Beta Discussion Group here. (this link will not work until you complete steps 1&2 above) http://innovation.connect.microsoft.com/CRM2011R8Beta/Thread/View.aspx?ThreadId=6861

Questions/Comments?

Post all questions on the Connect discussion group linked above in step #4. If you are having trouble accessing the connect links above, please send an email to crmtapbeta@microsoft.com.

Friday, May 4, 2012

Ultimate ribbon designer : Ribbon Workbench (beta)

If you are used to follow my blog, you know I developed some tools around Dynamics CRM 2011 ribbons: Ribbon Browser and Ribbon Editor.

I think these tools are not useful anymore, since Develop 1 provides an incredible tool, packaged in a CRM 2011 solution that allows you to design ribbons using drag and drop in an amazing UI.

image

It is now just a matter of minutes to add a new control on a ribbon (not only buttons). See the list of supported item below:

image

To download this tool, just go to develop 1 website

This tool is still in beta version but is much better than any other tool I know. It promises the best for future release!

Saturday, February 25, 2012

New tool : Web Resources Manager for Microsoft Dynamics CRM 2011

Hi CRM community!

I received a comment three weeks ago about my JavaScript WebResource Manager saying it was a great tool but it could be cooler to be able to manage all web resource types…

Well, this was a really good request…

Today, I’m really really proud to release my twelfth tools for Dynamics CRM 2011: The (general) Web Resources Manager!

It works mainly like JavaScript WebResource Manager does so you won’t be lost using it.

Features

  • Load/Update/Publish web resources from/to your CRM organization (OnPremise, Online, IFD)
  • Load/Update web resource stored on your computer disk
  • Create/Update/Delete web resources locally and then apply changes to your CRM organization
  • Preview web resources (except Silverlight web resources)
  • Create your web resources folder structure on the tool

It really supports all type of web resources. The only limitation is you can’t preview Silverlight web resources.

I didn’t write documentation yet so just explore menus, buttons et use your mouse to right click on the treeview elements to have more actions capabilities.

Screenshots

image

image

CodePlex

As usual the tool is available on CodePlex. Please use it instead comments to ask questions, submit bugs, etc.

Saturday, February 11, 2012

Bulk Export Solution: There also a tool for that

If you have a lot of unmanaged solution in your deployments and need to backup/export them, it can be boring to export them one by one.

Makarand developed a tool to bulk export unmanaged solutions to help you!

The tool is available on CodePlex : http://crmsolutionbulkexpo.codeplex.com/discussions

Friday, January 27, 2012

New tool : Documentation generator

Hi guys,

What is more awful than writing documentation about entities and attributes used in a project? Can’t see…

I love the tool from Sonoma Partners to generate documentation but it has some limitations:

  • Only OnPremise deployments are supported
  • It generates only Excel document
  • It is a command line utility (I do love UI…)

So, today, I released my own document generator. It can generate Excel or Word document and provide some options to select what you want to see in the generated documentation. Read the documentation on CodePlex for more information about options.

image

As usual, CodePlex link, don’t foget to rate it if you like it, you can support me by making a donation on PayPal.

Please prefer CodePlex discussion to ask question, report bug

Thursday, January 26, 2012

How to colorize grid rows…

Since early days of Dynamics CRM, I’m thinking that Microsoft should provide a way to add conditional colorization for entities grid views. It was possible to do so in CRM 4.0 by modifying some system files but it had two limitations:

  • This was not supported
  • This was not usable in CRM online or if you did not have access to the server file system

In CRM 2011, I found a way to add color to entities grids using the ribbon, even if there are still two limitations:

  • This is still not supported (as I browse and change DOM as you will see below) but does not required access to the filesystem
  • Ribbon element that helps me to colorize the grid view can’t be hidden and it is useful just to add color, it should then not be visible…

As a reminder, the following procedure is not supported but you can use it at your own risk.

Three elements are required:

Ribbon button

This button is added in the HomePageGrid of an entity (but could also be added to SubGrid). It has an Enable rule that perform the grid colorization and returns always false to be deactivated. This is the last remaining difficulty, the SDK doesn’t allow to use a customRule to manage DisplayRule, so we can just deactivate the button.

<RibbonDiffXml>
<CustomActions>
<CustomAction
Id="McTools.HomePageGrid.contact.Colorization"
Location="Mscrm.HomepageGrid.contact.MainTab.Actions.Controls._children"
Sequence="10">
<CommandUIDefinition>
<Button
Command="ColorizeView.Command"
CommandType="General"
Id="McTools.HomePageGrid.contact.Colorization.Button"
Image32by32="/_imgs/Ribbon/Actions_32.png"
LabelText="Colorize"
Sequence="10"
TemplateAlias="o1" />
</CommandUIDefinition>
</CustomAction>
</CustomActions>
<Templates>
<RibbonTemplates Id="Mscrm.Templates" />
</Templates>
<CommandDefinitions>
<CommandDefinition Id="ColorizeView.Command">
<EnableRules>
<EnableRule Id="ColorizeRule" />
</EnableRules>
<DisplayRules />
<Actions />
</CommandDefinition>
</CommandDefinitions>
<RuleDefinitions>
<TabDisplayRules />
<DisplayRules>
<DisplayRule Id="testRule">
<CrmClientTypeRule
Default="false"
InvertResult="false"
Type="Outlook" />
</DisplayRule>
</DisplayRules>
<EnableRules>
<EnableRule Id="ColorizeRule">
<CustomRule
Default="true"
InvertResult="false"
FunctionName="load"
Library="$webresource:mctools_/ColorView/jQuery_1_7_1.js" />
<CustomRule
Default="false"
InvertResult="false"
FunctionName="load"
Library="$webresource:mctools_/ColorView/Scripts.js">
<CrmParameter Value="SelectedControlAllItemReferences" />
<CrmParameter Value="SelectedControl" />
</CustomRule>
</EnableRule>
</EnableRules>
</RuleDefinitions>
<LocLabels />
</RibbonDiffXml>




jQuery library

Download the latest version from jQuery web site and add a new function to permit load of this script file from ribbon. jQuery will help us writing faster code…


function load() {
// Do nothing
}

A custom library

The custom library has a unique function with two parameters:


  • A list of entityReference that contains the grid elements displayed
  • The grid control itself

In this script, I want to colorize male contact in blue and female contact in pink.

I need to retrieve the index of the column that contains the attribute gendercode

var index = $("#gridBodyTable").find("col[name=gendercode]").index();

Then for each entityReference, retrieve the grid row that corresponds to the record

for(var i=0;i<items.length;i++)
{
var id = items[i].Id;

$(grid._element).find("tr[oid='" + id + "']").each(function()
{
// ...
}
}




Check the value of gendercode

if(theTr.find("td:nth-child(" + (index/1 + 1/1) + ")")[0].innerText.indexOf("Homme") >= 0)
{
// ...
}




Apply color

theTr.find("td").css("background-color","lightblue");


Final Script


function load(items, grid)
{
try
{
if(items)
{
var index = $("#gridBodyTable").find("col[name=gendercode]").index();

for(var i=0;i<items.length;i++)
{
var id = items[i].Id;

$(grid._element).find("tr[oid='" + id + "']").each(function()
{
var theTr = $(this);

if(theTr.find("td:nth-child(" + (index/1 + 1/1) + ")")[0].innerText.indexOf("Homme") >= 0)
{
theTr.find("td").css("background-color","lightblue");
}
else if(theTr.find("td:nth-child(" + (index/1 + 1/1) + ")")[0].innerText.indexOf("Femme") >= 0)
{
theTr.find("td").css("background-color","pink");
}
});
}
}
}
catch(e)
{
alert(e.description);
}
}




Screenshot


ColorizedView

Saturday, January 21, 2012

New tool ? No… New assembly!

As some of you might have noticed, new versions of my tools are using an assembly called McTools.Xrm.Connection.

This assembly is one of mine… I just extracted connection specific classes from my tools project and created this assembly.


image

I was wondering if I should make it public… it is, now… That should helps developers to create application without thinking about how to connect to CRM Online, OnPremise or IFD… This assembly should do it for you…

I wrote a small documentation on CodePlex to help you include this assembly in your projects.
You can access this assembly, its documentation and source code on CodePlex : http://connectioncontrol.codeplex.com
 
Just one more thing: Use this assembly in any project you want. If your project will be publicly released, you should indicates that you used this assembly (in an “about” form or anywhere else).

Thanks!
Hope this helps!