|
![]() |
#1 |
Участник
|
Собственно я не очень понял Ваш вопрос.
Если я использую сервис из контекста ретривы срабатывают без проблем. Значит нужно его использовать. Теперь по поводу почему это происходит. И происходит именно так. И Происходит именно так в 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). |
![]() |
#2 |
Участник
|
Цитата:
Цитата:
Сообщение от g.Naukovych
![]() То есть любой плагин выполняется в транзакции.
Тепер что получается? Когда данные в транзакции и еще не сохранены в БД полностью Вы пытаетесь её считать. Вот у Вас и ошибка. Я это проверял при попытке считать из БД данные напрямую. Также проверял, что это работает если использовать веб-сервис из контекста плагина. Если использовать веб-сервис из контекста плагина у меня ошибка не вываливается. Остается ещё очень много вопросов, которые все вместе не дают полную картину. Рочему в Post Create (40) этого не происходит? Теперь перейдем в плагину написаному для четверки который падает по той же причине. 50 stage уже не находится в транзакции почему тогда он тоже падает? Он поддерживается? Или получается код который написан под 4 не обязательно будет бежать на том же stage в 2011. (галиматья какая-та) P. S. Предыдущий программист который писал этот плагин использовал References на веб сервис для удобства работы с сущностями. теперь если переделывать его плагин на сервис из контектста придется переписывать весь код. P. S. Теперь нельзя делать ретривы в Post Update при использовании сборок либо References на веб сервис.
__________________
Читайте SDK!!! |
|
![]() |
#3 |
Участник
|
Я видимо неправильно выразился.
Если вызывать веб-сервис из контекста, то работать должно. Это работает и у меня и у Вас. Цитата:
Теперь перейдем в плагину написаному для четверки который падает по той же причине.
50 stage уже не находится в транзакции почему тогда он тоже падает? Он поддерживается? Тут еще тонкий момент. Вы наверного обращаетесь к crmService. Это способ работы с CRM4 В CRM 2011 рекомендуется работать с OrganizationService Цитата:
P. S. Предыдущий программист который писал этот плагин использовал References на веб сервис для удобства работы с сущностями. теперь если переделывать его плагин на сервис из контектста придется переписывать весь код.
Цитата:
P. S. Теперь нельзя делать ретривы в Post Update при использовании сборок либо References на веб сервис.
|
|
![]() |
#4 |
Участник
|
Он не запрешен
Если Вы делаете перенос проекта с 4 на 2011 и у вас там есть плагины именно на него (50) и нужно их вешать. Конечно же нельзя плагин неписаный под 2011 повешать на этот евент. Plugin Registration вам этого не даст Цитата:
это существует для crm 2011, а не для crm 4. (Плагин написан под crm 4)
__________________
Читайте SDK!!! |
|
![]() |
#5 |
Участник
|
В любом случае плагин не работает на шаге 50, даже если он на него мигрировал.
Можно сделать еще ё вариант, не уверен попойдёт ли он Вам. Плагин повесить на шаг 10. КОгда еще нет транзакции. На основе PreImage и таргет сформировать PostImage. Потом вызвать Вашу операцию и заменить там значение, которое получилось у той записи, что вы изменили на значение из PostImage. Или еще 1 вариант переведите плагин в асинхронных режим. То есть когда Вы будете обращаться к списку записей у Вас уже будет не DeadLock, а просто Lock. Вы проиграете по времени в вычислениях, данные не будут приходить сразу же, но при этом они все равно изменятся и Вам не придётся переписывать плагин. |
|
![]() |
#6 |
Участник
|
Цитата:
![]() Можно даже его менять и он снова работает. ![]() P. S. А за варианты спасибо
__________________
Читайте SDK!!! |
|
![]() |
#7 |
Участник
|
а Как Вы транзакцию побороли?
А если в него зайти и шаг посмотреть там 50 написано? |
|
|
|