 |
www.integro.ru ЦСИ ИНТЕГРО
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
asupstudent
Зарегистрирован: 22.03.2015 Сообщения: 16 Откуда: Кулебаки
|
Добавлено: Ср 02 Сен 2015 16:11 Заголовок сообщения: [Решено] Проверка объекта перед удалением |
|
|
Здравствуйте.
Мне необходимо перед удалением объекта с карты сделать проверку можно ли удалять объект (необходимо для целостности БД).
В программном модуле я задействовал метод
' Вызывается перед удалением пространственного объекта
sub DbMapObjects_WillDelete(aMapObjectID)
RPMModule.CheckDelete(aMapObjectID)
end sub
который выполняется перед удалением объекта
Проверку я произвожу в программной части С# (взаимодействуют они через COM), программная часть выполнена в виде DLL библиотеки
/////////////////////////////////////////////////////////////////////////////////////////////////////////
public bool CheckDelete(String mapObjectID)
{
String LayerID = _fApplication.ActiveDb.MapObjects.LayerIDFromObjectID(mapObjectID);
if (LayerID.Equals(this.dbSettings.getIdWorkshop()))
{
IIngeoMapObjectsQuery checkSection = _fApplication.ActiveDb.MapObjects.QueryByObject(this.dbSettings.getIdSection(),
mapObjectID,
TIngeoContourRelation.incrIntersected,
TIngeoContourRelation.incrIntersected);
if (!checkSection.EOF)
{
MessageBox.Show("Прежде чем удалять цех, необходимо удалить его участки");
return false;
}
}
else if (LayerID.Equals(this.dbSettings.getIdArea()))
{
IIngeoMapObjectsQuery checkWorkshop = _fApplication.ActiveDb.MapObjects.QueryByObject(this.dbSettings.getIdWorkshop(),
mapObjectID,
TIngeoContourRelation.incrIntersected,
TIngeoContourRelation.incrIntersected);
if (!checkWorkshop.EOF)
{
MessageBox.Show("Прежде чем удалять территорию, необходимо удалить её цеха");
return false;
}
}
return true;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Все работает нормально, только я не могу ОСТАНОВИТЬ удаление объекта, не могу разобраться где это сделать в программном модуле ГисИНГЕО или программной части С#.
Сейчас ситуация такая, выделяю объект, нажимаю удалить, проходит проверка, в каком то случае система сообщает объект удалять нельзя, в каком то нет. Метод CheckDelete возвращает true или false соответственно. ОБЪЕКТ УДАЛЯЕТСЯ. Нужно как то на это среагировать в программном модуле ГисИнгео (не знаю как). Думаю тоже возможно отменить удаление непосредственно в CheckDelete (тоже не знаю как).
Думаю возможно удалить объект, а потом в вызове метода (после удаления объекта) вернуть его назад (аналог CTRL+Z) (не знаю как сделать это программно)
Прошу помощи
Спасибо
Последний раз редактировалось: asupstudent (Пт 04 Сен 2015 12:28), всего редактировалось 1 раз |
|
Вернуться к началу |
|
 |
asupstudent
Зарегистрирован: 22.03.2015 Сообщения: 16 Откуда: Кулебаки
|
Добавлено: Чт 03 Сен 2015 15:19 Заголовок сообщения: |
|
|
Я думаю может принудительно вызвать исключительную ситуацию, а потом обработать |
|
Вернуться к началу |
|
 |
asupstudent
Зарегистрирован: 22.03.2015 Сообщения: 16 Откуда: Кулебаки
|
Добавлено: Пт 04 Сен 2015 12:28 Заголовок сообщения: |
|
|
Проблему решил так:
Поставил флаг, при удалении это флаг изменяется TRUE или FALSE (в методе который выполняется до удаления)
А в методе, выполняемым после удаления, в зависимости от флага выполняется
_fApplication.MainWindow.Actions["ActionsEditUndo"].Execute();
Отменяется последнее действие (если объект удалять нельзя) |
|
Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете добавлять приложения в этом форуме Вы можете скачивать файлы в этом форуме
|
|