|
08.02.2011, 19:07 | #1 |
Участник
|
Не срабатывает плагин
Добрый день!
Возникла такая ситуация: На событие create для salesorder зарегистрирован плагин счетчика (стандартный не подходит). Плагин корректно отрабатывает если заказ создается по умолчанию или из карточки клиента. Проблема возникает, когда создание заказа происходит из возможной сделки (ВС), плагин попросту не срабатывает и счетчик не увеличивает свое значение. Соответственно для заказа не устанавливается номер заказа При отладке через CRM Event Listener обнаружил что различия при создании обычным способом и из ВС есть, но они в значениях, которые нет возможности указать при регистрации плагина. Скорее всего они и влияют на то что в одной ситуации плагин срабатывает в а в другой нет. Обходной вариант сделал - подменил событие нажатия на кнопку создания заказа в ВС, заказ создался, плагин отработал, но продукты соответственно не добавились в заказ из ВС, так как был использован другой action(( (не подходит) Может кто-то уже решал подобную проблему? |
|
08.02.2011, 19:09 | #2 |
Чайный пьяница
|
Добрый день.
При создании salesorder из карточки opportunity, чтобы плагин запустился его необходимо зарегистрировать в child pipeline и всё получится.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
09.02.2011, 14:36 | #3 |
Участник
|
Цитата:
"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) { // обработка } ........... } Параметры с которыми регистрирую: Message: Create PrimaryEntity: salesorder SecondaryEntity: none Запуск под пользователем, вызвавшим обработку плагина. ExecutionOrder: 1 Pre Stage (Пробовал и на Post, та же ошибка) Synhronous Server Child Pipeline Может некорректно зарегистрировал шаг? |
|
09.02.2011, 14:47 | #4 |
Участник
|
Заметил ещё такой момент, при регистрации шага с child pipeline сам счетчик увеличил свое значение, но по всем видимости не смог обновить заказ, так как он был заблокирован системой
|
|
09.02.2011, 14:55 | #5 |
Чайный пьяница
|
Покажите, пожалуйста, полный код плагина.
Что используете для работы с вебсервисом - ICrmService или CrmService? Если ICrmService, то необходимо ваш код переписать, чтобы он работал через CrmService.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
09.02.2011, 15:29 | #6 |
Участник
|
вот код:
Код: 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) { ........ } } |
|
14.02.2011, 11:35 | #7 |
Участник
|
Спасибо a33ik,
проблема заключалась в том что обновлялось счетчиком поле "name". При создании из возможной сделки, это поле блокируется системой, соответственно при попытке обновления код автоматически переходит в конец ветки lock. Добавил свое поле, проблемы как и не было |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Плагин на изменение подразделения пользователя | 6 | |||
не срабатывает плагин | 5 | |||
Плагин на создании Заказа | 4 | |||
Тип сущности, использующей плагин | 2 | |||
Как зарегить плагин на смену State? | 8 |
|