Ribbon Customization Part 12:Custom Ribbon Tab in CRM is now always selected

Usually when we add a custom tab to the HomePageGrid as discussed in the post  , it will add the custom tab but when navigate to different entities , All the times, Custom Tab is selected, in order to avoid that we need add the below TabDisplayRule

<TabDisplayRules>

     <TabDisplayRule TabCommand="Mscrm.Isv.Global">

          <EntityRule Context ="HomePageGrid" AppliesTo ="SelectedEntity"/>

      </TabDisplayRule>

</TabDisplayRules>

 

That’s it.,by this You can avoid the default selection of the custom Tab all the times.

Dynamics CRM 2011 Ribbon Customization Index

Here I am listing the index for my posts For Ribbon Customization

Topic Link
Understanding the CRM 2011 Ribbon
https://dynamicscrm2011.wordpress.com/2011/04/05/ribbon-customization/
Adding a Custom Tab to the CRM 2011 ribbon ( for HomePageGrid., and this will display for all the entities—like a Custom ISV Tab)

https://dynamicscrm2011.wordpress.com/2011/04/12/ms-dynamics-crm-2011-ribbon-customization-part-i-add-a-custom-tab-to-microsoft-dynamics-crm-2011-ribbon/

Understanding the Ribbon Customization-Schemas of the Ribbon https://dynamicscrm2011.wordpress.com/2011/04/12/ms-dynamics-crm-2011-ribbon-customization-part-2-understanding-the-ribbon-customization/
Adding a Custom Tab to the Specific Entity ( i.e for opportunity entity) https://dynamicscrm2011.wordpress.com/2011/04/13/ribbon-customization-part-3-add-a-custom-tab-to-a-specific-entityopportunity-entity/
Adding a Custom Tab, Custom Group,Button to the Grid Ribbon of a specific entity (i.e for Opportunity Entity) https://dynamicscrm2011.wordpress.com/2011/04/27/ribbon-customization-part-4-add-a-custom-tab-custom-group-and-custom-buttons-to-a-specific-entityopportunity-entity/
Adding a Custom Tab, Custom Group,Button to the Form Ribbon and SubGrid Ribbon of a specific entity (i.e for Opportunity Entity) https://dynamicscrm2011.wordpress.com/2011/04/27/ribbon-customization-part-5-add-a-custom-tab-custom-group-and-custom-buttons-to-a-form-ribbon-for-a-specific-entityopportunity-entity/
Adding a  Custom Group,Button to the existing tab of a specific entity (i.e for Opportunity Entity) https://dynamicscrm2011.wordpress.com/2011/04/28/ribbon-customization-part-6-add-a-custom-group-and-custom-buttons-to-existing-tab-for-a-specific-entityopportunity-entity/
Hiding a Ribbon Button in CRM 2011 https://dynamicscrm2011.wordpress.com/2011/04/28/ribbon-customization-part-7-hiding-a-ribbon-button-in-dynamics-crm-2011/
Hiding a Group of Ribbon Buttons in CRM 2011 https://dynamicscrm2011.wordpress.com/2011/04/29/ribbon-customization-part-8-hiding-a-group-of-ribbon-buttons-in-dynamics-crm-2011/
Adding a Button to Existing Group for custom entity’s Ribbon in Dynamics CRM 2011 https://dynamicscrm2011.wordpress.com/2011/05/02/ribbon-customization-part-9-adding-a-button-to-existing-group-for-custom-entitys-ribbon-in-dynamics-crm-2011/
   
   
   
   
   
   
   
   
   

Ribbon Customization-Part 4-Add a Custom Tab, Custom Group and Custom Buttons to a Grid Ribbon for a Specific Entity(Opportunity Entity)

In my earlier post we have seen how to add a custom tab to a specific entity

Today I am going to perform the following tasks

  1. Adding  a Custom Group to the  CRM 2011 Ribbon for a specific entity( I am taking opportunity entity for this purpose)
  2. Adding  a Custom Buttons to the Custom Group With the Specific Actions for the Buttons
    1. On Click of First Button we will open the “www.microsoft.com”
    2. On Click of the Second Button we will  call a simple Java script function Which exists in a web resource.

