我正在尝试在网格视图上向 CRM 2011 功能区添加一个按钮。我希望为某些标准有条件地启用或禁用按钮,这些标准可能因网格中的每一行而异。
我已设置了 EnableRule 并可以正常工作,用于单选和多选 - 问题是该规则仅在所选项目数更改时触发。因此,当用户选择一行时,它第一次有效,但在用户选择不同数量的行之前不会再次触发 - 即。更改单个选定行不会按预期触发启用规则。
编辑 - 我的启用规则 XML 如下所示
<EnableRule Id="cnet.exception.grid.EnableReviewButton">
<CustomRule FunctionName="EnableReviewButtonOnGrid" Library="$webresource:cnet_ribbon_js" Default="false">
<CrmParameter Value="SelectedControlSelectedItemIds" />
</CustomRule>
</EnableRule>
更新好的,当用户第一次单击网格时,规则确实每行触发一次 - 阻止这种情况发生的是在启用规则调用的 JS 函数中有一个调试"alert"语句。 现在只需要弄清楚如何获取正在处理的行的 id...
有什么想法吗?
谢谢
现在只需要弄清楚如何获取正在 处理。。。
嗨,马特,我不清楚你现在期望你的脚本做什么。由于这是一个启用规则,因此它将用于通过根据网格中的所有选定项评估条件来启用或禁用功能区按钮。
我相信,您正确地选择设置一个 CrmParameter 以将 SelectedControlSelectedItemIds 传递给您的启用脚本。我相信您知道(因为您说您的启用规则对单选正确工作)SelectedControlSelectedItemIds 是一个 guid 的字符串数组,这允许您迭代所有选择,并根据需要针对每个选定项共同评估您的规则。
我不清楚的是为什么您需要知道正在"正在处理"的(大概)单行的 id(即最后选择/取消选择的项目?我假设如果选择中的一个项目不符合脚本中封装的"启用"条件,那么脚本应该返回 false,因此隔离最后一个 [de] 选择是多余的。
我误解了您的要求吗? :-/
我在MS Connect中创建了一个增强请求:
https://connect.microsoft.com/dynamicssuggestions/feedback/details/775400/fire-custom-rule-in-ribbon-enable-rule-when-grid-selection-changes
听起来您的规则定义不正确。 选择计数规则正在触发,但不是您的自定义规则(或您拥有的任何规则)。
你能发布你的XML吗?
是的,您的RibbonDiffXml将非常有帮助。但是,从您所说的内容来看,我认为您需要一个自定义脚本启用/禁用规则。像这样的东西
<EnableRules>
<EnableRule Id="Mscrm.AddExistingCustomRule">
<CustomRule FunctionName="HideExisting" Library="$webresource:new_CustomRule.js" Default="false" >
<CrmParameter Value="PrimaryEntityTypeCode" />
</CustomRule>
</EnableRule>
</EnableRules>
在此处查看完整帖子 启用/禁用开箱即用按钮(子网格)基于 crm 2011 中的自定义规则
刚刚发现有一个名为 refreshRibbon() 的函数,您可以调用它来刷新 RibbonState。就像这样:
Xrm.Page.ui.refreshRibbon();