AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.12.2011, 13:03   #1  
ashuron is offline
ashuron
Участник
 
41 / 10 (1) +
Регистрация: 25.03.2010
Задизэйблить Ribbon
Можно ли сделать в CRM следующее.

Есть кнопка на риббоне, которая создает Order для новой сущности. Само создание Order может занимать какое-то время (несколько секнд, например). Необходимо на это время задизейблить кнопку на риббоне, чтобы пользователь не смог повторно ее нажать (на протяжении тех нескольких секунд, пока создается ордер), кто-нибудь знает, как это можно сделать?

Заранее спасибо.
Старый 23.12.2011, 11:00   #2  
Borisvil is offline
Borisvil
Участник
 
123 / 36 (2) +++
Регистрация: 03.06.2011
Адрес: Санкт-Петербург
Здравствуйте!

Сталкивался с такой бедой - при нажатии на кнопку создавалась кастомная сущность и потом она открывалась в новом окне, это занимало некое время и юзеры невничая давили на кнопку несколько раз.
Решил проблему следующим образом: из скрипта, который висит на кнопке, сразу вызывается новое окошко с новой требуемой сущностью и предварительно заполненными полями. Это происходит быстро и сразу при нажатии на кнопку открывается новое окошко 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  
ashuron is offline
ashuron
Участник
 
41 / 10 (1) +
Регистрация: 25.03.2010
Спасибо за ответ, однако это не совсем то, что мне надо.
Конечно, можно сообщить пользователю, что он услышан и не стоит больше нажимать кнопку, но ведь он все-таки ее нажнмет, и получит сообщение об ошибке.
Я бы, конечно, ожидал, что в 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  
Konstantin Katsovich is offline
Konstantin Katsovich
Участник
Аватар для Konstantin Katsovich
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
243 / 57 (2) ++++
Регистрация: 22.10.2008
Адрес: Israel
Я бы попробовал как-то так:
Цитата:
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  
Borisvil is offline
Borisvil
Участник
 
123 / 36 (2) +++
Регистрация: 03.06.2011
Адрес: Санкт-Петербург
Здравствуйте!

В настройках видимости или невидимости кнопки на ленте можно цепляться за состояние какого-то поля, но реакция произойдет только после сохранения или рефреша формы, я долго бился с этой проблемой, но спрятать кнопку СРАЗУ после нажатия не получилось. Хотя конечно не исключаю варианта что был просто недостаточно настойчив
И в итоге вариант, при котором юзер сразу при нажатии кнопки видит создаваемую форму вполне заказчика устроил. В конце концов если дальше идти путем запрета кнопок, то потом их придется прятать все и дойти до маразма.
Старый 26.12.2011, 12:26   #6  
slivka_83 is offline
slivka_83
Консультант-джедай
Аватар для slivka_83
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
1,683 / 374 (16) ++++++
Регистрация: 18.12.2008
Адрес: default city
Цитата:
Сообщение от Borisvil Посмотреть сообщение
Здравствуйте!
но реакция произойдет только после сохранения или рефреша формы.
http://msdn.microsoft.com/en-us/libr..._refreshRibbon
__________________
Крокодил, крокожу и буду крокодить.
Человек человеку - волк , а зомби зомби - зомби.
Экстремал и буду экстремать!
Блога
Старый 26.12.2011, 12:55   #7  
ashuron is offline
ashuron
Участник
 
41 / 10 (1) +
Регистрация: 25.03.2010
Цитата:
Сообщение от Konstantin Katsovich Посмотреть сообщение
Я бы попробовал как-то так:
Итак, решил проблему следующим образом:
1. Завел глобальную переменную в скрипте, обявив ее в самом начале и присвоив ей значение true;
2. Перед созданием Order-a присвоил этой глобальной переменной false;
3. После создания Order-a (или при невозможности создания из-за бизнес - правил) выставил значение в true;
4. Функция, запускающая создание Order-a, выполняется только при условии флажок = true.

В общем, считаю, что решение подходящее, по крайней мере, можно использовать. Хотя, если честно, осадок остался

Всем спасибо.
Старый 31.01.2012, 15:54   #8  
spectr is offline
spectr
Участник
Аватар для spectr
MCBMSS
Лучший по профессии 2014
 
287 / 70 (3) ++++
Регистрация: 19.10.2011
Адрес: Киев
Для визуального эфекта можно добавить в тег "а" класс 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  
Fighter is offline
Fighter
Участник
Аватар для Fighter
 
108 / 31 (2) +++
Регистрация: 26.07.2011
Адрес: Kyiv
Записей в блоге: 12
Вы практически все сделали верно :-).
Остались только небольшие доработки:
1) Внести правки в customizations.xml вашей формы: прописать правило CustomRule с вызовом Вашей кастомной функции (по настройке правила риббона ищите в блогах сайта).
2) Написать код кастомной функции, которая будет возвращать булево значение Вашей глобальной переменной
3) Не забыть после присваивания значения булевой переменной вызывать refreshRibbon.
__________________
Материалы для внедренцев Microsoft Dynamics CRM теперь на сайте Infoleat.com и в моем блоге CRM для бизнеса
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Gareth Tucker: How to view Ribbon Definitions in CRM 2011 Blog bot Dynamics CRM: Blogs 0 14.12.2011 11:11
Gareth Tucker: Adding a new Button Group to the CRM Ribbon Blog bot Dynamics CRM: Blogs 0 24.08.2011 16:11
Gareth Tucker: Editing Ribbon Buttons in CRM 2011 Blog bot Dynamics CRM: Blogs 0 24.08.2011 09:11
Dynamics CRM Tools: New tool: Ribbon Browser Blog bot Dynamics CRM: Blogs 0 15.06.2011 18:11
Microsoft Dynamics CRM Team Blog: Create Dynamic Ribbon Controls Blog bot Dynamics CRM: Blogs 0 30.03.2011 21:11

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:59.