21.05.2009, 20:20 | #1 |
Участник
|
Вопросы о псевдотранзакционности
Доброго времени суток всем!
Я сейчас пишу плагины под СРМ 4.0, во многих стоит как требование выполнение под одной транзакцией. Поскольку транзакционность в чистом виде, насколько я понял, невозможна при работе через веб-сервисы, то было принято решение хотя бы сделать ручной откат внесенных изменений в случае перехвата эксепшена. Собственно первый вопрос - нормальная ли это практика, или есть более надежные способы решения вопроса транзакционности? Но как бы там ни было, с ручным восстановлением внесенных изменений все было хорошо, пока не понадобилось откатывать удаление. Поскольку запись реально не удаляется, а меняется только флаг удаления, то новую запись с тем же ИД вставить нельзя. Я вижу тут только два варианта: либо ансаппорт и простая смена флага в таблице, либо саппорт - и создание новых записей со старыми данными одновременно с геморройной сменой ИД во всех сущностях, которые ссылаются на удаленные записи (с необходимостью дорабатывать плагин по мере появления новых ссылок). Оба способа мне видятся одинаково плохими. Какой из них выбрать, пока не решил. Очень зол на МС за отсутствие легальной функции восстановления после удаления. Есть ли у кого мысли на тему, какой все-таки лучше выбрать способ? П.С. В промежутке 22.05 - 24.05 буду без инета, так что ответить на возможные вопросы смогу не раньше понедельника, но все же надеюсь услышать некоторые соображения. Заранее спасибо. |
|
23.05.2009, 09:21 | #2 |
Moderator
|
Насколько я понял, выполнение плагинов внутри системных транзакции станет возможно в 5.0, что до 4.0, то тут с откатом изменений все, действительно, не сладко. Если выбирать из двух зол, то я бы безусловно снимал флаг на удаление. Думаю вы не встретитесь со случаем, когда сервис удаления успеет убить запись до того момента, как вы успеете снять флаг, но все же эта ситуация возможна.
Что до ансапорта, обращаю ваше внимание, что не все методы веб сервиса заявлены в SDK. На каждый метод есть еще 2 помеченных For Internal Use Only. Попробуйте провести с ними ряд экспериментов. Может все же удастся подсесть на системную транзакцию?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
|
За это сообщение автора поблагодарили: Yarilo (1). |
25.05.2009, 11:52 | #3 |
Участник
|
Цитата:
Я вот тоже склонялся к мысли, что лучше прямые запросы, чем плодить одинаковые записи. Оставлю этот метод как резервный, если эксперименты с вышеуказанными методами не дадут результата. |
|