Showing posts from March, 2010

MSCRMTools repository

Hi, I created a dedicated site for my tools. This site is quite basic but provide links to download the tools and a small tutorial for each one of them. I thought it is a better way to distribute the tools to my (or your) customers, partners and colleagues since it avoid to go through the blog (even if the tools are quite easily accessible). The link: I hope you will like it...

Empty AsyncOperationBase table when it is too big

With one of my client, I came across a particularly disturbing issue. The symptoms were: 2 minutes to delete a single record   Timeout on restarting the Microsoft CRM asynchronous processing service   Unable to display a view on workflows or system tasks.   Incredibly long time wait for any SQL statement on AsyncOperationBase table Passing a script on the organization database to identify the sizes of tables, I realized that two tables seem particularly large:  AsyncOperationBase (800 000 lines) DuplicateRecordBase (15 000 000 lines) The total size of the database was 12GB.   After passing through the Microsoft support for a procedure to purge these tables, the answer was procedures that would require whole days of SQL processing, which was clearly not an option for a production server.   In agreement with my client, we decided to delete and recreate these tables instead of trying to empty them.   WARNING! The following procedure is of course unsupported and provided as is

Tools update: Improving the speed and lightness

Hi, I just updated three of my tools to make them faster and lighter: BulkDeleteLauncher ViewLayoutReplicator SearchablePropertyAttributeUpdater To do that, I just cleaned the content of the web reference to keep only classes used by the tools. The average weight of the tools was 1,2MB. It is now 350KB Also, the first call to the crm web service is faster as there is so much less data to load

How to create a relative URL in site map to static content under the ISV folder in CRM 4

Very interesting post about the sitemap and ISV folder on the EMEA support blog: How to create a relative URL in site map to static content under the ISV folder in CRM 4

Remove unwanted activities from web interface

Hi, I love the CRM forums because lot of people are asking very interesting question... The last I liked was: how to remove some activities when I click on "New" button in the activities grid or when I click to the top menu "New activity". Indeed, if you don't want to use the campaign response activity, or any other of them, you can't hide them in a native and supported way. So, I give you some hints to hide these activities. Please be aware that these methods are unsupported! Make a backup of each mentionned file before follwoing this procedure. Removing an activity in the "New" activity dialog in activities grid To remove the activity you want, open the file \Activities\dlg_create.aspx. Search for the block in blue in the screenshot below. You can comment or delete the lines that correspond to the activities you need to hide. Then save the file. Removing an activity from the "New activity" top menu For this one, open the file \_

New tool: AssemblyRecovery

Hi, Someone, on Microsoft CRM forums, asked how he would be able to compare plugins or workflow activities between two environments... The obvious answer was to use Reflector to analyze the content of these assemblies. What? You don't have the assemblies? You are not sure which version of the assembly is stored in CRM database? No problem! Just use this new tool that allows you to display the list of custom assemblies and recover them on your disk. As usual, the tool can be downloaded with the following link:

CrmDiagTool: Download location changed

Hi, As Benjamin Lecoq is leaving Microsoft, the CrmDiagTool could have been orphaned... But no! The EMEA support team is the new hoster for this MUST HAVE tool. You can find the tool here:  EMEA Support team

David Berry JavaScript Grid Editor

David Berry developed an awesome javascript to allow the grids to be editable... See his blog:

Tool Update: Form Javascript Manager

Hi, Thanks to Andrew Zimmer, a bug has been corrected in the tool. This bug made the tool decoding the HTML characters that were encoded when exporting the customizations. So when you were importing them back, the HTML characters were no more encoded... You can download this latest version from the usual location (right pane of the blog) 

Survey available

Hi, Just to inform you that I put a survey on the top right part of this blog... Thank you for your participation!

Update: Access Checker

Thanks to Andrew request (see previous post comments), I uploaded a new version of the tool. New features: Tooltip on each privilege to see the privilege ID A "name" resolution is made against the object ID specified (I use the primary attribute of the entity) I will focus next on the peformance of the tool (I need to do some clean up on the CrmService reference to speed the tool)... Enjoy

New tool: Access Checker

Hello everyone, It's been a while that I'm back but I have a lot of work and so little time for this blog. However, things promise is a promise, here is a small tool that could make your life easier. Have you ever encountered this error message: SecLib::AccessCheckEx failed. Returned hr = -2147187962, ObjectID: 1ef9f412-6601-dd11-8655-0019b9dfe618, OwningUser: 98bbc999-96a2-de11-aeaf-0019b9dfe227 and CallingUser: 037c1c90-96a2-de11-aeaf-0019b9dfe227 You do not really know what object and what user it is and especially what rights might fail him. With this tool, you can put all these IDs and know what are the privileges of the user regarding this record. With this tool, you can: Indicate which entity you want to inspect Enter the identifier of the object in question Searching for a user with its name or its unique identifier Click the “Retrieve rights” button and the program will tell you what rights the user with respect to the record. As usual, if you need improvm