通过Ribbon workbench 可以追加新的ribbon并且追加相应的事件事件。
但是对于标准Ribbon则只能做到隐藏,不能追加自定义逻辑。
查阅了一些资料发现可以通过修改xml的形式进行操作。
以account为例,对【新建】Ribbon设置enablerule规则。
1、首先查阅sdk中如下路径: \SDK 2015\Resources\ExportedRibbonXml 中的accountRibbon.xml文件。
找到下面的xml配置。
这个就是crm底层的标准配置,我们将其粘贴出来放到自定义的节点上。
<CommandDefinition Id="Mscrm.NewRecordFromForm">
<EnableRules>
<EnableRule Id="Mscrm.AvailableOnForm" />
EnableRules>
<DisplayRules>
<DisplayRule Id="Mscrm.PrimaryIsNotActivity" />
<DisplayRule Id="Mscrm.HideInLegacyRibbon" />
<DisplayRule Id="Mscrm.CreatePrimaryEntityPermission" />
DisplayRules>
<Actions>
<JavaScriptFunction FunctionName="Mscrm.RibbonActions.openNewRecord" Library="/_static/_common/scripts/RibbonActions.js">
<CrmParameter Value="PrimaryEntityTypeName" />
JavaScriptFunction>
Actions>
CommandDefinition>
2、我们新建一个solution把account实体添加进去。然后导出。
在RibbonDiffXml 节点做如下修改:
<RibbonDiffXml>
<CustomActions />
<Templates>
<RibbonTemplates Id="Mscrm.Templates">RibbonTemplates>
Templates>
<CommandDefinitions>
<CommandDefinition Id="Mscrm.NewRecordFromForm">
<EnableRules>
<EnableRule Id="Mscrm.AvailableOnForm" />
<!-追加下面的EnableRule规则->
<EnableRule Id="Mscrm.Home.Ribbons.OpenNewRecord.EnableRule" />
EnableRules>
<DisplayRules>
<DisplayRule Id="Mscrm.PrimaryIsNotActivity" />
<DisplayRule Id="Mscrm.HideInLegacyRibbon" />
<DisplayRule Id="Mscrm.CreatePrimaryEntityPermission" />
DisplayRules>
<Actions>
<JavaScriptFunction FunctionName="Mscrm.RibbonActions.openNewRecord" Library="/_static/_common/scripts/RibbonActions.js">
<CrmParameter Value="PrimaryEntityTypeName" />
JavaScriptFunction>
Actions>
CommandDefinition>
CommandDefinitions>
<RuleDefinitions>
<TabDisplayRules />
<DisplayRules />
<EnableRules>
<EnableRule Id="Mscrm.Home.Ribbons.OpenNewRecord.EnableRule">
<-!指定个人自定义的JS事件!->
<CustomRule FunctionName="test" Library="$webresource:new_test.js" Default="false">
CustomRule>
EnableRule>
EnableRules>
RuleDefinitions>
<LocLabels />
RibbonDiffXml>
new_test.js 中test方法只有 return false。
function test()
{
return false;
}
将方法改为return true.
```
function test()
{
return true;
}