Coming to the Actions in sequence,

  • Create a new Solution called “OpportunitySolution” and add Opportunity entity  and a newly created web resource called ”ShowMessage.js” with the following Code
   1: function show(Val)

   2: {

   3: alert("Button "+Val+" action performed.");

   4: }

  • Publish the customizations
  • Export the Solutions and Save
  • Unzip the Solution and Edit the customizations.xml  with  any XML Editor  I prefer VS 2010.
  • search for <Entity> as shown the below screenshot Collapse the <FormXML> tag then you can see the <RibbonDiffXML> for the opportunity
  • Adding a Button to CRM 2011 Grid ribbon with specific actions to Opportunity Entity
  • Add the CustomActions to the RibbonDiffXMLwith the below code
  •    1: <CustomActions>

       2:        <CustomAction Id="Sample.Grid.opportunity.CustomTab.CustomAction" Location="Mscrm.Tabs._children" Sequence="40">

       3:          <CommandUIDefinition>

       4:            <Tab Id="Sample.Grid.opportunity.CustomTab" Command="Sample.Grid.opportunity.CustomTab" Title="$LocLabels:Sample.opportunity.CustomTab.Title" Description="$LocLabels:Sample.opportunity.CustomTab.Description" Sequence="500">

       5:              <Scaling Id="Sample.Grid.opportunity.CustomTab.Scaling">

       6:                <MaxSize Id="Sample.Grid.opportunity.CustomTab.FirstGroup.MaxSize" GroupId="Sample.Grid.opportunity.CustomTab.FirstGroup" Sequence="10" Size="LargeMedium" />

       7:              </Scaling>

       8:              <Groups Id="Sample.Grid.opportunity.CustomTab.Groups">

       9:                <Group Id="Sample.Grid.opportunity.CustomTab.FirstGroup" Command="Sample.Grid.opportunity.FirstGroup" Sequence="10" Title="$LocLabels:Sample.opportunity.CustomTab.FirstGroup.Title" Template="Mscrm.Templates.3.3">

      10:                  <Controls Id="Sample.Grid.opportunity.CustomTab.FirstGroup.Controls">

      11:                    <Button Id="Sample.Grid.opportunity.CustomTab.FirstGroup.FirstButton" ToolTipTitle="$LocLabels:Sample.opportunity.CustomTab.FirstGroup.FirstButton.LabelText"

      12:                            ToolTipDescription="$LocLabels:Sample.opportunity.CustomTab.FirstGroup.FirstButton.ToolTipDescription"

      13:                            Command="Sample.Grid.opportunity.FirstButton"

      14:                            Sequence="10"

      15:                            LabelText="$LocLabels:Sample.opportunity.CustomTab.FirstGroup.FirstButton.LabelText"

      16:                            Alt="$LocLabels:Sample.opportunity.CustomTab.FirstGroup.FirstButton.LabelText"

      17:                            Image16by16="/_imgs/ribbon/AddEmail_16.png"

      18:                            Image32by32="/_imgs/ribbon/Email_32.png" TemplateAlias="o1" />

      19:                    <Button Id="Sample.Grid.opportunity.CustomTab.FirstGroup.SecondButton"

      20:                            ToolTipTitle="$LocLabels:Sample.opportunity.CustomTab.FirstGroup.SecondButton.LabelText"

      21:                            ToolTipDescription="$LocLabels:Sample.opportunity.CustomTab.FirstGroup.SecondButton.ToolTipDescription"

      22:                            Command="Sample.Grid.opportunity.SecondButton"

      23:                            Sequence="20"

      24:                            LabelText="$LocLabels:Sample.opportunity.CustomTab.FirstGroup.SecondButton.LabelText"

      25:                            Alt="$LocLabels:Sample.opportunity.CustomTab.FirstGroup.SecondButton.LabelText"

      26:                            Image16by16="/_imgs/ribbon/AddEmail_16.png"

      27:                            Image32by32="/_imgs/ribbon/Email_32.png" TemplateAlias="o1" />

      28:  

      29:                  </Controls>

      30:                </Group>

      31:              </Groups>

      32:            </Tab>

      33:          </CommandUIDefinition>

      34:        </CustomAction>

      35:      </CustomActions>

  • Add the Templates with the following code
  •    1: <Templates>

       2:          <RibbonTemplates Id="Mscrm.Templates"></RibbonTemplates>

       3:        </Templates>

  • Add the <<CommandDefinitions>> with the below code
  •    1: <CommandDefinitions>

       2:          <CommandDefinition Id="Sample.Grid.opportunity.CustomTab">

       3:            <EnableRules>

       4:              <EnableRule Id="Mscrm.Enabled " />

       5:            </EnableRules>

       6:            <DisplayRules>

       7:              <DisplayRule Id="Mscrm.CanWriteOpportunity" />

       8:            </DisplayRules>

       9:            <Actions />

      10:          </CommandDefinition>

      11:          <CommandDefinition Id="Sample.Grid.opportunity.FirstGroup">

      12:            <EnableRules>

      13:              <EnableRule Id="Mscrm.Enabled " />

      14:            </EnableRules>

      15:            <DisplayRules>

      16:              <DisplayRule Id="Mscrm.CanWriteOpportunity" />

      17:            </DisplayRules>

      18:            <Actions />

      19:          </CommandDefinition>

      20:          <CommandDefinition Id="Sample.Grid.opportunity.FirstButton">

      21:            <EnableRules/>

      22:            <DisplayRules/>

      23:            <Actions>

      24:              <Url Address ="http://www.microsoft.com"></Url>

      25:            </Actions>

      26:          </CommandDefinition>

      27:          <CommandDefinition Id="Sample.Grid.opportunity.SecondButton">

      28:            <EnableRules/>

      29:            <DisplayRules/>

      30:            <Actions>

      31:              <JavaScriptFunction Library="$webresource:new_/ShowMessage.js" FunctionName="show">

      32:                <StringParameter Value="2" />

      33:              </JavaScriptFunction>

      34:            </Actions>

      35:          </CommandDefinition >

  • Observe how I have added the Actions for the buttons ,generally actions are performed by ribbon controls and these are of 2 types
    • Java script functions
    • Opening an UL
  • If you observe the First button action is “Opening an URL”
  • For  the Second Button action is –On click of the Button it would show the Message from the Java Script Function and also passing a string parameter from the Ribbon control to the JavaScript function
  • Add the <<RuleDefinitions>> with the Following code
  •    1: <RuleDefinitions>

       2:         <TabDisplayRules>

       3:           <TabDisplayRule TabCommand="Sample.Grid.opportunity.CustomTab">

       4:             <EntityRule EntityName="opportunity" Context="HomePageGrid" />

       5:           </TabDisplayRule>

       6:         </TabDisplayRules>

       7:         <DisplayRules/>

       8:         <EnableRules />

       9:       </RuleDefinitions>

  • In the Rule Definition I specified  exclusively that the buttons should appear on the Grid Ribbon only. Not on the Form Ribbon and Sub Grid Ribbon
  • Add the <LocLables> with the below code
  •    1: <LocLabels>

       2:        <LocLabel Id="Sample.opportunity.CustomTab.FirstGroup.FirstButton.LabelText">

       3:          <Titles>

       4:            <Title languagecode="1033" description="First Button" />

       5:          </Titles>

       6:        </LocLabel>

       7:        <LocLabel Id="Sample.opportunity.CustomTab.Description">

       8:          <Titles>

       9:            <Title languagecode="1033" description="A custom tab for the Opportunity entity." />

      10:          </Titles>

      11:        </LocLabel>

      12:        <LocLabel Id="Sample.opportunity.CustomTab.FirstGroup.Title">

      13:          <Titles>

      14:            <Title languagecode="1033" description="First Group" />

      15:          </Titles>

      16:        </LocLabel>

      17:        <LocLabel Id="Sample.opportunity.CustomTab.FirstGroup.FirstButton.ToolTipDescription">

      18:          <Titles>

      19:            <Title languagecode="1033" description="The first button in the first group." />

      20:          </Titles>

      21:        </LocLabel>

      22:        <LocLabel Id="Sample.opportunity.CustomTab.Title">

      23:          <Titles>

      24:            <Title languagecode="1033" description="Custom Tab" />

      25:          </Titles>

      26:        </LocLabel>

      27:        <LocLabel Id="Sample.opportunity.CustomTab.FirstGroup.SecondButton.LabelText">

      28:          <Titles>

      29:            <Title languagecode="1033" description="Second Button" />

      30:          </Titles>

      31:        </LocLabel>

      32:        <LocLabel Id="Sample.opportunity.CustomTab.FirstGroup.SecondButton.ToolTipDescription">

      33:          <Titles>

      34:            <Title languagecode="1033" description="The second button in the first group." />

      35:          </Titles>

      36:        </LocLabel>

      37:      </LocLabels>

  • Check the below screenshots  for the functionality
  • Initial display of the buttons on the Opportunity Entity Grid ribbon
  • Adding Buttons on the Grid Ribbon
  • On Click of the  first button an window will open with the URL www.microsoft.com as shown the below screenshot
  • Opening a URL from the CRM2011 Ribbon Button
  • On Click of the second Button  the result look like below screenshot and the “2” is the string parameter we passed to the JavaScript function
  • CRM2011 Ribbon Button Action
  • You can download the Complete Solution from here

