![]() |
#1 |
Участник
|
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. В итоге, из четырех аргументов метода более-менее удалось понять три:
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, напишите личное сообщение администратору. |
|
|
|