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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.02.2011, 14:36   #1  
Буденый is offline
Буденый
Участник
 
70 / 15 (1) ++
Регистрация: 07.06.2010
Адрес: Донецк
Цитата:
Сообщение от a33ik Посмотреть сообщение
Добрый день.

При создании salesorder из карточки opportunity, чтобы плагин запустился его необходимо зарегистрировать в child pipeline и всё получится.
При регистрации плагина на child pipeline при обычном создании заказа вылетает стандартная ошибка(произошла ошибка обратитесь к администратору). При создании из возможной сделки вылетает ошибка:
"Only SdkMessageProcessingStep in parent pipeline and in stages outside transaction can create CrmService to prevent deadlock. ".

Дело в том что в плагине при входе в блок увеличения счетчика используется блокировка.
Код:
public class AutoNumber : IPlugin
{
      private static object _sync = new object();

      public void Execute(IPluginExecutionContext context)
      {
     ...........
           try{
              lock (_sync)
              {
                    // обработка
              }
     ...........         
       }
При регистрации шагов на child и parent те же ошибки. Как только убираю child счетчик работает, заказы создаются везде, кроме как из ВС

Параметры с которыми регистрирую:
Message: Create
PrimaryEntity: salesorder
SecondaryEntity: none
Запуск под пользователем, вызвавшим обработку плагина.
ExecutionOrder: 1
Pre Stage (Пробовал и на Post, та же ошибка)
Synhronous
Server
Child Pipeline

Может некорректно зарегистрировал шаг?
Старый 09.02.2011, 14:47   #2  
Буденый is offline
Буденый
Участник
 
70 / 15 (1) ++
Регистрация: 07.06.2010
Адрес: Донецк
:(
Заметил ещё такой момент, при регистрации шага с child pipeline сам счетчик увеличил свое значение, но по всем видимости не смог обновить заказ, так как он был заблокирован системой
Старый 09.02.2011, 14:55   #3  
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
Покажите, пожалуйста, полный код плагина.
Что используете для работы с вебсервисом - ICrmService или CrmService?
Если ICrmService, то необходимо ваш код переписать, чтобы он работал через CrmService.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 09.02.2011, 15:29   #4  
Буденый is offline
Буденый
Участник
 
70 / 15 (1) ++
Регистрация: 07.06.2010
Адрес: Донецк
вот код:
Код:
        public void Execute(IPluginExecutionContext context)
        {
            DynamicEntity entity = null;

            if (context.InputParameters.Properties.Contains(ParameterName.Target) &&
               context.InputParameters.Properties[ParameterName.Target] is DynamicEntity)
            {
                entity = (DynamicEntity)context.InputParameters.Properties[ParameterName.Target];
            }
            else
            {
                return;
            }

            try
            {
                lock (_sync)
                {
                    // simple query to get incremental settings for this entity
                    using (ICrmService service = context.CreateCrmService(true))
                    {
                       
                        IncrementalNumbering setting = IncrementalNumbering.GetSettings(service, entity.Name);

                        // system generated, if its assigned ignore this record
                        if (setting != null && !entity.Properties.Contains(setting.PropertyName))
                        {
                            int next = setting.CurrentPosition + 1;
                        
                            StringProperty increment = new StringProperty(setting.PropertyName,setting.Prefix.ToString()+ next.ToString());
                            entity.Properties.Add(increment);

                            // keep track of the latest id inside the custom entity
                            setting.Increment(service, next);
                        }
                    }
                }
            }
            catch (System.Web.Services.Protocols.SoapException ex)
            {
........
            }
        }
если я правильно понял, то нужно создать свой метод в котором будет происходить подключение к СРМ?
Старый 09.02.2011, 15:35   #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
Код:
ICrmService service = context.CreateCrmService(true);
Необходимо поменять на

Код:
            CrmAuthenticationToken token = new CrmAuthenticationToken();
            token.AuthenticationType = AuthenticationType.AD;
            token.OrganizationName = context.OrganizationName;

            CrmService service = new CrmService();
            service.UseDefaultCredentials = true;
            service.Url = (string)(Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\MSCRM").GetValue("ServerUrl")) + "/2007/crmservice.asmx";
            service.CrmAuthenticationTokenValue = token;
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 10.02.2011, 10:00   #6  
Буденый is offline
Буденый
Участник
 
70 / 15 (1) ++
Регистрация: 07.06.2010
Адрес: Донецк
Заменил код, ошибка исчезла, но при создании из возможной сделки при шаге зарегистрированном на child pipeline плагин счетчика все равно не срабатывает (увеличение не происходит и номер не присваивается)
Старый 10.02.2011, 12:57   #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
Цитата:
Сообщение от Буденый Посмотреть сообщение
Заменил код, ошибка исчезла, но при создании из возможной сделки при шаге зарегистрированном на child pipeline плагин счетчика все равно не срабатывает (увеличение не происходит и номер не присваивается)
Код, покажите, пожалуйста. Только в этот раз полный (без троеточий, упущенных методов и т.п.).
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

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

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Плагин на изменение подразделения пользователя xmarina Dynamics CRM: Разработка 6 23.11.2010 15:04
не срабатывает плагин Shamasher Dynamics CRM: Разработка 5 13.10.2010 10:55
Плагин на создании Заказа Krom Dynamics CRM: Разработка 4 04.08.2010 14:48
Тип сущности, использующей плагин Казарин Александр Dynamics CRM: Разработка 2 02.04.2009 20:29
Как зарегить плагин на смену State? Alir Dynamics CRM: Разработка 8 24.11.2008 12:06

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 04:28.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.