通過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>
<!--add by ="Gavin" begin-->
<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>
<!--add by ="Gavin" end-->
</CommandDefinition>
</CommandDefinitions>
<RuleDefinitions>
<TabDisplayRules />
<DisplayRules />
<EnableRules>
<!--add by ="Gavin" begin-->
<EnableRule Id="Mscrm.Home.Ribbons.OpenNewRecord.EnableRule">
<-!指定個人自定義的JS事件!->
<CustomRule FunctionName="test" Library="$webresource:new_test.js" Default="false">
</CustomRule>
<!--add by ="Gavin" end-->
</EnableRule>
</EnableRules>
</RuleDefinitions>
<LocLabels />
</RibbonDiffXml>
new_test.js 中test方法只有 return false。
function test()
{
return false;
}
3、重新導入solution。
4、效果
將方法改爲return true.
```
function test()
{
return true;
}
“`
效果如下: