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