Background:
When an account or a contact isn’t currently engaged in business with your company, we might think of them as “inactive.” – CRM offers a button on the ribbon to ‘deactivate’ the record - but is that the right way to manage the status of a record? - Typically not. – The Active/Inactive status of CRM records really refers to the status of the ‘record’ rather than the contact or account the record refers to. Setting a customer to ‘inactive’ means that it cannot be edited, re-assigned, shared and it immediately gets excluded from most views and reports.
While an administrator may ultimately want to de-activate records if the customer goes out of business or is merged, everyday users shouldn’t be deactivating records on-the-fly. Far more useful is to add a customer “Classification” options to include a more descriptive set of data around why the customer is not an ‘active customer.’ – Once that information is captured, a data administrator can review and deactivate those records through a more methodical process.
Strategy
Normally, within CRM, if you don’t have access to a feature, such as ‘delete’, you don’t see the corresponding button in the Ribbon. – Why not just remove the ‘deactivate’ privilege? Unfortunately there isn’t an activate/deactivate privilege in CRM security – any user who can edit a record, can deactivate it – and users who can edit records can also ‘reactivate’ records that administrators have deactivated.
Solution
In CRM 2011 we have a supported way to edit the ribbon – and by doing so, we can remove the temptation of the activate/deactivate buttons from selected entities. The CRM SDK describes the process of editing a ribbon, but I think most people have found the process to be difficult to implement.
Three tools have been released by various members of the community to address the challenge of editing a CRM ribbon. - The most recent of these tools is from Scott Durow of Develop1.net - the tool is in its final beta, but has generated a lot of positive buzz and has made a couple of tasks much easier for me.
I worked with Scott Durow (@ScottDurow) to develop the basics steps to implement the customization to remove the Activate/Deactivate buttons from non-administrators using his Ribbon Workbench. This demonstration uses the beta version of Scott's
Implementation
Installation of the Ribbon Workbench couldn't be easier, download the solution, import it and refresh your screen browser. It appears as a ribbon icon (naturally) in the customization area. (For more information on using Scott's editor, see
Here are the basic steps to add the display rules to the Activate/Deactivate buttons on the Account entity
1. Create a solution with just the Account entity in it and export a backup.
2. Open the Ribbon Workbench and Select the solution containing the Account entity.
The solution will load and display a representation of the Account entity’s ribbon. (By default, you’re initially working on the ‘form’ ribbon)
4. Select the “Activate” button in the Ribbon → Right click and choose “Customise Command”
5. Locate the “Mscrm.HomepageGrid.Activate” Command in the ‘Solution Elements’ Panel
6. Right Click → Edit Display Rules
7. Click ‘ + Add New’ and change the ID to:
Custom.account.UserHasDeletePriv.DisplayRule
8. Click ‘Add Step’ and select the “Entity Privilege Rule”
9. Set the “Step” Properties as follows:
EntityName: account
PrivilegeDepth: Global
PrivilegeType: Delete
10. Click ok / ok to save the rule.
Add the custom display rule to the Deactivate button:
11. Now, Right click on the “Deactivate”, Choose “Customise Command” –
12. In the “Command” area, Edit the display rule for the “Mscrm.HomepageGrid.Deactivate” Command.
13. The same custom rule will be applied to the deactivate button. Click “Add” to move the rule into the column on the right.
14. Click ok / ok to save the rule
Edit the ribbon on the Form / Sub-Grid
15. Choose ‘Form’ from the ribbon selector in the upper right hand corner.
16. Repeat the process for the Activate / Deactivate buttons on this page – we will re-use the same display rule, applying it each command.
17. In this example we only need to repeat this for the 4 commands shown, since in this case, the “subgrid” uses the same Activate/Deactivate commands as the ‘homepage’ ribbon.
Click Ok and then publish the solution
This takes a moment while the Ribbon Diff XML is added to the solution and reimported.
Refresh the user’s browser and you’ll see that the Activate/Deactivate buttons are now only visible in the Account ribbon IF the user has global delete privileges on the account record. – ‘Regular’ users will not see the Activate/Deactivate buttons. (If a user has workflow permissions, they could still run a workflow to deactivate a record, removing the icon is usually enough to suppress unwanted deactivates.)
Thanks – hope that’s helpful and you’ll be able to apply the same updates to all entities that need that extra bit of protection.
I am trying to use the Enable Rules feature of Ribbon Workbench to disable the Deactivate Button on the ribbon based on a custom javascript function. I've tried everything including attaching it to a command, but it is not working. Can you offer any advise?