11.08.2014, 15:53 | #1 |
Участник
|
Отмена изменений Note-s в Account в Crm 2013
С Б.П
Всем привет, Задача такая: контролировать возможность users изменять Note-s v Account. Если в кастомизациях отменить "Write" - то тогда пропадает возможность создавать Notes. 1. Какие есть варианты реализовать эту задачу, кроме плагина? 2. Если через плагин на PreUpdate => написал: Entity target = PluginOperations.GetContextTarget(m_pluginExecutionContext, out success); if (success) { string[] rolesFromSystemParams = RetrieveRolesFromSystemParameters(); if (rolesFromSystemParams != null && rolesFromSystemParams.Length > 0) { bool canUpdate = RetrieveLogedInUserRoles(rolesFromSystemParams); if (!canUpdate) { throw new InvalidPluginExecutionException("The user has no priveleges to update note records.") { Source = "Plugin : NoteBL. Method : PreUpdateAnnotation. The user has no priveleges to update note records" }; } } else { throw new InvalidPluginExecutionException("The user has no priveleges to update note records.") { Source = "Plugin : NoteBL. Method : PreUpdateAnnotation. The user has no priveleges to update note records" }; } } => В таком случае выскакивает 2! сообщения об ошибке : и после нажатия ОК: Можно ли убрать первое сообщение об ошибке и почему оно вообще появилось? Можно ли изменить Business Process Error на мое сообщение? Спасибо Последний раз редактировалось gibor2000; 11.08.2014 в 15:55. |
|
12.08.2014, 10:44 | #2 |
Moderator
|
Все верно. Единственный системный метод проконтролировать изменения известный мне - это плагин. Изменить внешний вид страницы сообщения, увы, нельзя. Однако, должно отображаться только одно сообщение. Возможно, проблема в том, что ваш плагин нарушает работу какой-то системной логики, потому ошибки вылетает 2. В этом случае, в системном логе тоже должно быть две записи об ошибке. Думаю это позволит пролить свет на то что происходит.
p.s. У меня не было опыта подобной работы с 2013, возможно что-то изменилось. Если лог не прольет свет на происходящее, попробуйте написать простой плагин для другой системной сущности, который бы просто выбрасывал исключение. Интересно сколько сообщений об ошибке будет в этом случае.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
|
За это сообщение автора поблагодарили: gibor2000 (1). |
12.08.2014, 12:46 | #3 |
Участник
|
С Б.П
Спасибо за ответ. Отменил все свои кастомные плагины кроме этого - тоже самое В системном логе - это где ты имеешь ввиду? в Trace ili v EventViewer v Windows Logs - Application? - посмотрел в EventViewer - вообще не увидел там ошибки. В Trace есть упоминание об ошибки , но не могу найти там где именно выскакивает первое сообщение (Trace прикрепил) plugin_error.txt По поводу предложения сделать простой плагин с Exceptions Сделал плагин на AccountUpdate - только выброс Exception - там только одно окно- Business Process Error protected void ExecutePostAccountUpdate(LocalPluginContext localContext) { throw new InvalidPluginExecutionException("ACCOUNT : TEST TEST TEST") { Source = "ACCOUNT : TEST" }; } тоже самое и на Pre-UpdateStage |
|
12.08.2014, 13:56 | #4 |
Moderator
|
Раз мы пошли эмпирическим путем, попробуйте перевесить плагин, который выбрасывает исключение на изменение Annotation.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
12.08.2014, 14:50 | #5 |
Участник
|
Цитата:
Я пробовал этот код и для Annotation (note) PreUpdate: protected void ExecutePreNoteUpdate(LocalPluginContext localContext) { throw new InvalidPluginExecutionException(" NOTE : TEST TEST TEST") { Source = NOTE : TEST" }; } Без вызова какого-то другого кода + отменил все другие кастомные плагины Как дополнительная проверка добавил плагин : Plugin Description="Plug-in to PreValidateNoteUpdate" FriendlyName="PreValidateNoteUpdate" Все равно две ошибки |
|
12.08.2014, 15:01 | #6 |
Чайный пьяница
|
А нельзя в пре плагине через имадж получать старое значение, перетирать им новое введённое, если у пользователя нет прав на внесение изменений, а над табом с записями повесить большой дисклеймер, который при необходимости объяснит это?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
12.08.2014, 15:04 | #7 |
Участник
|
Цитата:
Вопрос в этом случае - как сообщить юзеру. Дать ему алерт или что-то в этом роде Что такое : а над табом с записями повесить большой дисклеймер? Что ты имеешь ввиду? |
|
12.08.2014, 15:13 | #8 |
Чайный пьяница
|
Цитата:
А по поводу запрещать - не запрещать. С плагинами, думаю, намучаешься. Мой совет изучай контрол и как в него можно внедрить свой код.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
12.08.2014, 15:14 | #9 |
Участник
|
|
|
12.08.2014, 15:18 | #10 |
Чайный пьяница
|
А ты поведение чего пытаешься изменить? Вот и сам ответь себе на этот вопрос. Неужели не очевидно????
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
12.08.2014, 15:40 | #11 |
Участник
|
Цитата:
я пытаюсь не дать юзеру сделать изменения Note если у него нет на это прав. На сколько я понимаю из твоих сообщений, ты предлагаешь делать это не через плагин,а через скрипт или как? я не очень понял. |
|
12.08.2014, 15:54 | #12 |
Чайный пьяница
|
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
12.08.2014, 19:51 | #13 |
Участник
|
С Б.П.
Спасибо Андрею за совет... Вообщем сделал посредством Javascript Скриптом я делаю Disable i ReadOnly на поле NoteText Если кому интересно вот код скрипта: DisableNotesFromEdit : function () { if ($("#notesWallContainer").length > 0) { $("#notesWallContainer").click(function () { if ($('div[class*="focus"]').length > 0 && $('div[class*="focus"]')[0].id != null && $('div[class*="focus"]')[0].id != undefined && $("#" + $('div[class*="focus"]')[0].id + "_notesTextBox").length > 0 ) { var clickedTextArea = $("#" + $('div[class*="focus"]')[0].id + "_notesTextBox"); clickedTextArea.bind("keydown", null, function () { return false; }); clickedTextArea.prop('disabled', true); clickedTextArea.attr('readonly', 'readonly'); } }); } } Этот код прекрасно сработал в IE i Chrome, но в FF работать отказался, поэтому пришлось добавить: var isFirefox = typeof InstallTrigger !== 'undefined'; if (isFirefox) { if ($("#tab5").length > 0) { $("#tab5").click(function () { Account.DisableNotesFromEdit(); }); } } else { Account.DisableNotesFromEdit(); } Несмотря на то,что поле Disabled после того как User его покидает СРМ все равно пытается выполнить Save |
|
|
|