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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.05.2006, 09:44   #1  
NeNavision_imported is offline
NeNavision_imported
Участник
Аватар для NeNavision_imported
 
241 / 10 (1) +
Регистрация: 12.08.2005
Я думаю это принципиально разные транзакции. Чуть-чуть модифицируем ваш эксперимент. Сделаем так. В первом клиенте изменим поле code1 и не выходим их этого поля. Во втором клиенте изменяем поле Decimal1, переходим на другую запись тем самым, сохраняя изменения. Переключаемся на первого клиента и переходим из поля code1 только не на другую запись, а в другое поле данной записи например в тоже decimal1. Что получилось: изменения сделаны – сделаны. Программа запускает Validate поля code1, начинается транзакция, что-то она делает и благополучно заканчивается, внося изменения в другую табличку (Test Commit). О том, что данная запись была изменена в другом клиенте пока ничего не известно. Теперь из поля decimal1 переходим на другую запись и система ругается, что данная запись была изменена другим пользователем. Затем она изменяют эту запись на основе новых данных (полученных/измененных во втором клиенте). Таким образом создается впечатление, что произошел откат транзакции (поле code1 примет старое значение).
Вообщем, думаю - это такие тонкости, которые желательно знать.
__________________
Должен остаться только один.
Старый 04.05.2006, 10:34   #2  
Seer_imported is offline
Seer_imported
Участник
 
75 / 10 (1) +
Регистрация: 08.12.2005
Цитата:
Сообщение от NeNavision Посмотреть сообщение
Я думаю это принципиально разные транзакции. Чуть-чуть модифицируем ваш эксперимент. Сделаем так. В первом клиенте изменим поле code1 и не выходим их этого поля. Во втором клиенте изменяем поле Decimal1, переходим на другую запись тем самым, сохраняя изменения. Переключаемся на первого клиента и переходим из поля code1 только не на другую запись, а в другое поле данной записи например в тоже decimal1. Что получилось: изменения сделаны – сделаны. Программа запускает Validate поля code1, начинается транзакция, что-то она делает и благополучно заканчивается, внося изменения в другую табличку (Test Commit). О том, что данная запись была изменена в другом клиенте пока ничего не известно. Теперь из поля decimal1 переходим на другую запись и система ругается, что данная запись была изменена другим пользователем. Затем она изменяют эту запись на основе новых данных (полученных/измененных во втором клиенте). Таким образом создается впечатление, что произошел откат транзакции (поле code1 примет старое значение).
Вообщем, думаю - это такие тонкости, которые желательно знать.
Так вот и получается, что такая "тонкость" приводит к нарушению целостности данных - а это уже больше похоже на недоработку MBS. Гораздо логичнее было бы перед отработкой Validate проверять, во-первых, на основе последней ли версии записи осуществляется выполнение кода в Validate, а во-вторых, перед отработкой Validate лочить эту запись.
 

Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:17.