|
![]() |
#1 |
Участник
|
Цитата:
"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 Может некорректно зарегистрировал шаг? |
|
![]() |
#2 |
Участник
|
![]()
Заметил ещё такой момент, при регистрации шага с child pipeline сам счетчик увеличил свое значение, но по всем видимости не смог обновить заказ, так как он был заблокирован системой
|
|
![]() |
#3 |
Чайный пьяница
|
Покажите, пожалуйста, полный код плагина.
Что используете для работы с вебсервисом - ICrmService или CrmService? Если ICrmService, то необходимо ваш код переписать, чтобы он работал через CrmService.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
![]() |
#4 |
Участник
|
вот код:
Код: 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) { ........ } } |
|
![]() |
#5 |
Чайный пьяница
|
Код: 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 |
|
![]() |
#6 |
Участник
|
Заменил код, ошибка исчезла, но при создании из возможной сделки при шаге зарегистрированном на child pipeline плагин счетчика все равно не срабатывает (увеличение не происходит и номер не присваивается)
![]() |
|
![]() |
#7 |
Чайный пьяница
|
Код, покажите, пожалуйста. Только в этот раз полный (без троеточий, упущенных методов и т.п.).
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
![]() |
||||
Тема | Ответов | |||
Плагин на изменение подразделения пользователя | 6 | |||
не срабатывает плагин | 5 | |||
Плагин на создании Заказа | 4 | |||
Тип сущности, использующей плагин | 2 | |||
Как зарегить плагин на смену State? | 8 |
|