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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.10.2014, 18:41   #1  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
Суть проблемы:
1. Необходимо обеспечить логирование изменений в справочных таблицах (количество будет ограничено настроечной таблицей).
2. Необходимо логировать максимально возможные пути (изменение/добавление/удаление данных руками, кодом). Логов будет немного - причем будет регулярная очистка.
3. От SQL пока откажусь - писать кодеюнит для запросов пока не готов... Хотя возможно придется.

Что удалось наковырять:
1. Стандартный Change Log Entry у нас переписан, логирование выполнено кодом в тригерах полей (переписывал подрядчик-внедренец еще на стадии внедрения)
2. Через кодеюнит 1 ApplicationManagement вроде как есть возможность сделать аналог стандартного Change Log Entry, создав свои функции - но пока в этом направлении глухо... (код добавленый в OnGlobalInsert, OnGlobalModify и т.п. не отработал - м.б. change listener такие изменения сходу не тянет?)

Может у кого-нибудь есть ссылки на код стандартного функционала? Либо есть знания? Или хоть какие подсказки) Готовым решением естественно поделюсь))

P.S.
Пока в статусе "I NEED HELP!!!" - но завтра будет новый день и будем рыть)))
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 21.10.2014, 18:56   #2  
Шрэк is offline
Шрэк
Участник
Аватар для Шрэк
 
645 / 24 (2) +++
Регистрация: 09.02.2004
Адрес: Москва
В стандарте:
OnGlobalInsert, OnGlobalModify в 1 кодеюните отрабатывают только если изменения делались пользователем через форму.
Отчеты, кю, датапорты и тп. никак не связаны с этим, т.е. если через них изменять данные, то это в лог не запишется. Если только в этих отчетах на каждое изменение не прописать вызов соотв. функций из ChangelogManagment.

Можно в SQL на триггерах таблиц прописать код, тогда будет все логироваться. В 2008 sql добавлена какая-то возможность логирования, которую можно задать через интерфейс Менеджмент Студио, но это будет влиять на производительность.

ЧТобы не ковыряться в том, что вам переписали внедренцы в НАВ - установите демо базу Кронуса.
__________________
MBS Certified Master in Navision Developer
Старый 21.10.2014, 19:01   #3  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
Цитата:
Сообщение от Роман Посмотреть сообщение
В стандарте:
OnGlobalInsert, OnGlobalModify в 1 кодеюните отрабатывают только если изменения делались пользователем через форму.
т.е. если правит в таблице - не срабатывает?)) следовательно OnModify(TRUE) тоже не пашет... только через формы - а я то в таблице для теста правил)
Цитата:
Сообщение от Роман Посмотреть сообщение
Отчеты, кю, датапорты и тп. никак не связаны с этим, т.е. если через них изменять данные, то это в лог не запишется. Если только в этих отчетах на каждое изменение не прописать вызов соотв. функций из ChangelogManagment.

Можно в SQL на триггерах таблиц прописать код, тогда будет все логироваться. В 2008 sql добавлена какая-то возможность логирования, которую можно задать через интерфейс Менеджмент Студио, но это будет влиять на производительность.

ЧТобы не ковыряться в том, что вам переписали внедренцы в НАВ - установите демо базу Кронуса.
изменения кодом особо логировать и не понадобится - пришло уточнение задачи, логируем только справочные таблицы)))

Спасибо в виде "+") завтра продолжу дальнейшие изыскания в этом направлении.
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 21.10.2014, 19:16   #4  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
Цитата:
Сообщение от zuzka Посмотреть сообщение
т.е. если правит в таблице - не срабатывает?)) следовательно OnModify(TRUE) тоже не пашет... только через формы - а я то в таблице для теста правил
Нет, срабатывает не только при изменении данных пользователем через форму но и при изменении данных пользователем напрямую в таблице. Так что вы действовали в правильном направлении.
И не забывайте, что property codeunit 423 SingleInstance = Yes.
Старый 21.10.2014, 20:49   #5  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
Цитата:
Сообщение от zuzka Посмотреть сообщение
изменения кодом особо логировать и не понадобится - пришло уточнение задачи, логируем только справочные таблицы)))
Если изменения кодом логировать не надо, то тогда остаются изменения, сделанные пользователем: тогда вообще не нужно ничего программировать, настраиваете в Change Log Setup (Table) / Change Log Setup (Field) нужные вам таблицы / поля и тип изменений и всё, логирование производится автоматом.
Старый 22.10.2014, 11:27   #6  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
Цитата:
Сообщение от AlexB Посмотреть сообщение
Нет, срабатывает не только при изменении данных пользователем через форму но и при изменении данных пользователем напрямую в таблице. Так что вы действовали в правильном направлении.
И не забывайте, что property codeunit 423 SingleInstance = Yes.
Все логирует отлично) Вчера тупо смотрел на логирование вставки - пока не обратил внимание что в логах такого типа у нас нет... Тригера OnGlobalInsert нет!!! Дописал - но не работает, изменения в других тригерах втягивает, может что-то не доребутилось...

Цитата:
Сообщение от AlexB Посмотреть сообщение
Если изменения кодом логировать не надо, то тогда остаются изменения, сделанные пользователем: тогда вообще не нужно ничего программировать, настраиваете в Change Log Setup (Table) / Change Log Setup (Field) нужные вам таблицы / поля и тип изменений и всё, логирование производится автоматом.
Изменения кодом втягиваются в лог, но только те что проходят через тригер OnModify (отрабатывает OnGlobalModify???) - посмотрю что с этим можно сделать)У нас фактически все на OnModify висит...
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 22.10.2014, 13:21   #7  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
Цитата:
Сообщение от zuzka Посмотреть сообщение
Тригера OnGlobalInsert нет!!! Дописал - но не работает, изменения в других тригерах втягивает, может что-то не доребутилось...
У вас в codeunit 1 небыло до сих пор триггера OnGlobalInsert()? Ничего себе... Попробуйте проставить в дописанном вами триггере OnGlobalInsert() в properties ID = 21. O вообще сравните ID всех триггериов для логирования в вашей ДБ и в голом cronus'e.
Старый 22.10.2014, 15:08   #8  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
Цитата:
Сообщение от AlexB Посмотреть сообщение
У вас в codeunit 1 небыло до сих пор триггера OnGlobalInsert()? Ничего себе... Попробуйте проставить в дописанном вами триггере OnGlobalInsert() в properties ID = 21. O вообще сравните ID всех триггериов для логирования в вашей ДБ и в голом cronus'e.
Судя по комментариям в Documentation он был, но его удалили.... Работаю над восстановлением)
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 22.10.2014, 15:46   #9  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
триггер восстановлен, продолжаю ковыряться дальше)) помогло восстановление ID.
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
 


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

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

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