AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.04.2012, 11:19   #1  
probka is offline
probka
Участник
Аватар для probka
 
98 / 11 (1) +
Регистрация: 20.02.2012
Адрес: Ростов-на-Дону
CRM 4.0 Запрет удаления сущности
Добрый день!
Подскажите, пожалуйста, возможно ли программно запретить удалять определенную сущность при выполнении какого-либо условия? И если можно, то как?
__________________
Так победим!

Старый 18.04.2012, 11:30   #2  
g.Naukovych is offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Регистрация: 23.03.2011
Да можно. Для этого Вы должны создать плагин на 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" удаление происходить не будет.
__________________
Мой блог https://procrm.tv

Последний раз редактировалось g.Naukovych; 18.04.2012 в 11:43.
Старый 18.04.2012, 14:11   #3  
probka is offline
probka
Участник
Аватар для probka
 
98 / 11 (1) +
Регистрация: 20.02.2012
Адрес: Ростов-на-Дону
Цитата:
Сообщение от g.Naukovych Посмотреть сообщение
Да можно. Для этого Вы должны создать плагин на PreDelete для необходимой Вам сущности.
Спасибо. Я правильно поняла, что PreImage - это названием удаляемой сущности?
Подскажите, пожалуйста, а как правильно вставить SOAP-запрос в такой плагин? Просто я никогда до этого плагины не писала. Мне необходимо проверить на некоторое условие атрибут связанной сущности и в зависимости от этого запрещать удаление и изменение сущности.
__________________
Так победим!

Старый 18.04.2012, 14:37   #4  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от probka Посмотреть сообщение
Спасибо. Я правильно поняла, что PreImage - это названием удаляемой сущности?
Подскажите, пожалуйста, а как правильно вставить SOAP-запрос в такой плагин? Просто я никогда до этого плагины не писала. Мне необходимо проверить на некоторое условие атрибут связанной сущности и в зависимости от этого запрещать удаление и изменение сущности.
А зачем вам SOAP запрос в плагине? Есть же Retrieve/RetrieveMultiple/Fetch подходы к получению записей из CRM. Как пример посмотрите тут - http://a33ik.blogspot.com/2009/07/pl...notes-and.html
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
За это сообщение автора поблагодарили: probka (1).
Старый 18.04.2012, 14:43   #5  
g.Naukovych is offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Регистрация: 23.03.2011
Цитата:
Сообщение от probka Посмотреть сообщение
Спасибо. Я правильно поняла, что PreImage - это названием удаляемой сущности?
Подскажите, пожалуйста, а как правильно вставить SOAP-запрос в такой плагин? Просто я никогда до этого плагины не писала. Мне необходимо проверить на некоторое условие атрибут связанной сущности и в зависимости от этого запрещать удаление и изменение сущности.
PreImage - это название Image. Вы должны создать плагин, добавить его в CRM через PluginRegistrationTools. Когда Вы это сделаете, и он у Вас добавиться, Вы нажметена нем правой кнопкой мыши, выберите Add Step. И зададите дя какого события и какой сущности этот шаг плагина. У одного плагина может быть много шагов.
Далее нажмете правой кнопкой на Ваш шаг и добавите Image.
Image это снимок состояния сущности. PreImage до того как событие произошло
PostImage после.

SOAP запрос можно, но скорее не нужно. Можно FetchXML запрос. Вообще я обычно не пишу их в плагине, а пишу через QueryExpression. Это как мне кажется проще. здесь все пишется кодом, без всяких FetchXML. Но и его можно вызвать из плагина.

Для этого Вы должны воспользоваться FetchExpression.

Прочитайте как делать плагины. Это очень мощный функционал и в 2х словах его не расскажешь.
__________________
Мой блог https://procrm.tv

Последний раз редактировалось g.Naukovych; 18.04.2012 в 14:45.
За это сообщение автора поблагодарили: probka (1).
Старый 18.04.2012, 15:05   #6  
probka is offline
probka
Участник
Аватар для probka
 
98 / 11 (1) +
Регистрация: 20.02.2012
Адрес: Ростов-на-Дону
:(
Спасибо. А вы не подскажете, где можно прочитать, как делать плагины? Желательно на русском, с английским у меня туговато.
__________________
Так победим!

Старый 18.04.2012, 15:08   #7  
g.Naukovych is offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Регистрация: 23.03.2011
Цитата:
Сообщение от probka Посмотреть сообщение
Спасибо. А вы не подскажете, где можно прочитать, как делать плагины? Желательно на русском, с английским у меня туговато.
http://mmcrm.ru/?p=977
http://mmcrm.ru/?p=1031
__________________
Мой блог https://procrm.tv
Старый 30.07.2012, 14:00   #8  
probka is offline
probka
Участник
Аватар для probka
 
98 / 11 (1) +
Регистрация: 20.02.2012
Адрес: Ростов-на-Дону
Написала плагин, воспользовавшись докладом 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("Вы не можете удалить этот объект!");

        }
Но дело в том, что я использую этот плагин перед удалением сущности, созданной пользователем. И у меня context.InputParameters["Target"] = Moniker. Подскажите, как преобразовать плагин?
__________________
Так победим!

Старый 30.07.2012, 15:43   #9  
g.Naukovych is offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Регистрация: 23.03.2011
1. В плагин регистраторе добавте preimage
2. В плагине image будет в context.preImage (Название точно не помню, но по первым буквам найдете)
3. Все данные которы Вам нужны берите от туда.
__________________
Мой блог https://procrm.tv
За это сообщение автора поблагодарили: probka (1).
Старый 31.07.2012, 10:10   #10  
probka is offline
probka
Участник
Аватар для probka
 
98 / 11 (1) +
Регистрация: 20.02.2012
Адрес: Ростов-на-Дону
Спасибо, в этом месте заработало.
Теперь на строке, где выполняется запрос, меня выкидывает с сообщением: "Сбой запроса с состоянием HTTP 404: Not Found". Отчего это может быть?
__________________
Так победим!

Старый 03.08.2012, 10:32   #11  
probka is offline
probka
Участник
Аватар для probka
 
98 / 11 (1) +
Регистрация: 20.02.2012
Адрес: Ростов-на-Дону
Добрый день! С этим плагином разобралась. Все ошибки разрулила, все работает.

Вопрос еще такой: А можно ли сделать аналогичный плагин для запрета деактивации записи? В плагин регистраторе я не нахожу подобной возможности.
__________________
Так победим!

Старый 03.08.2012, 10:40   #12  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
SetState/SetStateDynamicEntity сообщения посмотрите.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
За это сообщение автора поблагодарили: probka (1).
Старый 03.08.2012, 12:44   #13  
probka is offline
probka
Участник
Аватар для probka
 
98 / 11 (1) +
Регистрация: 20.02.2012
Адрес: Ростов-на-Дону
Спасибо! Разобралась, все получилось.
__________________
Так победим!

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
CRM DE LA CREME! CRM 4.0 Disaster Recovery Blog bot Dynamics CRM: Blogs 2 26.02.2016 08:23
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 7 Blog bot Dynamics CRM: Blogs 0 27.03.2012 02:11
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 4 Blog bot Dynamics CRM: Blogs 0 24.09.2011 01:16
CRM DE LA CREME! Configuring Microsoft Dynamics CRM 4.0 for Internet-facing deployment Blog bot Dynamics CRM: Blogs 0 18.08.2009 11:05
Microsoft Dynamics CRM Team Blog: List Web Part for Microsoft Dynamics CRM 4.0 Deployment Scenarios Blog bot Dynamics CRM: Blogs 0 30.01.2009 22:05

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:32.