Правило включения ленты CRM 2011 на сетке не срабатывает при каждом изменении строки

Я пытаюсь добавить кнопку на ленту 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>

Обновление Хорошо, правило срабатывает один раз за строку в первый раз, когда пользователь щелкает по сетке - что препятствовало этому, было наличие отладочной инструкции "alert" в функции JS, которую вызывало правило enable. Теперь просто нужно выяснить, как получить идентификатор обрабатываемой строки...

Какие-нибудь мысли...?

Спасибо

4 ответа

Теперь просто нужно выяснить, как получить идентификатор обрабатываемой строки...

Привет, Мэтт. Я не совсем понимаю, что ты ожидаешь от сценария. Поскольку это правило включения, оно будет использоваться для включения или отключения кнопки ленты путем оценки критериев по всем выбранным элементам в сетке.

Вы, правильно я полагаю, решили установить параметр CrmParameter для передачи SelectedControlSelectedItemIds в ваш сценарий включения. Как я уверен, вы знаете (поскольку вы говорите, что ваше правило включения работает правильно для отдельных выборок) SelectedControlSelectedItemIds представляет собой строковый массив направляющих, и это позволяет вам выполнять итерации всех выборок и совместно оценивать ваше правило для каждого выбранного элемента, если вы хотите.

Что мне неясно, так это то, почему вам нужно знать идентификатор (предположительно) отдельной строки, которая "обрабатывается" (т. Е. Последний выбранный / отмененный элемент?). Я бы предположил, что если один элемент в выборе не соответствует критериям "включения", инкапсулированным в вашем сценарии, то сценарий должен возвращать false, и поэтому выделение последнего [de] выбора является избыточным.

Я неправильно понял ваше требование?:-/

Похоже, ваше определение правила не правильно. Правило selectionCount действует, но не ваше CustomRule (или то, что у вас есть).

Можете ли вы опубликовать свой 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();
Другие вопросы по тегам