Список форумов www.integro.ru www.integro.ru
ЦСИ ИНТЕГРО
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

[Решено] Проверка объекта перед удалением

 
Начать новую тему   Ответить на тему    Список форумов 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 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
asupstudent



Зарегистрирован: 22.03.2015
Сообщения: 16
Откуда: Кулебаки

СообщениеДобавлено: Чт 03 Сен 2015 15:19    Заголовок сообщения: Ответить с цитатой

Я думаю может принудительно вызвать исключительную ситуацию, а потом обработать
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
asupstudent



Зарегистрирован: 22.03.2015
Сообщения: 16
Откуда: Кулебаки

СообщениеДобавлено: Пт 04 Сен 2015 12:28    Заголовок сообщения: Ответить с цитатой

Проблему решил так:

Поставил флаг, при удалении это флаг изменяется TRUE или FALSE (в методе который выполняется до удаления)

А в методе, выполняемым после удаления, в зависимости от флага выполняется

_fApplication.MainWindow.Actions["ActionsEditUndo"].Execute();

Отменяется последнее действие (если объект удалять нельзя)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков Часовой пояс: GMT + 5
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять приложения в этом форуме
Вы можете скачивать файлы в этом форуме


© phpBB Group
Русская поддержка phpBB