Страница 1 из 1
					
				Доп.функционал на стандартный обработчик
				Добавлено: 15 мар 2010, 09:58
				 Maverick
				Добрый день.
Интересует вопрос следующего плана.
возможно ли на обработку стандартного события, ДО или ПОСЛЕ выполнения стандартного ф-ла, выполнить свой? т.е. существуют ли сейчас POST и PRE- методы?!
если да, то каким образом? 
подскажите )))
или реализация на каком либо событии собственного ф-ла и является по сути post-методом? т.е. выполнение его всегда будет ПОСЛЕ выполнения на данном событии стандартной обработки?
			 
			
					
				Re: Доп.функционал на стандартный обработчик
				Добавлено: 15 мар 2010, 10:41
				 Vik
				А так не устроит:
1)
Код: Выделить всё
  ...
cmInit :
{
   <свой код>
   
   if (Inherited :: HandleEvent (cmInit) != heOk)
     Abort;
}
  ...
2)
Код: Выделить всё
  ...
cmInit :
{
  
   if (Inherited :: HandleEvent (cmInit) = heOk)
     {
        <свой код>
     }
}
  ...
?
 
			
					
				
				Добавлено: 15 мар 2010, 11:10
				 Maverick
				т.е. по сути 1) pre- , а 2) post- метод?
1) работоспособность проверялась или это просто теоретические умозаключения?
2) где почитать можно? 
буду благодарен ))
			 
			
					
				
				Добавлено: 15 мар 2010, 11:16
				 Vik
				По сути да. 
Проверялось - работает. 
А почитать можно все там же - vipprog.chm - "Расширение обработчиков событий"
			 
			
					
				
				Добавлено: 15 мар 2010, 11:40
				 Maverick
				огромный гранд мерси...
буду попробовать 

 
			
					
				
				Добавлено: 15 мар 2010, 11:51
				 Vik
				И еще, к этому : "или реализация на каком либо событии собственного ф-ла и является по сути post-методом? т.е. выполнение его всегда будет ПОСЛЕ выполнения на данном событии стандартной обработки?". Если вы переопределите обработчик какого-либо события и в вашем коде явно не вызовете родительский обработчик этого события, то своим функционалом вы перекроете стандартный, то есть, стандартный функционал вообще не отработает 

 
			
					
				
				Добавлено: 15 мар 2010, 12:35
				 Maverick
				ммм.. так.. поподробнее тогда... как одновременно заставить отработать и собственный код и стандартный родительский?
задача такова:
при добавлении спецификации ДО нужно помимо стандартных пересчетов добавить свой кусок, который бы тоже кое-что рассчитывал.
			 
			
					
				
				Добавлено: 15 мар 2010, 12:38
				 m0p3e
				Простой пример:
Код: Выделить всё
1. Выполнение своего кода до:
cmInit :
{
 MyProcedure;
 Inherited::HandleEvent (cmInit);
}
2. Выполнение своего кода после:
cmInit :
{
 Inherited::HandleEvent (cmInit);
 MyProcedure;
}
2. Выполнение своего кода вместо:
cmInit :
{
 MyProcedure;
}
 
			
					
				
				Добавлено: 15 мар 2010, 12:42
				 Maverick
				Ребят, спасибо за разжёвывание )))
век живи - век учись 

 
			
					
				
				Добавлено: 15 мар 2010, 12:50
				 m0p3e
				Maverick
Самое главное что это работает 

Также через докомпиляцию можно расширять лог.таблицу, перекрывать паблик-методы, расширять FR-потоки (с 26-го атлантиса), перекрывать визуальные части.
Но надо помнить, что повторная докомпиляция перекрывает полностью предыдущие.
 
			 
			
					
				
				Добавлено: 15 мар 2010, 13:05
				 Vik
				Maverick писал(а):ммм.. так.. поподробнее тогда... как одновременно заставить отработать и собственный код и стандартный родительский?
.
" Inherited :: HandleEvent (cmInit) " - это и есть вызов родительского обработчика события cmInit
 
			
					
				
				Добавлено: 28 май 2010, 17:03
				 timaskraft
				Подскажите пожалуйста, tableevent можно докомпилировать?
к примеру
Код: Выделить всё
alter interface KATPARTY
tableevent table katparty
cmCheckRecord:    {
	            if katparty.cmc=0
                    {
					  message('Привяжите  МЦ  к партии или удалите запись!');
					  abort;
					}
                else
					{
                              // ***** как вызвать  стандартный tableevent cmCheckRecord ???
 					}
				  }
 end;
end.
 
			
					
				
				Добавлено: 28 май 2010, 17:11
				 galover
				inherited::handleEvent(cmCheckRecord)
			 
			
					
				
				Добавлено: 28 май 2010, 17:20
				 timaskraft
				galover писал(а):inherited::handleEvent(cmCheckRecord)
Пытался писать inherited::TABLEEvent(cmCheckRecord) - компилятор не пропускал. 
inherited::handleEvent(cmCheckRecord) - сработал
Спасибо!   

 
			
					
				
				Добавлено: 28 май 2010, 17:47
				 galover
				есть такое, тоже методом тыка обнаружил