Страница 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) - сработал

Спасибо! :cool:

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