Предупреждения и нотификация в формах элементов
Запись от 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. В итоге, из четырех аргументов метода более-менее удалось понять три:
Как можно заметить, я создал функцию, которая выполняет вывод нотификации, получая на вход три параметра, а внутреннее устройство функции я решил укрепить конструкцией try-catch исходя из ансаппортности.
4. Ну и напоследок я задумался о том, что если вовремя не сбросить предупреждения, то они могут долго висеть и при неблагоприятном исходе - плодиться и размножаться. Поэтому всего функций нужно две (собственно, как в исходной статье).
Итог: имея в базисе приведенные две функции, можем одной строкой добавлять предупреждения на форме
Каждый из разработчиков, работающих с 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
- третий аргумент остался для меня неисследованным
- четвертый аргумент - собственно текст предупреждения
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); */ } }
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, 'Внимание! Сумма внесенных оплат превышает предполагаемую сумму сделки');
Всего комментариев 1
Комментарии
-
Запись от Артем Enot Грунин размещена 12.11.2012 в 01:56