Dynamic Ribbon (Microsoft Dynamics CRM 2011)

Uma necessidade que temos sentido com vários parceiros é a de criar extensões na Ribbon Bar que sejam populadas dinamicamente.

 

Esse requisito é possível de alcançar através da utilização dos atributos PopulateDynamically e PopulateQueryCommand.

 

Olhando para o SDK, temos as seguintes definições:

PopulateDynamically

The menu elements that provide options for this control will be populated dynamically at run-time using the command defined by the PopulateQueryCommand attribute.

Default value = "false".

Boolean

PopulateQueryCommand

When the control is populated dynamically, this command will retrieve the menu elements that provide options for this control.

String

 

No Microsoft Dynamics CRM 2011 os componentes com os quais temos esta possibilidade são os mesmos que com o Microsoft Sharepoint 2010, ou seja, SplitButton, FlyoutAnchor, ComboBox, MRUSplitButton e Dropdown.

 A seguinte query do Bing retorna os resultados do SDK do Sharepoint relacionados com este tópico:

https://www.bing.com/search?q=PopulateQueryCommand+meta%3ASearch.MSCategory%28%22ff420337%22%29+site%3Amsdn.microsoft.com+&form=QBRE&qs=n&sk=

Para cada um destes elementos da Ribbon, há a possibilidade de definir a MenuSection.

Para isso podemos seguir os seguintes passos:

1.  Definir o parent control na RibbonDiffXml. Colocar o PopulateDynamically como TRUE e especificar uma definição para a propriedade PopulateQueryCommand.

Exemplo:

PopulateDynamically="true" PopulateQueryCommand="MyDynamicCommand"

 

2. Definir a CommandDefinition para usar um web resource. Nota: é necessário passar a propriedade CrmParameter.

Exemplo:

<CommandDefinition Id="MyDynamicCommand">

      <EnableRules />

      <DisplayRules />

      <Actions>

        <JavaScriptFunction FunctionName="PopulateDynamically" Library="$webresource:new_dynamicRibbon.js">

          <CrmParameter Value="CommandProperties" />

        </JavaScriptFunction>

      </Actions>

    </CommandDefinition>

 

3. Criar um novo web resource (new_dynamicRibbon.js) com o método PopulateDynamically.

Exemplo:

function PopulateDynamically(commandProperties) {

    var menuXml = '<Menu Id=\"ISV.DynamicMenu\">\r\n\t<MenuSection Id=\"ISV.Dynamic.MenuSection\" Sequence=\"10\">\r\n\t\t<Controls Id=\"ISV.Dynamic.Controls\">\r\n\t\t\t<Button Id=\"ISV.Dynamic.Button1\" Command=\"Mscrm.Enabled\" Sequence=\"10\"LabelText=\"Button 1 (Web)\" Alt=\"Button 1\" />\r\n\t\t</Controls>\r\n\t</MenuSection>\r\n</Menu>';

    commandProperties['PopulationXML'] = menuXml;

}

 

Nota: Como resultado, o objecto Properties terá uma propriedade chamada “PopulationXml” que terá a representação do Menu em XML.

 

André Mestre

 

Este post é publicado “AS IS” sem garantias e não confere nenhum direito.