AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.05.2007, 09:40   #1  
Dimitry is offline
Dimitry
Участник
 
172 / 10 (1) +
Регистрация: 07.02.2003
Как вызвать один метод при записи в любую таблицу
При записи или апдейте любой таблицы в аксапта необходимо вызвать одим метод. Подскажите как это сделать?
Старый 25.05.2007, 09:58   #2  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Можно вызывать метод из Application.logInsert и Application.logUpdate. Правда он будет вызываться только для таблиц, которые включены в журнал базы данных. Можно также перекрыть insert/update таблицы SysTraceTableSQL, но опять же будет рабоать только при включенном мониторинге запросов SQL. По другому, по-моему никак.
А что будет делать этот метод, если не секрет?
Старый 25.05.2007, 10:03   #3  
Dimitry is offline
Dimitry
Участник
 
172 / 10 (1) +
Регистрация: 07.02.2003
Метод будет писать историю изменений определеных полей... а так как лазить по таблицам и перекрывать методы инсерт и апдейт сильно лень, хочется более универсального.
Старый 25.05.2007, 10:07   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
1. А посему бы не прологировать через SysDataBaseLog
2. Можно сделать скрипт, который пройдется по всем таблицам и впишет нужный текст в update

Разобрать текст существующего метода можно через ParserClass
Старый 25.05.2007, 10:17   #5  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
В 4-ке есть семейство классов Event***. Если у Вас 4-ка то можно попробовать заюзать их. А заодно и поделится результатами исследования. Мне скоро самому предстоит сделать нечто подобное
Старый 25.05.2007, 10:22   #6  
Dimitry is offline
Dimitry
Участник
 
172 / 10 (1) +
Регистрация: 07.02.2003
У меня 3,0
Старый 25.05.2007, 10:26   #7  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от belugin Посмотреть сообщение
2. Можно сделать скрипт, который пройдется по всем таблицам и впишет нужный текст в update
+1. Я бы так и сделал. Думаю это самое простое и надежное.

PS Но не забывайте про do* методы и рекордсеты!
Старый 25.05.2007, 10:31   #8  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
А по-моему как то кривовато во всех инсертах и апдейтах писать одно и тоже... Может кто всеже подскажет элегантное решение...
Старый 25.05.2007, 10:46   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Dimitry Посмотреть сообщение
При записи или апдейте любой таблицы в аксапта необходимо вызвать одим метод. Подскажите как это сделать?
В такой формулировке - никак.
потому что запись (insert?) и апдейт может выполняться при помощи методов doInset и doUpdate.
SysDatabaseLog не вызывается даже для настроенных таблиц, если перед записью был вызван skip-метод.
Есть еще операции, работающие с рекордсетами, которые могут изменять данные, но ядром опять же не обрабатываемые (поскольку обновление идет непосредственно в СУБД)
Кроме того, некоторые таблицы система обновляет сама из ядра (например, SQLdictionary)

Средствами Аксапты нельзя перехватить ВСЕ записи и обновления. Можно перехватить только некоторые.
Либо ставьте триггера напрямую в СУБД, либо добавить вызов вашего обработчика в методы insert/update.

Кроме того, учтите!
Что как только вы ставите обработчик в Аксапту, то Аксапта тут же перестает отправлять групповые запросы на сервер и начинает обрабатывать каждую запись самостоятельно. См. хелп "What prevents fast SQL operations?"

В общем, Dimitry, вы хотите странного.
Скорее всего, то, что вы хотите вам не нужно, а нужно что-то совсем другое.
Но если вы настаиваете, то, что вы хотите сделать лучше делать на уровне СУБД, а не Аксапты.
__________________
полезное на axForum, github, vk, coub.
Старый 25.05.2007, 10:51   #10  
Dimitry is offline
Dimitry
Участник
 
172 / 10 (1) +
Регистрация: 07.02.2003
Объясню подробнее что я хочу.
Сейчас у меня есть некое поле "Исполнитель", которое встречаеться в пяти таблицах. При редактировании его пользователем (соответсвенно doUpdate и doInsert отменяется), необходимо сохранять историю изменений.
На пяти таблицах для одного поля написать вручную без проблем.
Но хотелось бы сделать более универсальную систему, так как есть вероятность что завтра захотят видеть историю по другому полю в других таблицах.
Старый 25.05.2007, 10:58   #11  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Общая шина? YAGNI!

