Инструменты пользователя

Инструменты сайта


eaze:samples:одновременное_редактирование_объектов

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Both sides previous revision Предыдущая версия
Следущая версия
Предыдущая версия
Следущая версия Both sides next revision
eaze:samples:одновременное_редактирование_объектов [2012/11/23 17:51]
sergeyfast
eaze:samples:одновременное_редактирование_объектов [2012/11/23 18:18]
sergeyfast [ru.xml]
Строка 1: Строка 1:
 ====== Отслеживание одновременного редактирования объектов в VT ====== ====== Отслеживание одновременного редактирования объектов в VT ======
-По умолчанию в VT при сохранении объектов действует правило ​"​кто последний нажал сохранить,​ того и форма :)". Попробуем исправить это, поставив следующую задачу:​+По умолчанию в VT при сохранении объектов действует правило"​кто последний нажал сохранить,​ того и форма :)". Попробуем исправить это, поставив следующую задачу:​
  
 >В VT при редактировании объекта давать сохранять именно ту версию объекта,​ которая была открыта на тот момент. ​ >В VT при редактировании объекта давать сохранять именно ту версию объекта,​ которая была открыта на тот момент. ​
->​Если редактирование одновременно было открыто два раза, то при нажатии кнопки "​сохранить"​ во второй раз система не должна позволить сделать ​это, так как в первый раз уже было произведено сохранение. ​+>​Если ​страница ​редактирования одновременно была открыта два раза, то при нажатии кнопки "​сохранить"​ во второй раз система не должна позволить сохранить изменения, так как в первый раз уже было произведено сохранение. ​
  
 Эта схема называется [[https://​en.wikipedia.org/​wiki/​Optimistic_concurrency_control|"​Optimistic Concurrency Control"​]] Эта схема называется [[https://​en.wikipedia.org/​wiki/​Optimistic_concurrency_control|"​Optimistic Concurrency Control"​]]
Строка 9: Строка 9:
 ===== Реализация ===== ===== Реализация =====
 Решение данной задачи можно рассматривать в различных вариантах,​ но мы, как программисты,​ определим свои ограничения заранее. Решение данной задачи можно рассматривать в различных вариантах,​ но мы, как программисты,​ определим свои ограничения заранее.
-У объекта могут быть связанные объекты (листы),​ обычно они редактируются на одной странице,​ поэтому нам важен сам факт нажатия кнопки "​Сохранить и закрыть"​ или "​Применить"​. ​+У объекта могут быть связанные объекты (листы),​ обычно они редактируются на одной странице,​ поэтому нам важен сам факт нажатия кнопки "​Сохранить и закрыть"​ или "​Применить"​, а не то, что изменилось в объекте
 Если в объекте ничего не поменялось,​ мы не учитываем это. По своей сути задача сводится к записи времени последнего редактирования объекта. Если в объекте ничего не поменялось,​ мы не учитываем это. По своей сути задача сводится к записи времени последнего редактирования объекта.
  
Строка 38: Строка 38:
  
 ==== ObjectHistoryUtility.php ==== ==== ObjectHistoryUtility.php ====
-Утилита {{:​eaze:​samples:​objecthistoryutility.phps|}} будет работать только с теми объектами,​ у которых уже есть Factory.+Утилита {{:​eaze:​samples:​objecthistoryutility.phps|ObjectHistoryUtility.phps}} будет работать только с теми объектами,​ у которых уже есть Factory.
 Переменная ''​$InsertsOnly''​ отвечает за режим работы. Если значение ''​true'',​ то в ''​objectHistory''​ будет хронология всех изменений,​ иначе - только последнее изменение. Переменная ''​$InsertsOnly''​ отвечает за режим работы. Если значение ''​true'',​ то в ''​objectHistory''​ будет хронология всех изменений,​ иначе - только последнее изменение.
  
Строка 44: Строка 44:
  
 ==== Save<​Class>​Action.php ==== ==== Save<​Class>​Action.php ====
 +=== beforeAction() ===
 <code php> <code php>
         /**         /**
Строка 129: Строка 129:
  
 ==== ru.xml ====  ==== ru.xml ==== 
-Перед ​щакрытием тега ''​errors''​ добавьте:​+Перед ​закрытием тега ''​errors''​ добавьте:​
  
 <code xml> <code xml>
Строка 143: Строка 143:
 {{ :​eaze:​samples:​objecthistory-tv.png?​ |}} {{ :​eaze:​samples:​objecthistory-tv.png?​ |}}
  
 +==== Плюсы ====
 +  * Универсальное решение для любого объекта в VT.
 +  * Минимальные правки в код.
 +  * Простая интеграция в существующие проекты.
 +
 +==== Минусы ====
 +  * Если открыть страницу,​ ничего не менять,​ и нажать кнопку "​сохранить изменения",​ то дата последнего изменения обновится,​ хотя по логике вещей не должна - мы же ничего не меняли:​).
  
 +==== Дальнейшее развитие ====
 +  * Можно добавить кнопку на яваскрипте - "​Все равно сохранить мою версию"​ (кнопка меняет значение ohCreatedAt на now() и делает submit формы).
 +  * Можно добавить в таблицу ''​objectHistory''​ поле ''​changes'',​ в котором в сериализованном виде хранить изменившиеся значения полей у объекта (и его листов). После создания такой функциональности берегитесь своей бурной фантазии :).
  
eaze/samples/одновременное_редактирование_объектов.txt · Последние изменения: 2014/03/23 13:36 — sergeyfast