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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.11.2012, 11:11   #1  
Blog bot is offline
Blog bot
Участник
 
25,644 / 848 (80) +++++++
Регистрация: 28.10.2006
axforum blogs: Предупреждения и нотификация в формах элементов
Источник: http://axforum.info/forums/blog.php?b=355
==============

Каждый из тех, кто работает с 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, 'Внимание! Сумма внесенных оплат превышает предполагаемую сумму сделки');



Источник: http://axforum.info/forums/blog.php?b=355
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Microsoft Dynamics CRM Team Blog: CRM 2011 Chart Enhancements Blog bot Dynamics CRM: Blogs 0 25.01.2012 10:11
DynamicsAxSCM: Visualizing Security in Microsoft Dynamics AX 2012 Blog bot DAX Blogs 0 29.08.2011 13:11
crminthefield: How to Create a Silverlight Web Resource that Interacts with CRM 2011 Forms Blog bot Dynamics CRM: Blogs 0 24.06.2011 04:17
Microsoft Dynamics CRM Team Blog: Welcome to the World of Dialogs - Part 1 Blog bot Dynamics CRM: Blogs 0 02.02.2011 21:11
DynamicsAxSCM: Personalization of Role Centers in Dynamics AX 2009 Blog bot DAX Blogs 0 21.06.2010 16:05

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

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

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