AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.04.2017, 16:22   #1  
Ion is offline
Ion
Участник
 
332 / 16 (1) ++
Регистрация: 19.12.2012
Inclusion in database transactions
Всем привет!

Есть проблемы в плане области видимости рекордов. Речь идет о создании записи и плагине Post-operation (execution mode == sync). Насколько я понимаю, то данные в CRM и логика работы плагинов должна быть построенна исходя из уровня изолированости read committed.
То есть если у меня плагин и он последний в плане Execution Order, и в нем происходит ексепшен, то транзакция не была/не должна быть закомиченна полностью и происходит rollback. И по сути этот рекорд не должен быть visible из вне - так по крайней мере говорит мне логика что dirty reads не должно быть.
Но по-факту, у нас другая ситуация - и рекорд можно считать использую xrm (без NoLock = true).

Мне от интересно сама природа плагина играет в этом процессе роль: вызов SOAP сервиса и эксепшен в нем могут спровоцировать такую странную реакцию платформы при условии что все происходит синхронно?

Просто я не понимаю где гарантии?
Цитата:
If a plug-in is executing in the database transaction and allows an exception to be passed back to the platform, the entire transaction will be rolled back. Stages 20 and 40 are guaranteed to be part of the database transaction
То есть да, идет откат и рекорд удаляетсья из базы, но он же был визибл во время создания через публичный XRM API и пока последний плагин не завершил свой екзекюшен - разве может транзакция считаться закомиченной.



MS утверджает, что

Цитата:
Any registered plug-in that executes during the database transaction and that passes an exception back to the platform cancels the core operation. This results in a rollback of the core operation. In addition, any pre-event or post event registered plug-ins that have not yet executed and any workflow that is triggered by the same event that the plug-in was registered for will not execute.
Или я чего-то понимаю или это баг.

Последний раз редактировалось Ion; 13.04.2017 в 16:25.
Старый 13.04.2017, 20:27   #2  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Увы, я не смог проследить вашу мысль. Вся воронка обработки, действительно, выполняется в транзакции. Увы, не могу с уверенностью утверждать, создаются ли дочерние транзакции под каждый плагин, или дочернее событие, но с уверенностью могу сказать, что каждый последующий плагин видит изменения, которые были внесены предыдущими. И это, имхо, правильно. Если вам нужно видеть исходные, не измененные данные, вы можете использовать механизм Image
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 14.04.2017, 07:38   #3  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
377 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Если речь идет именно о плагинах на Post, то вполне логично, что исключения в них не ведут к откату транзакции, а также логично, что в вашем плагине видны все изменения предыдущих плагинов. Ведь Post-плагины выполняются, когда данные уже сохранены в базу, транзакция закончилась и отменить эти изменения в плагине нельзя - поздняк метаться
Старый 14.04.2017, 10:21   #4  
Ion is offline
Ion
Участник
 
332 / 16 (1) ++
Регистрация: 19.12.2012
Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Увы, я не смог проследить вашу мысль. Вся воронка обработки, действительно, выполняется в транзакции. Увы, не могу с уверенностью утверждать, создаются ли дочерние транзакции под каждый плагин, или дочернее событие, но с уверенностью могу сказать, что каждый последующий плагин видит изменения, которые были внесены предыдущими. И это, имхо, правильно. Если вам нужно видеть исходные, не измененные данные, вы можете использовать механизм Image
Механизм у нас следующий: есть СРМ система и есть стороння система которая по скедулу забирает данные скажем по сущности "Заказы", исполязуя XRM API. На сущность заказы подвешен плагин и он исполняеться всегда последним. Допустим, в нем происходит эксепшен и все данные откатываються, удаляються из базы СРМ.
Но в это же самое время другая система делает кол через XRM API, и говорит: - А дай-ка мне последние созданные заказы. И мне неясно почему этот заказ стал видим если в последнем плагине произошел эксепшен и он откатился?
У нас же read commited, почему присутствует грязное чтение?
Мы можем его стабильно воспроизвести. Написали две тулы: первая - пишет данные в СРМ с прекондишеном, что в плагине будет эксепшен; вторая - как консолька мониторит новосозданные рекорды и забирает их к себе в систему.
От и весь сценарий, в систему попадают ИД заказов которых нет.
В той системе формируеться урл на рекорд из СРМ. Узер открывает запись, а ее в системе нет.

Последний раз редактировалось Ion; 14.04.2017 в 10:24.
Старый 17.04.2017, 22:18   #5  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Ни разу не встречал подобное. Технически, грязное чтение можно разрешить, но по дефолту оно выключено: https://community.dynamics.com/crm/b...nd-dirty-reads
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 17.04.2017, 22:32   #6  
Ion is offline
Ion
Участник
 
332 / 16 (1) ++
Регистрация: 19.12.2012
Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Ни разу не встречал подобное. Технически, грязное чтение можно разрешить, но по дефолту оно выключено: https://community.dynamics.com/crm/b...nd-dirty-reads
В этом и есть проблема, что NoLock = false, как я писал в первом сообщении.
Приходиться только развести руками, потому что идей как это решить нет.
Старый 17.04.2017, 22:54   #7  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Проблема решается примитивно просто (как по мне). Делаете дополнительную таблицу, в поспроцессинге пишете туда идентификатор новой записи. В своём сервисе перед тем, как спрошать эндпоинт - получаете идентификатор из таблицы. Никаких проблем вроде.

Понимаю, что доп прослойка, но зато вы получаете только актуальные данные. Я так в своё время писал интеграцию с 1С.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 14.04.2017, 08:03   #8  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Коллега, вы в корне не правы. Начиная с 2011 все синхронные плагины, и пре и пост, выполняются внутри одной транзакции. Ошибка на пост событии так же ведет к откату транзакции, несмотря на то, что данные уже были записаны в базу. На самом деле, они, к этому моменту были записаны только в лог транзакции, но не суть.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 14.04.2017, 08:43   #9  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
377 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Да, чет фигню сморозил

А вот ваше замечание о том, что данные записываются в лог транзакции - это не ответ на вопрос почему они доступны для считывания?
Старый 17.04.2017, 22:11   #10  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Они доступны только внутри той же транзакции, все логично. Если вы остановите плагин отладчиком и посмотрите на данные через интерфейс, вы увидите не измененные данные.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Navigate Into Success: Database deployment of add-ins in NAV 2016 is broken, big time Blog bot Dynamics CRM: Blogs 0 25.01.2016 16:24
NAV Team: Upgrading from Microsoft Dynamics NAV 2009 R2 or Microsoft Dynamics NAV 2009 SP1 to Microsoft Dynamics NAV 2015 Blog bot Dynamics CRM: Blogs 0 23.02.2015 13:00
NAV Team: Manually restoring the NAV 2013 Demo Database Blog bot Dynamics CRM: Blogs 0 04.10.2012 06:24
Microsoft Dynamics NAV Database Archive for all Country Versions Blog bot Dynamics CRM: Blogs 0 11.03.2011 18:43
Microsoft Dynamics CRM Team Blog: Auditing Report Execution using the ReportServer Database Blog bot Dynamics CRM: Blogs 0 19.11.2008 20:05
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:52.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.