|
|
#1 |
|
Участник
|
Таблица Аудита в БД
День добрый.
Необходимо разработать отчет в 2011 с отслеживанием изменения одного поля объекта. Пытаюсь в БД найти таблицу аудита, но все концы ведут к AuditBase. Из этой таблицы невозможно вытащить наименование поля, какие изменения были сделаны (до/после), юрера изменяющего (только id). Возможно есть другая таблица или какое-нить решение? |
|
|
|
|
#2 |
|
Консультант-джедай
|
ооооо таблица аудита это еще та жжжжжжжж
я тоже писал отчет по аудиту в итоге получился километровый SQL запрос который парсит эту таблицу (инфа в ней хранится в ненормализованном виде - сделано для увеличения производительности)
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога
|
|
|
|
| За это сообщение автора поблагодарили: a33ik (0). | |
|
|
#3 |
|
Участник
|
На форуме ms есть наплохой пост на эту тему:
http://social.microsoft.com/Forums/e...-9ca56a0c5aab/ Там все расписано, далее уже можно самостоятельно разобраться. |
|
|
|
| За это сообщение автора поблагодарили: a33ik (1). | |
|
|
#4 |
|
Чайный пьяница
|
Добрый день. Сел посмотрел как в 2011 организован аудит - заикал, попил воды и написал следующий запрос, который демонстрирует как можно работать с аудитными данными. Возможно натолкнёт вас на мысль как вам удобнее сделать ваш отчёт:
Код: Declare @attributes VarChar(Max), @values VarChar(Max), @ObjectTypeCode int, @LogDateTime DateTime, @RecordId uniqueidentifier, @UserId Uniqueidentifier, @ActionId int
Declare @Result Table(AttributeId int, Value VarChar(Max), ObjectTypeCode int, LogDateTime DateTime, RecordId uniqueidentifier, UserId uniqueidentifier, ActionId int)
Declare @CurrentAttribute VarChar(max), @CurrentValue VarChar(Max)
DECLARE DataAuditCursor CURSOR FOR
Select
Case When IsNull(a.AttributeMask, '') = '' Then '' Else Substring(a.AttributeMask, 2, Len(a.AttributeMask) - 2) End
,a.ChangeData
,a.ObjectTypeCode
,a.CreatedOn
,a.ObjectId
,a.UserId
,a.[Action]
From Audit a
OPEN DataAuditCursor
FETCH NEXT FROM DataAuditCursor
INTO @attributes, @values, @ObjectTypeCode, @LogDateTime, @RecordId, @UserId, @ActionId
WHILE @@FETCH_STATUS = 0
BEGIN
WHILE CHARINDEX(',',@attributes,0) <> 0
BEGIN
SELECT
@CurrentAttribute=RTRIM(LTRIM(SUBSTRING(@attributes,1,CHARINDEX(',',@attributes,0)-1))),
@attributes=RTRIM(LTRIM(SUBSTRING(@attributes,CHARINDEX(',',@attributes,0)+1,LEN(@attributes)))),
@CurrentValue=RTRIM(LTRIM(SUBSTRING(@values,1,CHARINDEX('~',@values,0)-1))),
@values=RTRIM(LTRIM(SUBSTRING(@values,CHARINDEX('~',@values,0)+1,LEN(@values))))
IF LEN(@CurrentAttribute) > 0
INSERT INTO @Result Values(CAST(@CurrentAttribute as int), @CurrentValue, @ObjectTypeCode, @LogDateTime, @RecordId, @UserId, @ActionId)
END
INSERT INTO @Result Values((Case When IsNull(@attributes, '') = '' Then Null Else CAST(@attributes as int) End), @values, @ObjectTypeCode, @LogDateTime, @RecordId, @UserId, @ActionId)
FETCH NEXT FROM DataAuditCursor
INTO @attributes, @values, @ObjectTypeCode, @LogDateTime, @RecordId, @UserId, @ActionId
END
CLOSE DataAuditCursor;
DEALLOCATE DataAuditCursor;
Select
(Select Top 1 Name From MetadataSchema.Entity e Where r.ObjectTypeCode = e.ObjectTypeCode) EntityName
,(Select Top 1 a.Name From MetadataSchema.Attribute a
Inner Join MetadataSchema.Entity e On a.EntityId = e.EntityId and a.ColumnNumber = r.AttributeId and e.ObjectTypeCode = r.ObjectTypeCode) AttributeName
,u.fullname UserName
,r.Value OldFieldValue
,r.RecordId ModifiedRecordId
From @Result r
Left Join FilteredSystemUser u On r.UserId = u.systemuserid
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
|
| За это сообщение автора поблагодарили: Bondonello (3). | |
|
|
#5 |
|
Moderator
|
Коллеги, сейчас нет доступа к системе. Догадки следующие:
1. Не могли бы вы глянуть в базу, возможно для вычисления всей этой жести есть готовые встроенные функции или процедуры? 2. Еще я бы попытался посмотреть профайлером, что запрашивает система при переходе на вкладку аудита - возможно это тоже как-то прояснит обрабатываются ли данные в SQL или уже в коде сервера. 3. Не обязательно использовать SQL, возможно это как раз тот случай, когда в отчете стоит обратиться к веб сервисам. В новой версии SSRS можно смешивать данные из разных датасетов, так что, думаю можно пойти и этим путем.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() MS Certified Dirty Magic Professional
|
|
|
|
|
#6 |
|
Чайный пьяница
|
Цитата:
Сообщение от Артем Enot Грунин
1. Не могли бы вы глянуть в базу, возможно для вычисления всей этой жести есть готовые встроенные функции или процедуры?
2. Еще я бы попытался посмотреть профайлером, что запрашивает система при переходе на вкладку аудита - возможно это тоже как-то прояснит обрабатываются ли данные в SQL или уже в коде сервера. Теоретически - можно, но с деплойментом этой красоты - намучаешься. Пробовал в одном проекте...
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
|
|
#7 |
|
Moderator
|
Таки в чем проблема? Адрес приложения запарсить?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() MS Certified Dirty Magic Professional
|
|
|
|
|
#8 |
|
Чайный пьяница
|
Сегодня расскажу за рюмкой чая )
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
| Теги |
| audit, аудит, отчет, report, crm2011 |
|
|
Похожие темы
|
||||
| Тема | Ответов | |||
| Сохранение параметров расширенного поиска в БД | 10 | |||
| Таблица зависимостей привелегий | 9 | |||
| Выбор записи из БД | 4 | |||
| Где в БД храняться настройки объектов? | 9 | |||
| Установка тестовой БД | 5 | |||
|