|  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 сек. ожидания происходит ошибка | 
|  | 
|  13.03.2009, 13:43 | #2 | 
| Участник | Цитата: 
		
			Пытаюсь связать их с помощью AssociateEntitiesRequest с предложением.
		
	 У вас есть id нового предложения и id возможной сделки, из которой предложение создается. По id возможной сделки получаете все id контактов, связанных с ней. А потом в цикле этим контактам проставляется в quioteid id-ик нового предложения и делаете Update. В итоге плагин свяжет эти контакты с новым предложением. | 
|  | 
|  13.03.2009, 15:56 | #3 | 
| Участник | 
			
			Так сделать не получится, т.к. один контакт м.б. связан с несколькими предложениями. Там используется именно связь N:N.
		 | 
|  | 
|  14.03.2009, 10:21 | #4 | 
| Moderator | 
			
			Можно попробовать увеличить время ожидания на SQL Server, конечно... Не совсем понятно о чем идет речь. У вас настроена связь между Контактами и Возможной сделкой, и Контактами и Предложением?
		 
				__________________ http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.   MS Certified Dirty Magic Professional | 
|  | 
|  18.03.2009, 20:19 | #5 | 
| Участник | 
			
			Увеличение время ожидания не поможет. Если уж sql заблокировал записи, то заблокировал. В итоге сделал так: повесил на OnLoad скрипт, который дергает метод мной написанного веб-сервиса, в котором и выполняю нужные мне действия, а после делаю reload формы. | 
|  |