Happy Learning Smile

MS Dynamics CRM 2011 :Ribbon Customization Part-2-Understanding the Ribbon customization

Revisit my earlier post and dig in to the details of how we added a tab and also button to the tab.

  1.       As we need to Add a “Tab” , as we understood from the Post 1, any modifications to the ribbon definitions should be done at  <Custom Actions>
  2. See the picture below,<Custom Action> can contain <Custom Action> or <Hide Action>
    RibbonDiffXml Dynamics CRM 2011

    RibbonDiffXML

     

  3. <Custom Action> should have Id, Location ,Sequence, Title, CommandUIDefinition

So we added the following Custom Action

<CustomAction Id=Mscrm.Isv.GlobalCustomAction Location=Mscrm.Tabs._children Sequence=100>
 
 
 

 

4.  < CommandUIDefinition > can contain any  type (for ex: button,tab etc.,) what is displayed in the  above Screenshot. But we are interested to add Tab,So refer the screenshot for the Properties and the elements Tabtaype contains so we added the following < CommandUIDefinition >

< CommandUIDefinition >       

<Tab Id=”Mscrm.Isv.Global” Command=”Mscrm.Isv.Global” Description=”Custom Tab” Title=”Custom Tab” Sequence=”1000″>

            <Scaling Id=”Mscrm.Isv.Global.Scaling”>

              <MaxSize Id=”Mscrm.Isv.Global.Group0.MaxSize” Sequence=”10″ GroupId=”Mscrm.Isv.Global.Group0″ Size=”Large” />

              <Scale Id=”Mscrm.Isv.Global.Group0.Scale.Medium” Sequence=”20″ GroupId=”Mscrm.Isv.Global.Group0″ Size=”Medium” />

              <Scale Id=”Mscrm.Isv.Global.Group0.Scale.Small” Sequence=”30″ GroupId=”Mscrm.Isv.Global.Group0″ Size=”Small” />

              <Scale Id=”Mscrm.Isv.Global.Group0.Scale.Popup” Sequence=”40″ GroupId=”Mscrm.Isv.Global.Group0″ Size=”Popup” />

            </Scaling>

            <Groups Id=”Mscrm.Isv.Global.Groups”>

              <Group Id=”Mscrm.Isv.Global.Group0″ Sequence=”10″ Command=”Mscrm.Isv.Global.Group0″ Title=”Custom Group1″ Description=”Custom Group1″ Template=”Mscrm.Templates.Flexible”>

                <Controls Id=”Mscrm.Isv.Global.Group0.Controls”>

                  <Button Id=”Mscrm.Isv.Global.Group0.Control0″ Command=”Mscrm.Isv.Global.Group0.Control0″ LabelText=”$LocLabels:Mscrm.Isv.Global.Group0.Control0.LocLabel” ToolTipTitle=”$LocLabels:Mscrm.Isv.Global.Group0.Control0.LocLabel” ToolTipDescription=”$LocLabels:Mscrm.Isv.Global.Group0.Control0.ToolTip.LocLabel” Image16by16=”/_imgs/area/18_home.gif” Image32by32=”/_imgs/area/18_home.gif” Image16by16Class=”ms-crm-Upgraded-Ribbon-Image16″ Image32by32Class=”ms-crm-Upgraded-Ribbon-Image32″ Sequence=”10″ TemplateAlias=”o1″ />

                </Controls>

              </Group>

            </Groups>

          </Tab>

        </CommandUIDefinition>

