Страница 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
есть такое, тоже методом тыка обнаружил