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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.07.2012, 21:01   #1  
Taker1796 is offline
Taker1796
Участник
Аватар для Taker1796
 
112 / 11 (1) +
Регистрация: 22.04.2012
Плагин не срабатывает на Delete crm 2011
Привет! Есть плагин, работает на update и на create, а вот на Delete не срабатывает. Зарегистрирован на Pre. Суть его работы в подсчете числа юзеров.


public void RetrieveCountContacts(IServiceProvider serviceProvider)
{
int Count = 0;
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
{
entity = (Entity)context.InputParameters["Target"];
}
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

......//условия поиска по связи 1:N
foreach (var a in result.Entities)
{
Count++;
}

if(context.MessageName=="Delete")
{
Count--;
}
Старый 23.07.2012, 22:39   #2  
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
Код:
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
Вот ваша ошибка. В таргет не приходит Entity. Советую перед тем, как задавать вопрос хоть иногда попробовать включить студию и попробовать отладить плагин? Такое пробовали?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
За это сообщение автора поблагодарили: Taker1796 (1).
Старый 23.07.2012, 23:22   #3  
Taker1796 is offline
Taker1796
Участник
Аватар для Taker1796
 
112 / 11 (1) +
Регистрация: 22.04.2012
Цитата:
Сообщение от a33ik Посмотреть сообщение
Код:
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
Вот ваша ошибка. В таргет не приходит Entity. Советую перед тем, как задавать вопрос хоть иногда попробовать включить студию и попробовать отладить плагин? Такое пробовали?
Честно говоря не совсем понял про ошибку.

Код:
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) //тут я получаю данные
{
Entity entity = (Entity)context.InputParameters["Target"];  //тут из этих данных формирую сущность
}
Что не так то?

Последний раз редактировалось Taker1796; 23.07.2012 в 23:35.
Старый 24.07.2012, 10:36   #4  
Taker1796 is offline
Taker1796
Участник
Аватар для Taker1796
 
112 / 11 (1) +
Регистрация: 22.04.2012
Пробовал вот так, тоже не работает

if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is EntityReference)
{
if (context.MessageName == "Delete")
{
Count = Count - 1;
}
}
Старый 24.07.2012, 12:20   #5  
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
Цитата:
Сообщение от Taker1796 Посмотреть сообщение
Пробовал вот так, тоже не работает

if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is EntityReference)
{
if (context.MessageName == "Delete")
{
Count = Count - 1;
}
}
Там действительно EntityReference. Если не работает - ошибка у вас в коде. Полный код приведите, пожалуйста.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 24.07.2012, 12:26   #6  
Taker1796 is offline
Taker1796
Участник
Аватар для Taker1796
 
112 / 11 (1) +
Регистрация: 22.04.2012
Цитата:
Сообщение от a33ik Посмотреть сообщение
Там действительно EntityReference. Если не работает - ошибка у вас в коде. Полный код приведите, пожалуйста.
Вот код, который работает на update/create. Я понял, что событие Delete работает только с EntityReference. Но дело в том, что у меня в коде запрос, который я, к сожалению, не знаю как переписать при событии Delete c EntityReference. Смысл работы кода в том, что плагин подсчитывает количество пользователей и проставляет значение в account. Пользователи и account связаны 1:N
Код:
 public void Execute(IServiceProvider serviceProvider)
        {
            int Count = 0;
            Entity entity = null;
            // Получаем контекст плагина
            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
            {
                // Получаем объект
                entity = (Entity)context.InputParameters["Target"];
            }
            else
            {
                return;
            }
            if (entity.Attributes.Contains("parentcustomerid"))
            {
                // Получаем сервис через контекст плагина
                IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
                IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
                ConditionExpression condition = new ConditionExpression();
                condition.AttributeName = "parentcustomerid";
                condition.Operator = ConditionOperator.Equal;
                condition.Values.Add(entity.GetAttributeValue<EntityReference>("parentcustomerid").Id.ToString());

                FilterExpression filter = new FilterExpression();
                filter.Conditions.Add(condition);

                QueryExpression query = new QueryExpression("contact");
                query.ColumnSet.AddColumns(new string[] { "fullname" });
                query.Criteria.AddFilter(filter);

                EntityCollection result = service.RetrieveMultiple(query);
                foreach (var a in result.Entities)
                {
                    Count++;
                }
                Entity account = new Entity("account");
                ColumnSet attributes = new ColumnSet(new string[] { "new_contactquantity" });

                account = service.Retrieve(account.LogicalName, entity.GetAttributeValue<EntityReference>("parentcustomerid").Id, attributes);
                //Обновляем значение поля "Количество клиентов"
                account["new_contactquantity"] = Count;

                // Обновляем запись
                service.Update(account);
            }

Последний раз редактировалось Taker1796; 24.07.2012 в 12:28.
Старый 24.07.2012, 12:28   #7  
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
Получите поля удаяемой записи из Image.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
За это сообщение автора поблагодарили: Taker1796 (1).
Старый 24.07.2012, 13:39   #8  
Taker1796 is offline
Taker1796
Участник
Аватар для Taker1796
 
112 / 11 (1) +
Регистрация: 22.04.2012
Цитата:
Сообщение от a33ik Посмотреть сообщение
Получите поля удаяемой записи из Image.
Код:
 if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
            {
                // Получаем объект
                entity = (Entity)context.InputParameters["Target"];
            }
            else
            {
               entity = (Entity)context.PreEntityImages["PreImage"];
            }
Почему то не получается. Вылетает вот тут entity = (Entity)context.PreEntityImages["PreImage"]; с ошибкой: The given key was not present in the dictionary.
Старый 24.07.2012, 13:52   #9  
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
Цитата:
Сообщение от Taker1796 Посмотреть сообщение
Код:
 if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
            {
                // Получаем объект
                entity = (Entity)context.InputParameters["Target"];
            }
            else
            {
               entity = (Entity)context.PreEntityImages["PreImage"];
            }
Почему то не получается. Вылетает вот тут entity = (Entity)context.PreEntityImages["PreImage"]; с ошибкой: The given key was not present in the dictionary.
А в плагин регистраторе вы этот Image регистрировали?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 24.07.2012, 13:56   #10  
Taker1796 is offline
Taker1796
Участник
Аватар для Taker1796
 
112 / 11 (1) +
Регистрация: 22.04.2012
Цитата:
Сообщение от a33ik Посмотреть сообщение
А в плагин регистраторе вы этот Image регистрировали?
Да, на step'e delete зарегистрировал снимок данных с именем PreImage, получаю всe поля с сущности.
Старый 24.07.2012, 14:04   #11  
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
Цитата:
Сообщение от Taker1796 Посмотреть сообщение
Да, на step'e delete зарегистрировал снимок данных с именем PreImage, получаю всe поля с сущности.
Скриншот покажите, пожалуйста.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 8 Blog bot Dynamics CRM: Blogs 1 30.04.2016 10:26
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
Microsoft Dynamics CRM Team Blog: Microsoft Dynamics CRM 2011 ~ Online Test Drive Guide Blog bot Dynamics CRM: Blogs 0 05.08.2011 20:13
Все о Microsoft Dynamics CRM: Как установить Microsoft Dynamics CRM 2011 Beta Blog bot Dynamics CRM: Blogs 0 31.10.2010 15:08

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

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

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