Friday, March 16, 2012

Modifying System Ribbon button functionality CRM 2011


I found ribbons in 2011 the most painful part, till i learnt how to use it. It is actually cooler than in CRM4. To modify a system button functionality: All that we need to do here is copy the button ID as is from exportedribbonxml available from  sdk\samplecode\cs\client\ribbon\exportribbonxml\exportedribbonxml\myentityribbon.xml.
In this case, i'm gonna modify my email form's send button functionality. The button definition from emailribbon.xml looks like:

<Button Id="Mscrm.Form.email.Send" Command="MSCRM.Form.email.Send.CustomCommand" Sequence="1" Alt="$Resources:Ribbon.Form.email.MainTab.Actions.Send" LabelText="$Resources:Ribbon.Form.email.MainTab.Actions.Send" Image16by16="/_imgs/SFA/SendAsEmail_16.png" Image32by32="/_imgs/SFA/SendAsEmail_32.png" TemplateAlias="o1" ToolTipTitle="$Resources:Mscrm_Form_email_MainTab_Actions_Send_ToolTipTitle" ToolTipDescription="$Resources:Mscrm_Form_email_MainTab_Actions_Send_ToolTipDescription" />

Add that buttondefinition as we would do for adding any custom button. Just match the location attribute of the Customaction tag for the button with the button ID.
i.e.  Change your CustomAction's location attribute

<CustomAction Id="Mscrm.Form.email.Send.CustomAction" Location="Mscrm.Form.email.Send" Sequence="1"><CommandUIDefinition><Button Id="Mscrm.Form.email.Send" Command="MSCRM.Form.email.Send.CustomCommand" Sequence="1" Alt="$Resources:Ribbon.Form.email.MainTab.Actions.Send" LabelText="$Resources:Ribbon.Form.email.MainTab.Actions.Send" Image16by16="/_imgs/SFA/SendAsEmail_16.png" Image32by32="/_imgs/SFA/SendAsEmail_32.png" TemplateAlias="o1" ToolTipTitle="$Resources:Mscrm_Form_email_MainTab_Actions_Send_ToolTipTitle" ToolTipDescription="$Resources:Mscrm_Form_email_MainTab_Actions_Send_ToolTipDescription" /></CommandUIDefinition></CustomAction>

After this, i define a Commanddefinition MSCRM.Form.email.Send.CustomCommand inside my command definition tag.

<CommandDefinition Id="MSCRM.Form.email.Send.CustomCommand">            <EnableRules><EnableRule Id="Mscrm.UserHasRoleForSend"/>            </EnableRules><DisplayRules><DisplayRule Id="Mscrm.CanWritePrimary" />              <DisplayRule Id="Mscrm.Form.email.InDraftOrFailedState" /></DisplayRules><Actions><JavaScriptFunction FunctionName="send" Library="/_static/activities/email.js" /></Actions></CommandDefinition>

After this, i define my customrule "Mscrm.UserHasRoleForSend" inside a javascript.

<EnableRules><EnableRule Id="Mscrm.UserHasRoleForSend"><CustomRule FunctionName="UserHasRoleForSend" Library="$webresource:customscripts_CheckUserRoleForMarketingList.js" /></EnableRule></EnableRules>

customscripts_CheckUserRoleForMarketingList.js is a webresource jscript that i've already uploaded. I'm calling a function UserHasRoleForSend in customscripts_CheckUserRoleForMarketingList.js. The function returns a true or false value.
Since the display rules are inbuilt i'm not redefining them in my customizations.xml.
Note: If not required, we can remove the displayrules from the custom command. In my case, i just needed to add an additional condition for enabling the "send" button in email form. The same can be done for HomePageGrid buttons also.



No comments:

Post a Comment