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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.10.2011, 16:29   #1  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Создание снимков изменений в базе данных
Привет всем!
Предлагаю вам попробовать утилиту, которая позволяет просмотреть историю изменений базы данных между двумя заданными промежутками времени. Прилагаются проекты для AX2009 и для AX3.0.

Например, вы разнесли накладную, и вам интересно посмотреть, в какие таблицы записались данные, методы каких классов вызывались при изменении той или иной таблицы в базе.

Утилита реализована в виде, похожем на стандартную форму "Администрирование - Запросы - Журнал базы данных". Используется стандартный функционал журнала базы данных.

Основные отличия от стандартного журнала базы данных:
1) Видно все изменения в базе, которые произошли при разноске накладной (или журнала), либо при создании нового клиента и так далее.
2) Видно стек вызовов методов на Х++
3) Можно создавать множество снимков журнала базы данных. Каждый из снимков имеет свое название. Снимки можно именовать, к примеру, так "Разноска накладной по заказу ХХХХ", "Разноска складского журнала YYYY" и так далее.

В принципе, похожего результата можно добиться и при стандартном использовании мониторинга запросов SQL для пользователя. Но данная утилита предоставляет возможность просмотреть сразу все изменения в одном месте, в сжатом виде и с максимальным количеством информации. Средства просмотра изменений практически все взяты из формы журнала базы данных.

Инструкция по использованию:
1) Накатите проект на тестовую базу (из стандартных объектов изменяется только таблица SysDatabaseLog
2) Выполните пункт меню "Начать формирование снимка изменений данных"
3) В открывшемся диалоговом окне введите название снимка (можно оставить предлагаемое по умолчанию название). Нажмите кнопку Ок.
4) Разнесите какой-нибудь журнал, накладную, введите новую номенклатуру в справочник и т.д.
5) Выполните пункт меню "Завершить формирование снимка изменений данных"
6) Выполнте пункт меню "Снимки изменений в базе данных".
7) В открывшейся форме можно пользоваться всеми фукнциями просмотра журнала базы данных, просматривать стек вызова для каждого изменения, во вкладке "История" видеть старые и новые значения полей.
8) В раскрывающемся списке "Название снимка" можно выбирать другие снимки для просмотра. По умолчанию форма открывается с последним сделанным снимком.
9) Сохраненные снимки можно редактировать через кнопку "Список снимков", расположенную рядом с раскрывающимся списком "Название снимка".

Особенности работы утилиты:
1) Изменения в снимке сохраняются только для того пользователя, который начал формирование снимка. Просматривать снимок могут все пользователи, у которых есть права доступа.
2) Можно оставить снимок незавершенным на долгое время - тогда туда попадут все изменения, сделанные данным пользователем.
3) Данные в снимке можно просматривать только после завершения (через пункт меню "Завершить формирование снимка изменений данных")
4) Не рекомендуется настраивать журнал базы данных, если в текущий момент не завершен снимок, иначе при завершении снимка все изменения в настройках журнала базы данных потеряются. В любое другое время можно настраивать журнал базы данных без ограничений.

Примечание: на разработку с нуля данной утилиты у меня ушло примерно 4 часа. Идея о ее создании витала где-то пару месяцев.
Миниатюры
Нажмите на изображение для увеличения
Название: СнимкиИзмененийБазы.JPG
Просмотров: 529
Размер:	164.0 Кб
ID:	7228  
Вложения
Тип файла: xpo SharedProject_zSnapshotForAx2009.xpo (89.8 Кб, 549 просмотров)
Тип файла: xpo zSnapshotForAx30.xpo (192.1 Кб, 528 просмотров)

Последний раз редактировалось Ace of Database; 20.10.2011 в 17:46.
За это сообщение автора поблагодарили: slava (1), Logger (5), Poleax (5), Atar (2), ice (1), someOne (2).
Старый 20.10.2011, 16:58   #2  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,689 / 405 (17) +++++++
Регистрация: 23.03.2006
а нужно чтото дополнительно настроить? а то у меня чтото не сработала запись
Старый 20.10.2011, 17:04   #3  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
А ты выполнил пункт меню "Завершить формирование снимка изменений данных"?

Я накатывал на чистое приложение. Вроде должно работать, если выполнить все по инструкции.

Инструкция по использованию:
1) Накатите проект на тестовую базу (из стандартных объектов изменяется только таблица SysDatabaseLog
2) Выполните пункт меню "Начать формирование снимка изменений данных"
3) В открывшемся диалоговом окне введите название снимка (можно оставить предлагаемое по умолчанию название). Нажмите кнопку Ок.
4) Разнесите какой-нибудь журнал, накладную, введите новую номенклатуру в справочник и т.д.
5) Выполните пункт меню "Завершить формирование снимка изменений данных"
6) Выполнте пункт меню "Снимки изменений в базе данных".
7) В открывшейся форме можно пользоваться всеми фукнциями просмотра журнала базы данных, просматривать стек вызова для каждого изменения, во вкладке "История" видеть старые и новые значения полей.
8) В раскрывающемся списке "Название снимка" можно выбирать другие снимки для просмотра. По умолчанию форма открывается с последним сделанным снимком.
9) Сохраненные снимки можно редактировать через кнопку "Список снимков", расположенную рядом с раскрывающимся списком "Название снимка".
Старый 20.10.2011, 17:15   #4  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,689 / 405 (17) +++++++
Регистрация: 23.03.2006
да в 6п открывается форма, в котором выбран снимок, но в гридах все пусто

