| 
	 | 
| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да можно. Для этого Вы должны создать плагин на PreDelete для необходимой Вам сущности.  
		
		
		
		
		
		
			
		
		
		
		
		
			Плагине у Вас будет PreImage. Вы сможете его подключить и в случае если условие невозможности удаления сработало, то Вы "Выплевываете" Exception. X++: public void Execute(IPluginExecutionContext context) { string preImageName = "preimage"; DynamicEntity myEntity = (DynamicEntity)context.PreEntityImages[preImageName]; if(myEntity.Properties.Contains("name") && myEntity["name"]!= null && myEntity["name"].ToString() == "not delete") throw new InvalidPluginExecutionException ("You can not remove this object"); } Здесь если имя объекта "not delete" удаление происходить не будет. Последний раз редактировалось g.Naukovych; 18.04.2012 в 11:43.  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Подскажите, пожалуйста, а как правильно вставить SOAP-запрос в такой плагин? Просто я никогда до этого плагины не писала. Мне необходимо проверить на некоторое условие атрибут связанной сущности и в зависимости от этого запрещать удаление и изменение сущности.  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Чайный пьяница 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от probka
			 
 
			Спасибо. Я правильно поняла, что PreImage - это названием удаляемой сущности? 
		
	Подскажите, пожалуйста, а как правильно вставить SOAP-запрос в такой плагин? Просто я никогда до этого плагины не писала. Мне необходимо проверить на некоторое условие атрибут связанной сущности и в зависимости от этого запрещать удаление и изменение сущности. 
				__________________ 
		
		
		
		
	Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: probka (1). | |
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от probka
			 
 
			Спасибо. Я правильно поняла, что PreImage - это названием удаляемой сущности? 
		
	Подскажите, пожалуйста, а как правильно вставить SOAP-запрос в такой плагин? Просто я никогда до этого плагины не писала. Мне необходимо проверить на некоторое условие атрибут связанной сущности и в зависимости от этого запрещать удаление и изменение сущности. Далее нажмете правой кнопкой на Ваш шаг и добавите Image. Image это снимок состояния сущности. PreImage до того как событие произошло PostImage после. SOAP запрос можно, но скорее не нужно. Можно FetchXML запрос. Вообще я обычно не пишу их в плагине, а пишу через QueryExpression. Это как мне кажется проще. здесь все пишется кодом, без всяких FetchXML. Но и его можно вызвать из плагина. Для этого Вы должны воспользоваться FetchExpression. Прочитайте как делать плагины. Это очень мощный функционал и в 2х словах его не расскажешь. Последний раз редактировалось g.Naukovych; 18.04.2012 в 14:45.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: probka (1). | |
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Спасибо. А вы не подскажете, где можно прочитать, как делать плагины? Желательно на русском, с английским у меня туговато.
		 
		
		
		
		
		
		
			
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Написала плагин, воспользовавшись докладом 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("Вы не можете удалить этот объект!"); }  | 
| 
	
 | 
| 
	
	 | 
	
| Опции темы | Поиск в этой теме | 
| Опции просмотра | |
		
  |