5.   After this we need to specify the <CommandDefinitions> which Specifies a set of rules that control how a ribbon element is displayed and actions to perform that can be referenced by ribbon elements and controls See the below screenshot for how the Command definition should be done

CommandDefinetion Dynamics CRM 2011 ribbon

CommandDefinetion Dynamics CRM 2011 ribbon

<CommandDefinitions>

      <CommandDefinition Id=”Mscrm.Isv.Global.Group0.Control0″>

        <EnableRules />

        <DisplayRules>

          <DisplayRule Id=”Mscrm.Isv.Global.Group0.Control0″ />

        </DisplayRules>

        <Actions>         

        </Actions>

      </CommandDefinition>

      <CommandDefinition Id=”Mscrm.Isv.Global”>

        <EnableRules />

        <DisplayRules>

          <DisplayRule Id=”Mscrm.Isv.Global” />

        </DisplayRules>

        <Actions />

      </CommandDefinition>

      <CommandDefinition Id=”Mscrm.Isv.Global.Group0″>

        <EnableRules />

        <DisplayRules />

        <Actions />

      </CommandDefinition>

    </CommandDefinitions>

6.  Then we need to add the  Rule definetions. Please check the below screenshot for the details how the Rule definitions should be configured so we added

Rule DefinetionGlobal Microsoft dynamics CRM 2011

