|
25.05.2007, 09:40 | #1 |
Участник
|
Как вызвать один метод при записи в любую таблицу
При записи или апдейте любой таблицы в аксапта необходимо вызвать одим метод. Подскажите как это сделать?
|
|
25.05.2007, 09:58 | #2 |
Участник
|
Можно вызывать метод из Application.logInsert и Application.logUpdate. Правда он будет вызываться только для таблиц, которые включены в журнал базы данных. Можно также перекрыть insert/update таблицы SysTraceTableSQL, но опять же будет рабоать только при включенном мониторинге запросов SQL. По другому, по-моему никак.
А что будет делать этот метод, если не секрет? |
|
25.05.2007, 10:03 | #3 |
Участник
|
Метод будет писать историю изменений определеных полей... а так как лазить по таблицам и перекрывать методы инсерт и апдейт сильно лень, хочется более универсального.
|
|
25.05.2007, 10:07 | #4 |
Участник
|
1. А посему бы не прологировать через SysDataBaseLog
2. Можно сделать скрипт, который пройдется по всем таблицам и впишет нужный текст в update Разобрать текст существующего метода можно через ParserClass |
|
25.05.2007, 10:26 | #5 |
Axapta
|
|
|
25.05.2007, 10:17 | #6 |
Программатор
|
В 4-ке есть семейство классов Event***. Если у Вас 4-ка то можно попробовать заюзать их. А заодно и поделится результатами исследования. Мне скоро самому предстоит сделать нечто подобное
|
|
25.05.2007, 10:22 | #7 |
Участник
|
У меня 3,0
|
|
25.05.2007, 10:31 | #8 |
Программатор
|
А по-моему как то кривовато во всех инсертах и апдейтах писать одно и тоже... Может кто всеже подскажет элегантное решение...
|
|
25.05.2007, 10:46 | #9 |
Участник
|
Цитата:
потому что запись (insert?) и апдейт может выполняться при помощи методов doInset и doUpdate. SysDatabaseLog не вызывается даже для настроенных таблиц, если перед записью был вызван skip-метод. Есть еще операции, работающие с рекордсетами, которые могут изменять данные, но ядром опять же не обрабатываемые (поскольку обновление идет непосредственно в СУБД) Кроме того, некоторые таблицы система обновляет сама из ядра (например, SQLdictionary) Средствами Аксапты нельзя перехватить ВСЕ записи и обновления. Можно перехватить только некоторые. Либо ставьте триггера напрямую в СУБД, либо добавить вызов вашего обработчика в методы insert/update. Кроме того, учтите! Что как только вы ставите обработчик в Аксапту, то Аксапта тут же перестает отправлять групповые запросы на сервер и начинает обрабатывать каждую запись самостоятельно. См. хелп "What prevents fast SQL operations?" В общем, Dimitry, вы хотите странного. Скорее всего, то, что вы хотите вам не нужно, а нужно что-то совсем другое. Но если вы настаиваете, то, что вы хотите сделать лучше делать на уровне СУБД, а не Аксапты. |
|
25.05.2007, 10:51 | #10 |
Участник
|
Объясню подробнее что я хочу.
Сейчас у меня есть некое поле "Исполнитель", которое встречаеться в пяти таблицах. При редактировании его пользователем (соответсвенно doUpdate и doInsert отменяется), необходимо сохранять историю изменений. На пяти таблицах для одного поля написать вручную без проблем. Но хотелось бы сделать более универсальную систему, так как есть вероятность что завтра захотят видеть историю по другому полю в других таблицах. |
|
25.05.2007, 11:18 | #11 |
Участник
|
Вот оно оказывается как! В пяти таблицах... Напомню, что ЛЮБЫХ таблиц в Аксапте больше 2000.
Ну, дык, напишите класс, в update добавьте вызов. Зачем? Цитата:
Кстати, а есть вероятность того, что на тех таблицах doInset, doUpdate и recordset-операции будут? Я потихоньку шизею от вопросов в последние дни (наверное так ужасно жара на меня влияет). Человеку лениво вставить одну строчку вызова в пять-десять методов. Но не лениво писать супернавороченную систему, которая работает во всех случаях... |
|
25.05.2007, 11:19 | #12 |
Участник
|
пока писал, уже ответили по существу.
полностью поддерживаю предыдущих ораторов. |
|
25.05.2007, 11:22 | #13 |
Axapta
|
Цитата:
Цитата:
Сообщение от mazzy
Если же вы решаете свои ПРОГРАММИСТСКИЕ задачи, то конечно же надо делать самый универсальный способ. Это же так интересно! Заставить работать иерархию в реляционной базе данных! Это же какая победа программиста! Любой программист это оценит, ей богу. Так и рождаются универсальные построители sql запросов, когда есть query, так рождаются динамические формы с произвольным числом реквизитов произвольного типа и т.п. Беда только в том, что ПОЛЬЗОВАТЕЛЮ это нафиг не нужно. Пользователю нужно решение ЕГО проблем. Желательно понятными для него способами.
|
|
|
За это сообщение автора поблагодарили: mazzy (5). |
25.05.2007, 11:34 | #14 |
Участник
|
|
|
25.05.2007, 10:58 | #15 |
Участник
|
|
|
25.05.2007, 11:06 | #16 |
Участник
|
|
|
25.05.2007, 11:10 | #17 |
Участник
|
А Вы что думаете, что Ваша универсальная фича ее ускорять будет?
|
|
25.05.2007, 11:11 | #18 |
Участник
|
|
|
25.05.2007, 11:08 | #19 |
Member
|
У вас есть функциональность журнала БД?
__________________
С уважением, glibs® |
|
25.05.2007, 11:09 | #20 |
Участник
|
нет
|
|