2

我正在尝试将按钮添加到网格视图上的 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 函数中有一个调试“警报”语句。现在只需要弄清楚如何获取正在处理的行的 id ......

有什么想法吗...?

谢谢

4

4 回答 4

1

我在 MS Connect 中创建了一个增强请求:

https://connect.microsoft.com/dynamicssuggestions/feedback/details/775400/fire-custom-rule-in-ribbon-enable-rule-when-grid-selection-changes

于 2012-12-28T20:03:52.350 回答
1

现在只需要弄清楚如何获取正在处理的行的 id ......

嗨,马特,我不清楚您现在期望您的脚本做什么。由于这是一个启用规则,它将用于通过评估网格中所有选定项目的标准来启用或禁用功能区按钮。

我相信,您正确地选择了设置CrmParameter以将SelectedControlSelectedItemIds传递给您的启用脚本。我确定您知道(因为您说您的启用规则对单个选择正常工作)SelectedControlSelectedItemIds是一个字符串数组 guid,这允许您迭代所有选择并根据您的需要对每个选定项目集体评估您的规则。

我不清楚的是为什么您需要知道“正在处理”的(大概)单行的 id(即最后选择/取消选择的项目?)。我假设如果选择中的一个项目不符合脚本中封装的“启用”标准,那么脚本应该返回 false,因此隔离最后一个 [de] 选择是多余的。

我误解你的要求了吗?:-/

于 2012-04-17T10:04:55.953 回答
0

是的,您的 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();
于 2012-04-13T05:56:59.697 回答
0

听起来您的规则定义不正确。selectionCount 规则正在触发,但不是您的 CustomRule(或您拥有的任何东西)。

你能发布你的XML吗?

于 2012-04-12T20:05:53.667 回答