У клиента чудесным образом происходят модификации поля в одной таблице.
Это поле использовалось раньше одним образом, а теперь другим образом. И видимо программисты не везде поправили.
Какой конкретно программный код портит это поле, не понятно.
Изменения происходят на достаточно большом промежутке времени, поэтому споймать эту модификацию в журнале тоже весьма сложно.
Родилась идея написать триггер на изменение этой таблицы, и как только будет изменено это поле, сработает триггер и сделает запись в лог файл, кто, когда и из какого интерфейса сделал модификацию.
Вот проблема только, определить из какого интерфейса происходит модификация таблицы.
1) Возможно ли это в триггере?
2) Может предложите другие варианты, кроме анализа исходников?
Определение модифицирующего интерфейса в триггере на таблицу
Модераторы: m0p3e, edward_K, Модераторы
-
- Постоянный гость
- Сообщения: 74
- Зарегистрирован: 23 июн 2007, 23:07
- Откуда: ТопСофт, Минск
-
- Местный житель
- Сообщения: 1846
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
В словах Эдварда есть доля правды. Мне как то потребовалось написать уведомления юзверям о правке некоторой важной инфы в базе, изменения которой влечет изменения всякой плановой фигни... дак на MSSQL пришлось повесить скрипт на джоб, оный анализиует по журналу кто когда что наизменял/удалял/вставлял и рассылать это по почтовику с утра.
Думаю по дате и времени ,действительно,как заметили Выше, можно выловить запускаемый фейс в это время
Думаю по дате и времени ,действительно,как заметили Выше, можно выловить запускаемый фейс в это время
-
- Слесарь-системщик
- Сообщения: 304
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
- Контактная информация:
А прикладной триггер можно использовать? Если да, то в таком триггере имя текущего вставленого в десктоп интерфейса можно выщемить из полного имени текущего поля в нем. Имя поля получаем с помощью GetIfcCurrentFieldName, а затем копируем из него текст от начала до первой точки. Например, в строке 'Z_STAFF::RECEPTIONMAIN.BRWPERSONS.TMPPERSONS.FIO' Z_STAFF::RECEPTIONMAIN- это имя искомого интерфейса.
Вот правда со встроенными интерфейсами будет сложнее: контейнер может быть один, а встраиваемые - любыми. Но хотя бы контейнер мы сможет определить точно. Ну и, понятно, этот способ не прокатит, если обновление записи было произведено из метода невизуального vip-интерфейса. Таких перцев никак не выловишь.
Вот правда со встроенными интерфейсами будет сложнее: контейнер может быть один, а встраиваемые - любыми. Но хотя бы контейнер мы сможет определить точно. Ну и, понятно, этот способ не прокатит, если обновление записи было произведено из метода невизуального vip-интерфейса. Таких перцев никак не выловишь.
Виталий
-
- Постоянный гость
- Сообщения: 74
- Зарегистрирован: 23 июн 2007, 23:07
- Откуда: ТопСофт, Минск