<RuleDefinitions>

      <TabDisplayRules>

        <TabDisplayRule TabCommand=”Mscrm.Isv.Global”>

          <PageRule Address=”*” />

        </TabDisplayRule>

      </TabDisplayRules>

      <DisplayRules>

        <DisplayRule Id=”Mscrm.Isv.Global”>

           <OrRule>

            <Or>

              <CrmClientTypeRule Type=”Web” />

            </Or>

           </OrRule>

        </DisplayRule>

        <DisplayRule Id=”Mscrm.Isv.Global.Group0.Control0″>

          <CrmOfflineAccessStateRule State=”Offline” InvertResult=”true” />

        </DisplayRule>

      </DisplayRules>

      <EnableRules />

    </RuleDefinitions>

7.  At the End we have added thee Lockables where you can specify the text to display in the ribbon labels and tooltips

<LocLabel Id=”Mscrm.Isv.Global.Group0.Control0.LocLabel”>

        <Titles>

          <Title languagecode=”1033″ description=”Custom Button” />

        </Titles>

      </LocLabel>

      <LocLabel Id=”Mscrm.Isv.Global.Group0.Control0.ToolTip.LocLabel”>

        <Titles>

          <Title languagecode=”1033″ description=”Custom Button” />

        </Titles>

      </LocLabel>

    </LocLabels>

MS Dynamics CRM 2011 :Ribbon Customization Part-1-Add a custom tab to Microsoft Dynamics CRM 2011 ribbon

If you need the basics on  Ribbon customization please check my earlier blog  MS Dynamics CRM 2011 :Ribbon Customization Part-1

Today  we will look at how to add a tab  and a custom button to the tab to the existing CRM 2011 ribbon

  1. Create a new Solution with the name ‘AddCustomTabSolution’
  2. Add the Exisitng’ApplicationRibbon’ to the above solution
  3. Save and Export the solution
  4. Unzip the Solution , Edit the Customization File.
  5. The open the customization file  it appears as below.  

