  | 
				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();
 
 
Отменяется последнее действие (если объект удалять нельзя) | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете добавлять приложения в этом форуме Вы можете скачивать файлы в этом форуме
  | 
   
 
		 |