コード例 #1
0
        public virtual void RecordDelete(IEntity entity)
        {
            if (!LogEventsAttribute.ShouldLog(entity.GetType()))
            {
                return;
            }

            var eventInfo = CreateApplicationEvent();

            if (eventInfo == null)
            {
                return;
            }

            eventInfo.ItemType = entity.GetType().FullName;
            eventInfo.ItemKey  = entity.GetId().ToString();
            eventInfo.Event    = "Delete";
            eventInfo.IP       = GetCurrentUserIP();
            eventInfo.UserId   = GetCurrentUserId(HttpContext.Current?.User);

            var changes = Database.GetProvider(entity.GetType()).GetUpdatedValues(entity, null);

            eventInfo.Data = ToChangeXml(changes);

            Save(eventInfo);
            ProcessContext <UndoContext> .Current.Perform(c => c.Append(eventInfo, entity));
        }
コード例 #2
0
        public virtual void RecordSave(IEntity entity, SaveMode saveMode)
        {
            if (!LogEventsAttribute.ShouldLog(entity.GetType()))
            {
                return;
            }

            var eventInfo = CreateApplicationEvent();

            if (eventInfo == null)
            {
                return;
            }

            eventInfo.ItemType = entity.GetType().FullName;
            eventInfo.ItemKey  = entity.GetId().ToString();
            eventInfo.Event    = saveMode.ToString();
            eventInfo.IP       = GetCurrentUserIP();
            eventInfo.UserId   = GetCurrentUserId(HttpContext.Current?.User);

            if (saveMode == SaveMode.Update)
            {
                var changes = GetChangesXml(entity);

                if (changes.IsEmpty())
                {
                    // No changes have happened, ignore recording the action:
                    return;
                }

                eventInfo.Data = changes;
            }
            else
            {
                if (!ShouldSkipInsertData)
                {
                    eventInfo.Data = GetDataXml(entity);
                }
            }

            if (OnRecordingSave != null)
            {
                var args = new AuditSaveEventArgs {
                    SaveMode = saveMode, ApplicationEvent = eventInfo, Entity = entity
                };
                OnRecordingSave?.Invoke(this, args);

                if (args.Cancel)
                {
                    return;
                }
            }

            Save(eventInfo);

            ProcessContext <UndoContext> .Current.Perform(c => c.Append(eventInfo, entity));
        }
コード例 #3
0
        public virtual void RecordDelete(IEntity entity)
        {
            if (!LogEventsAttribute.ShouldLog(entity.GetType()))
            {
                return;
            }

            var eventInfo = CreateApplicationEvent();

            if (eventInfo == null)
            {
                return;
            }

            eventInfo.ItemType = entity.GetType().FullName;
            eventInfo.ItemKey  = entity.GetId().ToString();
            eventInfo.Event    = "Delete";
            eventInfo.IP       = GetCurrentUserIP();
            eventInfo.UserId   = GetCurrentUserId(CurrentUser);

            var changes = Database.GetProvider(entity.GetType()).GetUpdatedValues(entity, null);

            eventInfo.Data = ToChangeXml(changes);

            if (OnRecordingDelete != null)
            {
                var args = new AuditDeleteEventArgs {
                    ApplicationEvent = eventInfo, Entity = entity
                };
                OnRecordingDelete?.Invoke(this, args);

                if (args.Cancel)
                {
                    return;
                }
            }

            Save(eventInfo);
            ProcessContext <UndoContext> .Current.Perform(c => c.Append(eventInfo, entity));
        }