13.10.2011, 22:23 | #1 |
Участник
|
Плагин
Создаю плагин на событие удаление записи. Задание постое есть сущность А(действие) и Б(интерес) между ними отношение 1-N много А в одной Б. Проверить необходимо если в Б А. В "Б" сущности "А" отобажаются в виде грида. Плагин висит на событие Pre. Как павильно писать шапку так как советовали что context["target"] is Entity-указывать ненужно на Удалении, а лучше работать через PrimaryEntity? На Create вешал плагин все нормально отрабатывает а с Delete возникают проблемы и как рабатать с гридом как по нему пойтись проверить есть ли там сущности "А"? Я начинающий так что извините если где не так выразился.
|
|
13.10.2011, 23:09 | #2 |
Moderator
|
1. Какая версия системы? Судя по всему 2011?
2. Что именно нужно? Запретить удалить Б, если к ней привязаны А? Измените настройки отношения, на "Ссылочное, ограничить удаление", тогда платформа сама будет выполнять проверку. Плагин отрабатывает на все те же сообщения, которые вы вызываете из кода. Это обозначает, что если вы вызываете CreateRequest, то вы устанавливаете свойство Target = Entity, и во входных параметрах будет параметр "Target" и в нем будет содержаться объект типа Entity. Метод возвращает CreateResponse.id = Guid - значит в выходных параметрах будет параметр "id", значеним которого будет Guid созданной записи. С удалением - аналогично. На входе будет DeleteRequest.Target = EntityReference: Код: if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is EntityReference)
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional Последний раз редактировалось Артем Enot Грунин; 13.10.2011 в 23:27. |
|
14.10.2011, 10:15 | #3 |
Участник
|
Цитата:
Сообщение от Nvovka
Создаю плагин на событие удаление записи. Задание постое есть сущность А(действие) и Б(интерес) между ними отношение 1-N много А в одной Б. Проверить необходимо если в Б А. В "Б" сущности "А" отобажаются в виде грида. Плагин висит на событие Pre. Как павильно писать шапку так как советовали что context["target"] is Entity-указывать ненужно на Удалении, а лучше работать через PrimaryEntity? На Create вешал плагин все нормально отрабатывает а с Delete возникают проблемы и как рабатать с гридом как по нему пойтись проверить есть ли там сущности "А"? Я начинающий так что извините если где не так выразился.
Если при удалении одной подчиненной сущности надо пробежаться по всем оставшимся, то самый верный вариант зарегистрировать плагин на post операцию, но сделать pre снимок, в котором получить значение id родительской сущности. Ну а потом уже все просто - делаете выборку всех подчиненных сущностей, у которых id родительской соответствует полученному (выборка будет уже без удаленной сущности) и делаете с ними что хотите и родительскую сущность тоже легко сможете получить и обновить. ID из снимка получается так (CRM2011): X++: Entity preImage = (Entity)context.PreEntityImages["PreImage"]; EntityReference dogovorid = (EntityReference)preImage.Attributes["new_contarctid"]; Guid dogovorRecordId = dogovorid.Id; |
|
14.10.2011, 23:46 | #4 |
Участник
|
Просто меня сбили немного с толку. Сказали что на событии удалить стандартная провека не катит if (context.InputParameters.Contains("Target") &&
context.InputParameters["Target"] is EntityReference) т.е. эта.А надо типа ((context.InputParameters.Contains("Target")) Подсказывали что надо чеез context.PrimaryEntyty.Id что собственно и сработало. А просто пи удалении А надо было подсчитать есть ли в Б ещё подобные А и если нет то с Б выполнить действие. В пинципе еализовать удалось. Спасибо за подсказки. |
|