Определение модифицирующего интерфейса в триггере на таблицу

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Friendlyman
Постоянный гость
Сообщения: 74
Зарегистрирован: 23 июн 2007, 23:07
Откуда: ТопСофт, Минск

Определение модифицирующего интерфейса в триггере на таблицу

Сообщение Friendlyman »

У клиента чудесным образом происходят модификации поля в одной таблице.
Это поле использовалось раньше одним образом, а теперь другим образом. И видимо программисты не везде поправили.
Какой конкретно программный код портит это поле, не понятно.
Изменения происходят на достаточно большом промежутке времени, поэтому споймать эту модификацию в журнале тоже весьма сложно.

Родилась идея написать триггер на изменение этой таблицы, и как только будет изменено это поле, сработает триггер и сделает запись в лог файл, кто, когда и из какого интерфейса сделал модификацию.
Вот проблема только, определить из какого интерфейса происходит модификация таблицы.
1) Возможно ли это в триггере?

2) Может предложите другие варианты, кроме анализа исходников?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

Если у вас MSSQL или ORACLE то кто вам мешает сделать запрос в них из таблиц J...... Найти время и кто и потом в галактическом журнале событий посмотреть какой фейс был запущен, а в обычном что еще рядом менялось.
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

В словах Эдварда есть доля правды. Мне как то потребовалось написать уведомления юзверям о правке некоторой важной инфы в базе, изменения которой влечет изменения всякой плановой фигни... дак на MSSQL пришлось повесить скрипт на джоб, оный анализиует по журналу кто когда что наизменял/удалял/вставлял и рассылать это по почтовику с утра.
Думаю по дате и времени ,действительно,как заметили Выше, можно выловить запускаемый фейс в это время
ilshat
Местный житель
Сообщения: 222
Зарегистрирован: 04 июн 2008, 14:35
Откуда: Стерлитамак
Контактная информация:

Сообщение ilshat »

Вроде MSSQL, например, позволяет вешать несколько тригеров на одно событие. Да и в общем то можно подрехтовать существующий. Создайте свою таблицу для лога и пишите все что хотите.
Screw
Слесарь-системщик
Сообщения: 304
Зарегистрирован: 29 мар 2005, 17:49
Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
Контактная информация:

Сообщение Screw »

А прикладной триггер можно использовать? Если да, то в таком триггере имя текущего вставленого в десктоп интерфейса можно выщемить из полного имени текущего поля в нем. Имя поля получаем с помощью GetIfcCurrentFieldName, а затем копируем из него текст от начала до первой точки. Например, в строке 'Z_STAFF::RECEPTIONMAIN.BRWPERSONS.TMPPERSONS.FIO' Z_STAFF::RECEPTIONMAIN- это имя искомого интерфейса.

Вот правда со встроенными интерфейсами будет сложнее: контейнер может быть один, а встраиваемые - любыми. Но хотя бы контейнер мы сможет определить точно. Ну и, понятно, этот способ не прокатит, если обновление записи было произведено из метода невизуального vip-интерфейса. Таких перцев никак не выловишь.
Виталий
Friendlyman
Постоянный гость
Сообщения: 74
Зарегистрирован: 23 июн 2007, 23:07
Откуда: ТопСофт, Минск

Сообщение Friendlyman »

Всем большое спасибо за идеи по реализации задачи!
Если честно, думал что-то похожее на то, что сказал Screw.
Ответить