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