Показать сообщение отдельно
Старый 20.03.2012, 00:46   #2  
g.Naukovych is offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Регистрация: 23.03.2011
Собственно я не очень понял Ваш вопрос.

Если я использую сервис из контекста ретривы срабатывают без проблем.

Значит нужно его использовать.

Теперь по поводу почему это происходит. И происходит именно так.
И Происходит именно так в CRM 2011

В CRM 2011 теперь плагины выполняются в транзакции.
В CRM есть след. шаги плагинов
10 PreOperation
20 PreValidation
30
40 PostOperation
50 PostOperation (deprecated)

Шаги 20 30 40 находятся в транзакции
В CRM 4 мы могли вешать плагин на 10 PreOperation и на 50 PostOperation
В CRM 2011 на 10 PreOperation, 20 PreValidation и 40(СОРОК) PostOperation

То есть любой плагин выполняется в транзакции.
Тепер что получается? Когда данные в транзакции и еще не сохранены в БД полностью Вы пытаетесь её считать. Вот у Вас и ошибка. Я это проверял при попытке считать из БД данные напрямую. Также проверял, что это работает если использовать веб-сервис из контекста плагина.

Еще можно попробовать повесить это все на асинхронную операцию. таким образом, когда данные будут сохранены и их можно будет считать, асинхронный плагин отвиснет и считает. С получением данных из БД это работало.

Напишите если это помогло.


В подтверждении своих слов нашёл у Вас следующее

The timeout period elapsed prior to completion of the operation

То есть представте, что Вы пишете в таблицу ContactBase и ContactExtantionBase. В этот самый момент данные еще не сохранены. и Вы тут же пытаетесь считать данные. При чем из другой транзакции. Естественно другая транзакция ждёт, когда Вы данные отпустите, а Вы их не отпускаете и ждете, когда другая транзакция их получит. Это явный DeadLock.

В результате TimeOut. Вот теперь это точно.

Последний раз редактировалось g.Naukovych; 20.03.2012 в 00:53.
За это сообщение автора поблагодарили: Konstantin Katsovich (2).