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

Оценить эту запись

Предупреждения и нотификация в формах элементов

Запись от Likefire размещена 08.11.2012 в 10:47

Каждый из тех, кто работает с MS CRM неоднократно встречал в формах различные предупреждения, сообщения об ошибках и прочих событиях в формах, возникающих в виде надписи на желтом поле с соответствующим значком.



Каждый из разработчиков, работающих с MS CRM сталкивался в своей деятельности с тем, что приходится выдавать пользователю некие предупреждения, чаще с помощью инструкции alert, но в основном такими средствами, которые пугают и раздражают пользователя: диалоги, подобные alert возникают по мнению пользователя весьма внезапно, блокируют работу с формой до закрытия.

Как всегда внезапно и я столкнулся с неприятием пользователями alert'ов и необходимостью их замены чем-то более гуманным. Конечно же, первая мысль была в пользу стандартных предупреждений, с упоминания которых я и начал этот пост. Преимущества и недостатки перечислять нет смысла, потому что каждый, кто видит больше преимуществ в таких предупреждениях, тот прибегнет к описанному далее опыту, а тот, кто видит больше недостатков - может не тратить времени и закрывать этот блог.

Итак, перво-наперво, я конечно же порылся в DOM странички со стандартно выведенным предупреждением ("Ошибка! Не выбран прайс-лист"). Элемент, в котором содержится предупреждение, имеет явный идентификатор crmNotifications, по которому я не преминул погуглить (любой, кстати, может сам попробовать) с целью добыть способ, которым воспользовался кто-либо для работы с названным элементом. Из массы ссылок наиболее мне приглянулась следующая (не удивляйтесь знакомой картинке): http://www.avanadeblog.com/xrm/2011/...s-in-2011.html

Не буду пересказывать смысл всего, что неплохо разъясняет статья по ссылке - кто умеет читать, тот и без меня справится. Скажу лишь, что вариантов было много, но описанный в статье оказался пригодным для того, чтобы сразу ставить опыты и выяснять некоторые детали, которыми и поделюсь:

1. Вендор (в смысле Microsoft) не упоминает в справочном руководстве CRM SDK о методе вывода предупреждений, описанном в приведенной статье. То есть - это ансаппорт. Это нужно иметь в виду для дальнейшего построения скрипта.
2. Выяснив, что это ансаппорт, но в то же время, что способ вполне рабочий, у меня родилось желание детально разобраться с аргументами метода AddNotification. В итоге, из четырех аргументов метода более-менее удалось понять три:
  • первый аргумент - текст, влияет на количество одновременно выводимых нотификаций. Если попробовать вызвать метод дважды подряд с одинаковым значением первого аргумента - предупреждение всё равно будет одно. Чтобы предупреждение повторилось дважды - нужно вызвать метод с различными значениями первого аргумента
  • второй аргумент - число, влияющее на тип иконки, отображаемой с предупреждением: 1 - critical; 2 - warning; 3 - info
  • третий аргумент остался для меня неисследованным
  • четвертый аргумент - собственно текст предупреждения
3. На основании перечисленного, был рожден собственный вариант функции, которая предназначается для добавления новых предупреждений.
X++:
setPageNotification: function (notifIndex, notifType, notifMessage) {
        if (document.getElementById('crmNotifications') != null)
            try {
                document.getElementById('crmNotifications').AddNotification(notifIndex, notifType, 'source', notifMessage);
            }
            catch (e) { /*alert('Break for ' + e.name); */ }
    }
Как можно заметить, я создал функцию, которая выполняет вывод нотификации, получая на вход три параметра, а внутреннее устройство функции я решил укрепить конструкцией try-catch исходя из ансаппортности.
4. Ну и напоследок я задумался о том, что если вовремя не сбросить предупреждения, то они могут долго висеть и при неблагоприятном исходе - плодиться и размножаться. Поэтому всего функций нужно две (собственно, как в исходной статье).
X++:
resetPageNotifications: function () {
        if (document.getElementById('crmNotifications') != null)
            try {
                document.getElementById('crmNotifications').SetNotifications(null, null);
            }
            catch (e) { /*alert('Break for ' + e.name); */ }
    }
Итог: имея в базисе приведенные две функции, можем одной строкой добавлять предупреждения на форме
X++:
Basic.setPageNotification('Info1', 3, 'Внимание! Сумма внесенных оплат превышает предполагаемую сумму сделки');
Размещено в Без категории
Просмотров 52237 Комментарии 1
Всего комментариев 1

Комментарии

  1. Старый комментарий
    Аватар для Артем Enot Грунин
    Коллега, вы не первый. В чем научная новизна?
    Запись от Артем Enot Грунин размещена 12.11.2012 в 01:56 Артем Enot Грунин is offline
 


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