22.12.2011, 13:03 | #1 |
Участник
|
Задизэйблить Ribbon
Можно ли сделать в CRM следующее.
Есть кнопка на риббоне, которая создает Order для новой сущности. Само создание Order может занимать какое-то время (несколько секнд, например). Необходимо на это время задизейблить кнопку на риббоне, чтобы пользователь не смог повторно ее нажать (на протяжении тех нескольких секунд, пока создается ордер), кто-нибудь знает, как это можно сделать? Заранее спасибо. |
|
23.12.2011, 11:00 | #2 |
Участник
|
Здравствуйте!
Сталкивался с такой бедой - при нажатии на кнопку создавалась кастомная сущность и потом она открывалась в новом окне, это занимало некое время и юзеры невничая давили на кнопку несколько раз. Решил проблему следующим образом: из скрипта, который висит на кнопке, сразу вызывается новое окошко с новой требуемой сущностью и предварительно заполненными полями. Это происходит быстро и сразу при нажатии на кнопку открывается новое окошко IE, а уж сколько оно потом будет грузиться не так важно поскольку юзер увидел что нажатие на кнопку возымело результат. Как такое сделать написано здесь (ищите Pop the Create form of a CRM record type): http://gtcrm.wordpress.com/2011/03/1...enceupdated-2/ |
|
|
За это сообщение автора поблагодарили: mistah (1). |
23.12.2011, 16:41 | #3 |
Участник
|
Спасибо за ответ, однако это не совсем то, что мне надо.
Конечно, можно сообщить пользователю, что он услышан и не стоит больше нажимать кнопку, но ведь он все-таки ее нажнмет, и получит сообщение об ошибке. Я бы, конечно, ожидал, что в CRM была бы возможность отключить Ленту из JS, например. Однако, похоже, что Xrm.Page.ui.refreshRibbon() - единственная функция Поэтому я не вижу другого решения, кроме создания нового поля на сущности, используемого исключительно для включения или выключения кнопки на Ленте и следующего алгоритма: 1. Перед запуском основной функции, занимающей несколько секунд, менять новый статус на сущности 2. В JS перед вызовом основной функции вызывать Xrm.Page.ui.refreshRibbon() 3. После выполнения основной функции вернуть новый статус назад 4. Потом опять вызвать Xrm.Page.ui.refreshRibbon(). Мне кажется, что этот подход все-таки немного неверен (или в корне неверен), и должны быть более "правильные" методы решения этой проблемы... ИМХО Цитата:
Сообщение от Borisvil
Здравствуйте!
Сталкивался с такой бедой - при нажатии на кнопку создавалась кастомная сущность и потом она открывалась в новом окне, это занимало некое время и юзеры невничая давили на кнопку несколько раз. Решил проблему следующим образом: из скрипта, который висит на кнопке, сразу вызывается новое окошко с новой требуемой сущностью и предварительно заполненными полями. Это происходит быстро и сразу при нажатии на кнопку открывается новое окошко IE, а уж сколько оно потом будет грузиться не так важно поскольку юзер увидел что нажатие на кнопку возымело результат. Как такое сделать написано здесь (ищите Pop the Create form of a CRM record type): http://gtcrm.wordpress.com/2011/03/1...enceupdated-2/ |
|
23.12.2011, 23:29 | #4 |
Участник
|
Я бы попробовал как-то так:
Цитата:
var flag = true;
function OnClickButton() { if (flag) { flag =false; var callback = function () {flag =true;} // Создание ORDERa и после вызов CALLBACKa } else { alert("Процесс создания начался и может занять несколько минут... Пожалуйста подождите..."); } }
__________________
Читайте SDK!!! |
|
|
За это сообщение автора поблагодарили: ashuron (1). |
26.12.2011, 12:18 | #5 |
Участник
|
Здравствуйте!
В настройках видимости или невидимости кнопки на ленте можно цепляться за состояние какого-то поля, но реакция произойдет только после сохранения или рефреша формы, я долго бился с этой проблемой, но спрятать кнопку СРАЗУ после нажатия не получилось. Хотя конечно не исключаю варианта что был просто недостаточно настойчив И в итоге вариант, при котором юзер сразу при нажатии кнопки видит создаваемую форму вполне заказчика устроил. В конце концов если дальше идти путем запрета кнопок, то потом их придется прятать все и дойти до маразма. |
|
26.12.2011, 12:26 | #6 |
Консультант-джедай
|
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
26.12.2011, 12:55 | #7 |
Участник
|
Итак, решил проблему следующим образом:
1. Завел глобальную переменную в скрипте, обявив ее в самом начале и присвоив ей значение true; 2. Перед созданием Order-a присвоил этой глобальной переменной false; 3. После создания Order-a (или при невозможности создания из-за бизнес - правил) выставил значение в true; 4. Функция, запускающая создание Order-a, выполняется только при условии флажок = true. В общем, считаю, что решение подходящее, по крайней мере, можно использовать. Хотя, если честно, осадок остался Всем спасибо. |
|
31.01.2012, 15:54 | #8 |
Участник
|
Для визуального эфекта можно добавить в тег "а" класс ms-cui-ctl-large ms-cui-disabled всесто ms-cui-ctl-large
достать элемент можно так window.top.document.getElementById("id").className = "ms-cui-ctl-large ms-cui-disabled"; Последний раз редактировалось spectr; 31.01.2012 в 16:10. |
|
05.02.2012, 01:44 | #9 |
Участник
|
Вы практически все сделали верно :-).
Остались только небольшие доработки: 1) Внести правки в customizations.xml вашей формы: прописать правило CustomRule с вызовом Вашей кастомной функции (по настройке правила риббона ищите в блогах сайта). 2) Написать код кастомной функции, которая будет возвращать булево значение Вашей глобальной переменной 3) Не забыть после присваивания значения булевой переменной вызывать refreshRibbon.
__________________
Материалы для внедренцев Microsoft Dynamics CRM теперь на сайте Infoleat.com и в моем блоге CRM для бизнеса |
|
|
|