|
![]() |
#1 |
Участник
|
Цитата:
Сообщение от probka
![]() Спасибо. Я правильно поняла, что PreImage - это названием удаляемой сущности?
Подскажите, пожалуйста, а как правильно вставить SOAP-запрос в такой плагин? Просто я никогда до этого плагины не писала. Мне необходимо проверить на некоторое условие атрибут связанной сущности и в зависимости от этого запрещать удаление и изменение сущности. Далее нажмете правой кнопкой на Ваш шаг и добавите Image. Image это снимок состояния сущности. PreImage до того как событие произошло PostImage после. SOAP запрос можно, но скорее не нужно. Можно FetchXML запрос. Вообще я обычно не пишу их в плагине, а пишу через QueryExpression. Это как мне кажется проще. здесь все пишется кодом, без всяких FetchXML. Но и его можно вызвать из плагина. Для этого Вы должны воспользоваться FetchExpression. Прочитайте как делать плагины. Это очень мощный функционал и в 2х словах его не расскажешь. Последний раз редактировалось g.Naukovych; 18.04.2012 в 14:45. |
|
|
За это сообщение автора поблагодарили: probka (1). |
![]() |
#2 |
Участник
|
![]()
Спасибо. А вы не подскажете, где можно прочитать, как делать плагины? Желательно на русском, с английским у меня туговато.
|
|
![]() |
#3 |
Участник
|
|
|
![]() |
#4 |
Участник
|
Написала плагин, воспользовавшись докладом http://crmmagic.blogspot.com/2010/02/techdays.html. Получилось следующее:
X++: public void Execute(IPluginExecutionContext context) { if (context.MessageName != MessageName.Delete || !(context.InputParameters.Contains("Target")) || !(context.InputParameters["Target"] is DynamicEntity)) return; DynamicEntity _grmember = (DynamicEntity) context.InputParameters["Target"]; if (!_grmember.Properties.Contains("new_contractid")) return; Customer customer = (Customer)_grmember["new_contractid"]; if (customer.type != EntityName.opportunity.ToString()) return; Guid opportunityid = customer.Value; string[] fields = new string[] { "new_status" }; ICrmService crmservice = context.CreateCrmService(true); RetrieveRequest request = new RetrieveRequest(); request.ColumnSet = new ColumnSet(fields); request.ReturnDynamicEntities = true; TargetRetrieveDynamic target = new TargetRetrieveDynamic(); target.EntityId = opportunityid; target.EntityName = EntityName.opportunity.ToString(); request.Target = target; DynamicEntity _opportunity = (DynamicEntity)((RetrieveResponse)crmservice.Execute(request)).BusinessEntity; if ((string)_opportunity["new_status"] == "2") throw new InvalidPluginExecutionException("Вы не можете удалить этот объект!"); } |
|
|
|