А не настроить ли логинг на 5 таблицах?
Старый 25.05.2007, 11:06   #12  
Dimitry is offline
Dimitry
Участник
 
172 / 10 (1) +
Регистрация: 07.02.2003
Цитата:
Сообщение от belugin Посмотреть сообщение
А не настроить ли логинг на 5 таблицах?
Можно.... но тока он аксапту тормозит слегка.... а если потом еще 10 таблиц добавить?
Старый 25.05.2007, 11:08   #13  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
У вас есть функциональность журнала БД?
__________________
С уважением,
glibs®
Старый 25.05.2007, 11:09   #14  
Dimitry is offline
Dimitry
Участник
 
172 / 10 (1) +
Регистрация: 07.02.2003
нет
Старый 25.05.2007, 11:09   #15  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Тогда добавить собственный логгинг в 5 таблиц.
Старый 25.05.2007, 11:10   #16  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Dimitry Посмотреть сообщение
Можно.... но тока он аксапту тормозит слегка.... а если потом еще 10 таблиц добавить?
А Вы что думаете, что Ваша универсальная фича ее ускорять будет?
Старый 25.05.2007, 11:11   #17  
Dimitry is offline
Dimitry
Участник
 
172 / 10 (1) +
Регистрация: 07.02.2003
Цитата:
Сообщение от kashperuk Посмотреть сообщение
А Вы что думаете, что Ваша универсальная фича ее ускорять будет?
Нет. Но тормозить будет не так... Ибо я буду писать историю только определеного поля, а не всего подрят.
Старый 25.05.2007, 11:12   #18  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
You Ain't Gonna Need It

Сделайте пока то, что требуют. Благо займет это у вас минут 10. А вот когда потребуется универсальность - тогда и думать будете... Если потребуется.
Старый 25.05.2007, 11:14   #19  
Dimitry is offline
Dimitry
Участник
 
172 / 10 (1) +
Регистрация: 07.02.2003
Да в том то и дело, что руководство уже подумывает о других данных писать историю.
Так бы я не парился.
Старый 25.05.2007, 11:18   #20  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Dimitry Посмотреть сообщение
Объясню подробнее что я хочу.
... в пяти таблицах.
Вот оно оказывается как! В пяти таблицах... Напомню, что ЛЮБЫХ таблиц в Аксапте больше 2000.

Цитата:
Сообщение от Dimitry Посмотреть сообщение
На пяти таблицах для одного поля написать вручную без проблем.
Ну, дык, напишите класс, в update добавьте вызов.

Цитата:
Сообщение от Dimitry Посмотреть сообщение
Но хотелось бы сделать более универсальную систему
Зачем?

Цитата:
Сообщение от Dimitry Посмотреть сообщение
так как есть вероятность что завтра захотят видеть историю по другому полю в других таблицах.
Добавите и туда вызов вашего класса.

Кстати, а есть вероятность того, что на тех таблицах doInset, doUpdate и recordset-операции будут?


Я потихоньку шизею от вопросов в последние дни (наверное так ужасно жара на меня влияет).
Человеку лениво вставить одну строчку вызова в пять-десять методов.
Но не лениво писать супернавороченную систему, которая работает во всех случаях...
__________________
полезное на axForum, github, vk, coub.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как вызвать метод для поля в FormDataSource? Maxim Gorbunov DAX: Программирование 3 08.05.2007 11:28
Как вызвать изменение Query в DS1 не вызывая метод executeQuery? Morpheus DAX: Программирование 5 17.10.2006 10:26
Как вызвать нужный метод класса? Pawlik DAX: Программирование 5 12.01.2006 15:47
Не могу вызвать метод класса Red Stranger DAX: Программирование 10 12.04.2005 17:57
Как вызвать метод на COMVariant? Andronov DAX: Программирование 2 06.08.2003 08:29

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:09.