Bench Update with Offline Tools

I’ve updated Woodswork Bench. Along with some visual stuff, it now also hosts my offline tools:


  • Simplicity; built for Microsoft Dynamics CRM 2011 this tool provides Guid Mining, and URL Building services.
  • Determination; a light weight IronPython scripting tool specifically setup for Microsoft Dynamics 2011, however it suitable for use with any .Net assemblies and MSCRM version.

Check it out here.


Using the CRM Audit Log to Rollback Records

Argh! Someone has done something and something is ruined! Fortunately someone only changed records in CRM, and even better audit logging was enabled. You can now use the web service SDK to analyse changes that have occurred, you can then use this information to perform the opposite action and roll back changes.

Continue reading

CRM 2015 Building Action Links (or how a URL can change records in CRM)

I was looking for an easy way to allow a user to perform an action in CRM by opening a hyper link. The idea being the URL can be embedded in an email, SMS, or anything else, and simply opening the URL allows the user to perform an action in CRM (without having to actually use the full CRM interface).

I cobbled together this proof of concept which chains together a couple of components to create an “Action Link”.

aciton url process

Continue reading

CRM 2013 Programmatically Comparing Security Roles

This code will print out all the differences between two given security roles. Useful when you need to sanity check your work or debug security issues.

Differences between Marketing Manager and Marketing Professional
Marketing Manager has prvActivateBusinessProcessFlow: Global
Marketing Manager has prvActivateSynchronousWorkflow: Global
Marketing Manager has prvAppendCompetitor: Global

Marketing Professional has prvActivateSynchronousWorkflow: User
Marketing Professional has prvAppendEmailTemplate: Bu

Continue reading

CRM 2013 Programmatically Comparing User Privileges

When debugging security issues it can be useful to compare the privileges of a functioning user with a non-functioning user.

The code in this post will print out all the privilege differences between two given users.

Differences between and has BU:root, PRIV:prvCreateAccount, DEPTH:Global has BU:root, PRIV:prvCreateActivity, DEPTH:Global has BU:root, PRIV:prvCreateArticle, DEPTH:Global has BU:sub, PRIV:prvCreateActivity, DEPTH:Deep has BU:sub, PRIV:prvCreateArticle, DEPTH:Global

Continue reading

CRM 2011 Rollup 15 and JavaScript Asynchronous Load Order

Those us who use multiple independent JavaScript web resources found that rollup 12 changed the way these were loaded. In particular that they loaded asynchronously and (most importantly) in no particular order. This meant that if you had file A which was dependent on some function in file B. If file A loaded before file B loaded, then file A would throw ‘”something” is undefined’ errors. The behaviour (and fixes) is expanded on in these posts: CRM 2011 Polaris Asynchronous Javascript Loading and Asynchronous loading of JavaScript Web Resources after U12/POLARIS.

At the time I struggled to find an official release from Microsoft commenting on this change – it seemed like a breaking change that caused issues in a number of deployments so I was surprised this wasn’t sign posted more explicitly (maybe I missed something in the release notes :|).

In any case it appears this may now be changing – at least in respect to load order. In the release notes of Rollup 15 under ‘Issues that are resolved in Update Rollup 15 for Microsoft Dynamics CRM 2011’ there is this little nugget:

Loading order of web resource script files is not respected after Update Rollup 12.

It’s difficult to tell exactly what this means and what change will occur, however it definitely suggests that the load order will now be respected (even if they do load asynchronously), which seems like a good thing.