<ImportExportXml xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”&gt;

 <Entities></Entities>

 <Roles></Roles>

  <Workflows></Workflows>

  <FieldSecurityProfiles></FieldSecurityProfiles>

  <Templates />

  <RibbonDiffXml>

    <CustomActions />

    <Templates>

      <RibbonTemplates Id=”Mscrm.Templates”></RibbonTemplates>

    </Templates>

    <CommandDefinitions />

    <RuleDefinitions>

      <TabDisplayRules />

      <DisplayRules />

      <EnableRules />

    </RuleDefinitions>

    <LocLabels />

  </RibbonDiffXml>

  <EntityMaps />

  <EntityRelationships />

  <OrganizationSettings />

  <optionsets />

  <Languages>

    <Language>1033</Language>

  </Languages>

</ImportExportXml>

6. Now our task is to add a Tab to the Ribbon . as from our earlier post we know that whatever we need to do(Add, Remove, Hide items) on the Ribbon we need to do under CustomActions

7. Adding a Custom Action By Specifying the CustomAction 

<CustomAction Id=”Mscrm.ISV.MyCustomTabAction” Location=”Mscrm.Tabs._children” Sequence=”1000″>
        <CommandUIDefinition>

          <Tab Id=”Mscrm.ISV.MyCustomTab” Command=”Mscrm.ISV.MyCustomTabCommand” Description=”Custom Tab” Title=”Custom Tab” Sequence=”1000″>

            <Scaling Id=”Mscrm.Isv.Global.Scaling”>

              <MaxSize Id=”Mscrm.Isv.Global.Group0.MaxSize” Sequence=”10″ GroupId=”Mscrm.Isv.Global.Group0″ Size=”Large” />

              <Scale Id=”Mscrm.Isv.Global.Group0.Scale.Medium” Sequence=”20″ GroupId=”Mscrm.Isv.Global.Group0″ Size=”Medium” />

              <Scale Id=”Mscrm.Isv.Global.Group0.Scale.Small” Sequence=”30″ GroupId=”Mscrm.Isv.Global.Group0″ Size=”Small” />

              <Scale Id=”Mscrm.Isv.Global.Group0.Scale.Popup” Sequence=”40″ GroupId=”Mscrm.Isv.Global.Group0″ Size=”Popup” />

            </Scaling>

            <Groups Id=”Mscrm.Isv.Global.Groups”>

              <Group Id=”Mscrm.Isv.Global.Group0″ Sequence=”10″ Command=”Mscrm.Isv.Global.Group0″ Title=”Custom Group1″ Description=”Custom Group1″ Template=”Mscrm.Templates.Flexible”>

              </Group>

            </Groups>

          </Tab>

        </CommandUIDefinition>

      </CustomAction>

8. Specify the Command Definition

<CommandDefinitions>

      <CommandDefinition Id=”Mscrm.ISV.MyCustomTabCommand”>

        <EnableRules />

        <DisplayRules>

          <DisplayRule Id=”Mscrm.ISV.MyCustomTabCommand” />

        </DisplayRules>

        <Actions />

      </CommandDefinition>

      <CommandDefinition Id=”Mscrm.Isv.Global.Group0″>

        <EnableRules />

        <DisplayRules />

        <Actions />

      </CommandDefinition>

      </CommandDefinitions>

9.   Specify the display Rule

<DisplayRule Id=”Mscrm.ISV.MyCustomTabAction”>

       <OrRule>

          <Or>

            <CrmClientTypeRule Type=”Web” />   

          </Or>

        </OrRule>

       </DisplayRule>

10.  Save the Customization file, Zip the Solution and import the Solution and Refresh the Web page you can see the Custom Tab with the Custom Button inside a Custom Group  and the ribbon now looks like as shown in the screenshot.

Adding a Custom Tab to MS CRM 2011



The entire customization file  can be Downloaded here .
Unmanaged Solution can be downloaded here