13.03.2009, 12:56 | #1 |
Участник
|
Ошибка в плагине при создании связей N:N
Добрый день.
Возникла задача при создании Предложения из Возможной сделки связать все контакты из Возможной сделки с Предложением. Делаю следующее: - Создаю плагин и вешаю его на post create предложения. Выполняется в child pipeline. - В плагине создаю свой CrmServer. - Извлекаю все контакты связанные с возможной сделкой. - Пытаюсь связать их с помощью AssociateEntitiesRequest с предложением. При этом появляется ошибка: Server was unable to process request. В логах нашел следующее сообщение: Exception when executing query: select quote0.QuoteId as 'quoteid', quote .OwningBusinessUnit as 'owningbusinessunit', quote0.OwningUser as 'owninguser' from Quote as quote0 where (quote0.QuoteId = '6f0b783a-240f-de11-a822-00155d001f15' and quote0.DeletionStateCode = 0) Exception: System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. Т.е. выходит что записи создаваемого предложения заблокированы, и он не может его связать с какими-либо сущностями. Может кто-нибудь сталкивался с чем-то подобным? Задача то вроде бы типовая... Вариант вызывать плагин асинхронно не подходит, т.к. связываемые с предложением контакты должны тут же отображаться на открытой карточке. Можно конечно это проделать в отдельном веб-сервисе, но хотелось бы конечно сделать по-нормальному в плагине. PS: - Код создающий CrmService: Код: private CrmService CreateCrmService(IPluginExecutionContext context, Boolean flag) { CrmAuthenticationToken authToken = new CrmAuthenticationToken(); authToken.AuthenticationType = 0; authToken.OrganizationName = context.OrganizationName; // Include support for impersonation. if (flag) authToken.CallerId = context.UserId; else authToken.CallerId = context.InitiatingUserId; CrmService service = new CrmService(); service.CrmAuthenticationTokenValue = authToken; service.UseDefaultCredentials = true; // Include support for infinite loop detection. CorrelationToken corToken = new CorrelationToken(); corToken.CorrelationId = context.CorrelationId; corToken.CorrelationUpdatedTime = context.CorrelationUpdatedTime; corToken.Depth = context.Depth; RegistryKey regkey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\MSCRM"); service.Url = String.Concat(regkey.GetValue("ServerUrl").ToString(), "/2007/crmservice.asmx"); service.CorrelationTokenValue = corToken; return service; } Код: Moniker moniker1 = new Moniker(); moniker1.Name = entityName1; moniker1.Id = entityID1; Moniker moniker2 = new Moniker(); moniker2.Name = entityName2; moniker2.Id = entityID2; AssociateEntitiesRequest request = new AssociateEntitiesRequest(); request.Moniker1 = moniker1; request.Moniker2 = moniker2; request.RelationshipName = relationshipName; crmService.Execute(request); // здесь после 30 сек. ожидания происходит ошибка |
|