Вот, не думал что понадобится когда-либо, а понадобилось...
Понадобилось иметь ПОЛНОЦЕННЫЙ откат.
И прежде чем изобретать велосипед, хотелось бы рассмотреть варианты.
Если кто-то что-то делал подобное - поделитесь опытом, пожалуйста.
Пока я вижу только три этапа задачи:
- откат поля (откат как в редакторе текста в пределах одной формы/записи таблицы/)
- откат таблицы (откат формы, записи одной таблицы в пределах документа/транзакции/)
- откат транзакции (откат документа)
Желательно иметь неограниченное число шагов назад-вперед или в пределах разумного (несколько сотен шагов).
Сергей - chusha@mail333.com ; chusha@hotbox.ru
(Добавление)
Привет!
Ты случайно не об Undo/Redo?
Если о нем, то уточни в каком контексте?
Хотя, принципиальной разницы нет, все-равно нужно заводить буфер и хранить текущую позицию...
При помещении нового элемента в этот буфер все последующие после текущего предварительно убиваются.
В общем, логика там простая. Я,например, делал такую штуку в самописном графическом редакторе xml форм на Java. Причем у меня там были разнотиповые объекты, хранились как изменения одного свойства контрола (группы контролов), так и изменения в количественном составе контролов и их иерархии. Все стреляет на ура.
Я хочу сказать, что основная и, в общем, единственная трудность - придумать формат хранения элементов в буфере отката.
Успехов!
Сергей.
Желательно иметь неограниченное число шагов назад-вперед или в пределах
разумного (несколько сотен шагов).
Это-то как раз не сложно. Вспомни, как устроены транзакции на DAT-файлах. С помощью BLOB-ов весь протокол (RECORD-ы) можно в один файл залить.
Видишь ли, при наличии мультидоступа и сложной структуры связей между таблицами это не такая самоочевидная вещь, как откат-накат в ворде.
Вот, например, только некоторые вопросы.
Откатывая запись/документ, следует ли откатывать запись/документ, созданную/отредактированную/удаленную соседом?
А если подумать?
То-же самое относительно наката.
Думаю, что самое простое и логически безупречное - это откат/накат на контрольную точку.
WBR, Nick Tsigouro. MailTo:Nick@arsis.ru
(Добавление)
Забыл упомянуть, - работа чисто в локальном (однопользовательском) режиме.
Чушкин Сергей
Желательно иметь неограниченное число шагов назад-вперед или в пределах разумного (несколько сотен шагов).
Согласен полностью. Хочу добавить лишь одно. С пользователями были постоянные заморчки, то одно потерялось, то другое не нашлось, но когда я сделал ряд контрольных точек по действию, условию, времени и пр. и предоставил право отката непосредственно пользователю все устаканилось.
Сергей
Написал: ClaList(2)