![]() |
#1 |
Участник
|
Как вызвать один метод при записи в любую таблицу
При записи или апдейте любой таблицы в аксапта необходимо вызвать одим метод. Подскажите как это сделать?
|
|
![]() |
#2 |
Участник
|
Можно вызывать метод из Application.logInsert и Application.logUpdate. Правда он будет вызываться только для таблиц, которые включены в журнал базы данных. Можно также перекрыть insert/update таблицы SysTraceTableSQL, но опять же будет рабоать только при включенном мониторинге запросов SQL. По другому, по-моему никак.
А что будет делать этот метод, если не секрет? |
|
![]() |
#3 |
Участник
|
Метод будет писать историю изменений определеных полей... а так как лазить по таблицам и перекрывать методы инсерт и апдейт сильно лень, хочется более универсального.
|
|
![]() |
#4 |
Участник
|
1. А посему бы не прологировать через SysDataBaseLog
2. Можно сделать скрипт, который пройдется по всем таблицам и впишет нужный текст в update Разобрать текст существующего метода можно через ParserClass |
|
![]() |
#5 |
Программатор
|
В 4-ке есть семейство классов Event***. Если у Вас 4-ка то можно попробовать заюзать их. А заодно и поделится результатами исследования. Мне скоро самому предстоит сделать нечто подобное
![]() |
|
![]() |
#6 |
Участник
|
У меня 3,0
![]() |
|
![]() |
#7 |
Axapta
|
Цитата:
PS Но не забывайте про do* методы и рекордсеты!
__________________
С уважением, Олег. |
|
![]() |
#8 |
Программатор
|
А по-моему как то кривовато во всех инсертах и апдейтах писать одно и тоже... Может кто всеже подскажет элегантное решение...
![]() |
|
![]() |
#9 |
Участник
|
Цитата:
потому что запись (insert?) и апдейт может выполняться при помощи методов doInset и doUpdate. SysDatabaseLog не вызывается даже для настроенных таблиц, если перед записью был вызван skip-метод. Есть еще операции, работающие с рекордсетами, которые могут изменять данные, но ядром опять же не обрабатываемые (поскольку обновление идет непосредственно в СУБД) Кроме того, некоторые таблицы система обновляет сама из ядра (например, SQLdictionary) Средствами Аксапты нельзя перехватить ВСЕ записи и обновления. Можно перехватить только некоторые. Либо ставьте триггера напрямую в СУБД, либо добавить вызов вашего обработчика в методы insert/update. Кроме того, учтите! Что как только вы ставите обработчик в Аксапту, то Аксапта тут же перестает отправлять групповые запросы на сервер и начинает обрабатывать каждую запись самостоятельно. См. хелп "What prevents fast SQL operations?" В общем, Dimitry, вы хотите странного. Скорее всего, то, что вы хотите вам не нужно, а нужно что-то совсем другое. Но если вы настаиваете, то, что вы хотите сделать лучше делать на уровне СУБД, а не Аксапты. |
|
![]() |
#10 |
Участник
|
Объясню подробнее что я хочу.
Сейчас у меня есть некое поле "Исполнитель", которое встречаеться в пяти таблицах. При редактировании его пользователем (соответсвенно doUpdate и doInsert отменяется), необходимо сохранять историю изменений. На пяти таблицах для одного поля написать вручную без проблем. Но хотелось бы сделать более универсальную систему, так как есть вероятность что завтра захотят видеть историю по другому полю в других таблицах. |
|
![]() |
#11 |
Участник
|
|
|
![]() |
#12 |
Участник
|
|
|
![]() |
#13 |
Member
|
У вас есть функциональность журнала БД?
__________________
С уважением, glibs® |
|
![]() |
#14 |
Участник
|
нет
|
|
![]() |
#15 |
Участник
|
Тогда добавить собственный логгинг в 5 таблиц.
|
|
![]() |
#16 |
Участник
|
Цитата:
![]() |
|
![]() |
#17 |
Участник
|
|
|
![]() |
#18 |
Axapta
|
You Ain't Gonna Need It
Сделайте пока то, что требуют. Благо займет это у вас минут 10. А вот когда потребуется универсальность - тогда и думать будете... Если потребуется.
__________________
С уважением, Олег. |
|
![]() |
#19 |
Участник
|
Да в том то и дело, что руководство уже подумывает о других данных писать историю.
Так бы я не парился. |
|
![]() |
#20 |
Участник
|
Вот оно оказывается как! В пяти таблицах... Напомню, что ЛЮБЫХ таблиц в Аксапте больше 2000.
Ну, дык, напишите класс, в update добавьте вызов. Зачем? Цитата:
Кстати, а есть вероятность того, что на тех таблицах doInset, doUpdate и recordset-операции будут? Я потихоньку шизею от вопросов в последние дни (наверное так ужасно жара на меня влияет). Человеку лениво вставить одну строчку вызова в пять-десять методов. Но не лениво писать супернавороченную систему, которая работает во всех случаях... |
|