// form_main.MapFind1.MapObj.Delete; mapDeleteObject(form_main.MapObj1.ObjHandle); // Во всех случаях выдает ошибку Ошибка обновления удаленного объекта - Update Object // Может ли это быть связано с тем, что карта расположена на GIS Server, ранее на пользовательском компьютере вроде такого не было.
не срабатывает отмена удаления этого объекта. А срабатывает отмена нанесения объекта на карту, которое было выполнено еще до удаления объекта. Это очень не хорошо, пользователь жалуется, что отменяется не последнее удаление объекта, а удаляется нанесение еще ранее нанесенного объекта.
Денис Вицко написал: PS После удаления объекта дополнительно вызывать Commit не требуется.
Теперь что касается якобы некорректной отмены транзакции.
В многопользовательском режиме транзакции открываются для всех пользователей и закрываются при завершении операций. Транзакции при этом существуют параллельно в асинхронном режиме. Какая из них окажется последней - это будет зависеть от того, кто из пользователей раньше или позже начал или закончил свою операцию. Порядок транзакций как они фактически сохранились можно посмотреть выгрузив журнал транзакций карты с помощью прикладной задачи в ГИС Панорама 12:
Чтобы отменить не любую последнюю транзакцию, а конкретно свою, надо воспользоваться функцией mapLogUndoAction с соответствующим флагом:
Код
// Отменить последнюю транзакцию в документе
// Если после транзакции выполнялась сортировка карты
// или журнал пуст - возвращает ноль
// hMap - идентификатор открытой карты
// hSite - поле для записи идентификатора карты, на которой выполнена
// отмена транзакции
// flag - условия выбора последней транзакции:
// LOG_ANYACTION(0) - нет условий, LOG_MYACTION(1) - обрабатывать последнюю
// свою транзакцию (пропускать транзакции других пользователей)
// При ошибке возвращает ноль,
// иначе - количество восстановленных операций
_MAPIMP long int _MAPAPI mapLogUndoAction(HMAP hMap, HSITE * hSite, long int flag);