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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.07.2004, 16:13   #1  
Rom is offline
Rom
Участник
 
14 / 10 (1) +
Регистрация: 26.09.2003
! Глобальное отслеживание изменений в базе...
В Кодеюните 1 - ApplicationManagement есть функции:
OnGlobalInsert, OnGlobalModify, OnGlobalDelete, OnGlobalRename.

Все они отрабатывают тогда, когда происходит соответственно Вставка,
Изменение, Удаление или Переименование одной из записей таблиц, для
которых в настройке Журнала Изменений (Финансы/Настройка/Журнал Изменений Настройка) установлено Все Поля либо Некоторые Поля (со списком полей) в соотвествующем поле, т.е. для запуска функции OnGlobalInsert должно быть заполнено поле Журнал Создания, для запуска OnGlobalModify - Журнал Изменения и т.д. Естественно при этом должен стоять флаг Журнал Изменений Активен в
Финансы/Настройка/Журнал Изменений Настройка.

Хотелось бы узнать, каким образом система отслеживает настройки Журнала Изменений, поскольку запуск этих функций не из каких других объектов не осуществляется. В то же время, если не поставить флаг в поле Журнал Изменений Активен и не указать таблицу, в которой необходимо отслеживать изменения, эти функции не запускаются вовсе.

Все это было проверено как Debugger-ом, так и с помощью функции Выполнение кода:
Если настройки есть, то функции запускаются, если нет - не запускаются и вызов этих функций не осуществляется ни из какого другого объекта.

Если кто в курсе, помогите!!! :-)
Старый 21.07.2004, 17:07   #2  
Rungart is offline
Rungart
Участник
 
491 / 12 (1) ++
Регистрация: 13.01.2003
Адрес: Украина
Я тоже достаточно долго пытался понять откуда происходит вызов этих функций.
Пришел к выводу, что в Нави существуют "скрытые" триггера таблиц или же скрытые части кода стандартных триггеров. То, что существует скрытые механизмы вызова функций - давно известно (на примере функций 1-го кодеюнита).
Интересно, когда-нибудь будут открыты для доступа все возможности Navision?
Старый 22.07.2004, 10:26   #3  
AlexVB is offline
AlexVB
Участник
 
9 / 10 (1) +
Регистрация: 20.07.2004
мои наблюдения:

в Codeunit 1 есть функция GetGlobalTableTriggerMask, которая запускается всегда при изменении данных в любой таблице. Если она вернет не 0, то выполнится OnGlobalInsert..OnGlobalRename (Change Log Management, GetTableTriggerMask).

причем это все работает только при ручном изменении таблиц, т.е. из кода
( например при GLEntry.INSERT(TRUE) ) функцию GetGlobalTableTriggerMask надо вызывать отдельно.
Старый 22.07.2004, 10:45   #4  
Rungart is offline
Rungart
Участник
 
491 / 12 (1) ++
Регистрация: 13.01.2003
Адрес: Украина
Цитата:
Изначально опубликовано AlexVB
мои наблюдения:

в Codeunit 1 есть функция GetGlobalTableTriggerMask, которая запускается всегда при изменении данных в любой таблице. Если она вернет не 0, то выполнится OnGlobalInsert..OnGlobalRename (Change Log Management, GetTableTriggerMask).

причем это все работает только при ручном изменении таблиц, т.е. из кода
( например при GLEntry.INSERT(TRUE) ) функцию GetGlobalTableTriggerMask надо вызывать отдельно.
Спасибо за информацию!
Попробую поковырять в этом направлении
Старый 22.07.2004, 10:58   #5  
EDVard is offline
EDVard
Участник
 
31 / 14 (1) ++
Регистрация: 29.01.2004
Адрес: Moscow
:(
Да, так оно и есть. После входа в Нави при изменении любого поля любой таблицы запускается GetGlobalTableTriggerMask в 1-м Кодеюните, но после прохода через функцию GetTableTriggerMask 423-го Кодеюнита возвращается 0 в случае, если не активен Журнал изменений либо в нем не активна изменяемая таблица или поле. Второй раз GetGlobalTableTriggerMask вызывается лишь при повторном запуске Нави, даже если поставить флаг активности Журнала Изменений и настроить таблицу на отслеживание. То есть выходит, что для работы Журнала Изменений необходимо переоткрывать базу после Настройки Журнала Изменений?

P.S.: Дело в том, что я и Rom вместе работаетм и вмесе над данной проблемой боремся. Нам необходимо отслеживать изменения в таблицах для других целей, но хотелось бы подвязаться к готовому функционалу, раз уж такой имеется...
Старый 22.07.2004, 12:13   #6  
EDVard is offline
EDVard
Участник
 
31 / 14 (1) ++
Регистрация: 29.01.2004
Адрес: Moscow
Да, все так и есть
Спасибо за информацию!!!
Хочешь отследить изименения в базе - переоткрой фирму!
Старый 22.07.2004, 12:16   #7  
AlexVB is offline
AlexVB
Участник
 
9 / 10 (1) +
Регистрация: 20.07.2004
GetTableTriggerMask вызывается для каждой таблицы, к которой происходит обращение, но только 1 раз за сессию. Т.к. codeunit 423 имее SingleInstance = Да, то к таблице Change Log Setup обращение действительно происходит 1 раз за сессию.

Если необходимо вызывать свой код из OnGlobalInsert..OnGlobalRename можно в GetTableTriggerMask сделать так, чтобы возвращаемое значение всегда было 15
Старый 23.07.2004, 09:28   #8  
EDVard is offline
EDVard
Участник
 
31 / 14 (1) ++
Регистрация: 29.01.2004
Адрес: Moscow
Thumbs up
Цитата:
Изначально опубликовано AlexVB
GetTableTriggerMask вызывается для каждой таблицы, к которой происходит обращение, но только 1 раз за сессию. Т.к. codeunit 423 имее SingleInstance = Да, то к таблице Change Log Setup обращение действительно происходит 1 раз за сессию.

Если необходимо вызывать свой код из OnGlobalInsert..OnGlobalRename можно в GetTableTriggerMask сделать так, чтобы возвращаемое значение всегда было 15
Спасибо, AlexVB! Вы нам очень помогли! УДАЧИ!!!

P.S.: Вот только одна проблемка - если GetTableTriggerMask всегда будет возвращать 15, то Журнал изменений будет заполняться для всех полей при любых настройках Журнала... Хотя нет, все ок, спасибо еще раз!!!
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Не пойму по Демо базе johnnik NAV: Прочие вопросы 4 06.09.2005 18:03
Журнал Изменений EV NAV: Прочие вопросы 7 17.09.2004 12:03
Пароль на демо-базе диска Attain kir11 NAV: Функционал 3 25.06.2004 13:12

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

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

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