CRM 2011功能区启用网格上的每个更改都不会触发网格规则

时间:2012-04-12 16:32:20

标签: dynamics-crm dynamics-crm-2011 ribbon

我正在尝试在网格视图上向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 ...

有什么想法......?

由于

4 个答案:

答案 0 :(得分:1)

  

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

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

我相信,您已选择设置 CrmParameter 以将 SelectedControlSelectedItemIds 传递给启用脚本。我确定你知道(因为你说你的启用规则对于单个选择正常工作) SelectedControlSelectedItemIds 是guids的字符串数组,这允许你迭代所有选择并集体评估你的规则如果您愿意,可以选择项目。

我不清楚为什么你需要知道(正在)“正在处理”的单行的id(即最后选择/取消选择的项目?)。我认为如果选择中的一个项目未通过脚本中封装的“启用”条件,则脚本应返回false,因此隔离最后一个[de]选择是多余的。

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

答案 1 :(得分:1)

答案 2 :(得分:0)

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

你可以发布你的XML吗?

答案 3 :(得分:0)

是的,你的RibbonDiffXml非常有帮助。 但是,从你所说的我认为你需要一个自定义脚本启用/禁用规则。 像这样的东西

<EnableRules>
      <EnableRule Id="Mscrm.AddExistingCustomRule">
       <CustomRule FunctionName="HideExisting" Library="$webresource:new_CustomRule.js" Default="false" >
          <CrmParameter Value="PrimaryEntityTypeCode" />
        </CustomRule>
      </EnableRule>
 </EnableRules>

请在此处查看完整帖子Enable/Disable Out of Box buttons (Sub Grid) based on a custom rule in crm 2011

刚刚发现有一个叫做refreshRibbon()的函数,你可以调用它来刷新RibbonState。 就像这样:

Xrm.Page.ui.refreshRibbon();