Добрый день.
Возникла задача при создании Предложения из Возможной сделки связать все контакты из Возможной сделки с Предложением.
Делаю следующее:
- Создаю плагин и вешаю его на 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 сек. ожидания происходит ошибка