пс очень быстро срабатывает 3п

Последний раз редактировалось ice; 20.10.2011 в 17:18.
Старый 20.10.2011, 17:21   #5  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Похоже, у вас в домене настроен журнал базы данных.
У вас в таблице DomainInfo есть записи?
У нас нет. Подумаю, как для доменов подкрутить
Старый 20.10.2011, 17:28   #6  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,689 / 405 (17) +++++++
Регистрация: 23.03.2006
база чистая, с демо данными, без модификаций. в DomainInfo одна запись, с id Admin
Старый 20.10.2011, 17:30   #7  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Исправил проекты. Перезакачай проект, попробуй. У меня есть Аксапта с доменами. В ней тоже не работало - а сейчас заработало.
Старый 20.10.2011, 17:47   #8  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Еще подправил проекты, чтобы служебная таблица SysEvent не попадала в историю.
Старый 20.10.2011, 17:58   #9  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,689 / 405 (17) +++++++
Регистрация: 23.03.2006
с этим я справился). есть еще одна проблема, нет истории на вкладке история
Старый 20.10.2011, 18:03   #10  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Еще есть особенность для таблиц, у которых SaveDataPerCompany = NO.
Для них история сохраняется в компании DAT. И если текущая компания отличается от DAT, то строки такой истории не видны среди остальных строк.
Попозже доделаю для таких таблиц.
Старый 20.10.2011, 18:07   #11  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,689 / 405 (17) +++++++
Регистрация: 23.03.2006
этот признак yes, и компания dat
Старый 20.10.2011, 18:07   #12  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Цитата:
Сообщение от ice Посмотреть сообщение
с этим я справился). есть еще одна проблема, нет истории на вкладке история
У меня везде есть история во вкладке.
Попробуй для таблиц, которые входят в табличные коллекции (виртуальные компании), потом для таблиц, у которых SaveDataPerCompany = No, и потом для всех остальных "нормальных" таблиц.
Старый 20.10.2011, 23:10   #13  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Пока не скачивайте проекты.
Устранил проблемы, связанные с ведением журнала базы данных в разных компаниях.
Завтра выложу проекты и сообщу когда можно будет попробовать. Можно будет видеть изменения сразу в нескольких компаниях - полезно для случаев, когда документы транслируются в разые компании.
Старый 21.10.2011, 09:27   #14  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,689 / 405 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от ice Посмотреть сообщение
с этим я справился). есть еще одна проблема, нет истории на вкладке история
в общем проблема крылась в преобразовании RecId в строку, надо поменять с int2str на int642str
Старый 21.10.2011, 09:58   #15  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Выкладываю исправления.
Теперь историю изменений данных можно смотреть сразу во всех компаниях. Удобно отслеживать сложный функционал, когда при выполнении пользователем какой-то операции, создаются документы в разных компаниях.
Тестировал в следующих конфигурациях:
1) Без доменов, но с тремя компаниями и одной виртуальной компанией
2) С одним доменом, одной компанией и без виртуальных компаний.

Для конфигураций с больше чем одним доменом не тестировал.

Кто уже накатывал проект, то можете удалить форму zSysDatabaseLogSnapshot, вместо нее используется форма zSysDatabaseLogSnapshot2 (она включена в новые проекты).
Миниатюры
Нажмите на изображение для увеличения
Название: ИсторияВРазныхКомпаниях.JPG
Просмотров: 524
Размер:	86.2 Кб
ID:	7236  
Вложения
Тип файла: xpo zSnapshotForAx30.xpo (192.4 Кб, 510 просмотров)
Тип файла: xpo SharedProject_zSnapshotForAx2009.xpo (96.3 Кб, 549 просмотров)

Последний раз редактировалось Ace of Database; 21.10.2011 в 10:26.
Старый 21.10.2011, 10:47   #16  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
На время лучше выключить логирование запросов SQL для того пользователя, под которым работает эта утилита, иначе история засоряется.
Старый 28.10.2011, 12:16   #17  
johny77 is offline
johny77
Участник
 
31 / 27 (1) +++
Регистрация: 04.07.2006
В системе есть Профайлер кода для таких целей.
А добавление дополнительного поля в SysDatabaseLog считаю не лучшим вариантом, поскольку данное поле заполняется стеком вызова при любом пользователе.
Старый 01.11.2011, 12:34   #18  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Стек вызовов в таблице SysDatabaseLog почти каждый день смотрю. Часто приходится разбираться, какая обработка сделала ту или иную операцию. Поэтому то, что стек сохраняется для всех пользователей - как раз удобно в боевых условиях.
А чтобы журнал базы данных сильно не разрастался и не тормозил, у нас на SQL-сервере крутится джоб, который его периодически режет и отправляет старые данные в отдельную базу. На форме журнала базы данных выведена кнопка, которая по запросу восстанавливает историю обратно из архива в рабочую базу.

Последний раз редактировалось Ace of Database; 01.11.2011 в 12:37.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка при доступе к подключению к базе данных Ark DAX: Администрирование 11 01.06.2009 08:17
пользовательский запрос к базе данных Nikolaich DAX: Функционал 3 19.01.2009 17:20
Ошибка при присоединении к базе данных serg_ DAX: Администрирование 1 18.11.2008 11:36
Разрешение на доступ к базе данных nicko DAX: Администрирование 3 18.05.2004 18:49
Автоматическое отображение изменений данных Yuri Safronov DAX: Программирование 8 20.12.2002 12:08
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:38.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.