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:
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.