Beispiel #1
0
        private void GetEntryValueInString(ObjectStateEntry entry, bool isOrginal, ref DocumentAudit auditEntity)
        {
            PropertyInfo[] entityProperties = auditEntity.GetType().GetProperties().Where(p => p.PropertyType != typeof(EntityCollection <>) &&
                                                                                          p.PropertyType != typeof(EntityState) &&
                                                                                          p.PropertyType != typeof(EntityKey) &&
                                                                                          p.PropertyType != typeof(EntityObject) &&
                                                                                          p.PropertyType != typeof(EntityReference) &&
                                                                                          p.PropertyType.FullName != "System.Object").ToArray();

            foreach (string propName in entry.GetModifiedProperties())
            {
                if (propName == "Id")
                {
                    continue;
                }

                // object setterValue = null;
                var prop = entityProperties.FirstOrDefault(p => p.Name.ToLower() == propName.ToLower());
                if (prop != null)
                {
                    var currentValue = entry.CurrentValues[propName];
                    var orignalValue = auditEntity.GetType().GetProperty(propName).GetValue(auditEntity, null); //.OriginalValues[propName];
                    if (!object.ReferenceEquals(currentValue, orignalValue))                                    //currentValue.Equals(orignalValue))
                    {
                        if (currentValue == DBNull.Value)
                        {
                            currentValue = null;
                        }
                        PropertyInfo propInfo = auditEntity.GetType().GetProperty(propName);
                        propInfo.SetValue(auditEntity, currentValue, null);
                    }
                }
            }//end foreach
        }
Beispiel #2
0
        //partial void OnContextCreated()
        //{
        //    ((IObjectContextAdapter)this).ObjectContext.SavingChanges += new EventHandler(SCMSEntities_SavingChanges);
        //}

        void SCMSEntities_SavingChanges(object sender, EventArgs e)
        {
            IEnumerable <ObjectStateEntry> changes = ((IObjectContextAdapter)this).ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Deleted | EntityState.Modified);

            foreach (ObjectStateEntry stateEntryEntity in changes)
            {
                if (!this.EntityIsAuditable((EntityObject)stateEntryEntity.Entity))
                {
                    continue;
                }
                if (stateEntryEntity.State == EntityState.Modified | stateEntryEntity.State == EntityState.Deleted)
                {
                    Guid auditId = new Guid(GetEntryValueInString(stateEntryEntity, stateEntryEntity.State == EntityState.Modified ? false : true, "Id"));
                    if (this.DocumentAudits.FirstOrDefault(p => p.DocumentId == auditId) == null)
                    {
                        continue;
                    }
                }
                if (!stateEntryEntity.IsRelationship &&
                    stateEntryEntity.Entity != null &&
                    !(stateEntryEntity.Entity is DocumentAudit))
                {//is a normal entry, not a relationship
                    DocumentAudit audit = this.AuditTrailFactory(stateEntryEntity, UserName);
                    //DBAudit audit = this.AuditTrailFactory(stateEntryEntity, UserName);
                    switch (stateEntryEntity.State)
                    {
                    case EntityState.Added:
                        //auditTrailList.Add(audit);
                        this.DocumentAudits.Add(audit);
                        break;

                    case EntityState.Deleted:
                        this.DocumentAudits.Remove(audit);
                        break;

                    case EntityState.Detached:
                        break;

                    case EntityState.Modified:
                        ((IObjectContextAdapter)this).ObjectContext.ObjectStateManager.ChangeObjectState(audit, System.Data.EntityState.Modified);
                        break;

                    case EntityState.Unchanged:
                        break;

                    default:
                        break;
                    }
                }
            }

            //if (auditTrailList.Count > 0)
            //{
            //    foreach (var audit in auditTrailList)
            //    {//add all audits
            //        this.AddToDocumentAudits(audit);
            //        //this.AddToDBAudits(audit);
            //    }
            //}
        }
Beispiel #3
0
        private DocumentAudit AuditTrailFactory(ObjectStateEntry entry, string UserName)
        {
            DocumentAudit auditEntity;
            string        countprog, authorizedBy, authorizedOn, IsApproved, IsVerified,
                          AprovedOn, IsAuthorized, IsRejected, IsReviewed, IsSubmited,
                          PreparedBy, PreparedOn, ReviewedBy, ReviewedOn, VerifiedBy, ApprovedBy, ApprovedOn;

            //DBAudit audit = new DBAudit();
            if (entry.State == EntityState.Added)
            {//entry is Added
                GetProperyValue(entry, out countprog, out authorizedBy, out authorizedOn, out IsApproved,
                                out IsVerified, out AprovedOn, out IsAuthorized, out IsRejected, out IsReviewed, out IsSubmited,
                                out PreparedBy, out PreparedOn, out ReviewedBy, out ReviewedOn, out ApprovedBy, out ApprovedOn, out VerifiedBy);

                auditEntity = new DocumentAudit();
                auditEntity.CountryProgrammeId = countprog.Equals(string.Empty) ? Guid.Empty : new Guid(countprog);
                auditEntity.Id           = Guid.NewGuid();
                auditEntity.IssueDate    = DateTime.Now;
                auditEntity.DocumentId   = new Guid(GetEntryValueInString(entry, false, "Id"));
                auditEntity.PreparedBy   = PreparedBy == string.Empty ? (Guid?)null : new Guid(PreparedBy);
                auditEntity.ApprovedBy   = ApprovedBy == string.Empty ? (Guid?)null : new Guid(ApprovedBy);
                auditEntity.PreparedOn   = PreparedOn == string.Empty ? (DateTime?)null : DateTime.Parse(PreparedOn);
                auditEntity.DocumentType = entry.EntitySet.Name;
                auditEntity.AuthorizedBy = authorizedBy == string.Empty ? (Guid?)null : new Guid(authorizedBy);
                auditEntity.AuthorizedOn = authorizedOn == string.Empty ? (DateTime?)null : DateTime.Parse(authorizedOn);
                auditEntity.IsApproved   = IsApproved == string.Empty ? (bool?)null : bool.Parse(IsApproved);
                auditEntity.IsAprovedOn  = AprovedOn == string.Empty ? (DateTime?)null : DateTime.Parse(AprovedOn);
                auditEntity.IsAuthorized = IsAuthorized == string.Empty ? (bool?)null : bool.Parse(IsAuthorized);
                auditEntity.IsRejected   = IsRejected == string.Empty ? (bool?)null : bool.Parse(IsRejected);
                auditEntity.IsReviewed   = IsReviewed == string.Empty ? (bool?)null : bool.Parse(IsReviewed);
                auditEntity.IsSubmitted  = IsSubmited == string.Empty ? (bool?)null : bool.Parse(IsSubmited);
                auditEntity.ReviewedBy   = ReviewedBy == string.Empty ? (Guid?)null : new Guid(ReviewedBy);
                auditEntity.ReviewedOn   = ReviewedOn == string.Empty ? (DateTime?)null : DateTime.Parse(ReviewedOn);
                auditEntity.IsVerified   = IsVerified == string.Empty ? (bool?)null : bool.Parse(IsVerified);
                auditEntity.VerifiedBy   = VerifiedBy == string.Empty ? (Guid?)null : new Guid(VerifiedBy);
            }
            else if (entry.State == EntityState.Deleted)
            {//entry in deleted
                auditEntity = new DocumentAudit();
                Guid auditId = new Guid(GetEntryValueInString(entry, true, "Id"));
                auditEntity = this.DocumentAudits.FirstOrDefault(p => p.DocumentId == auditId);
            }
            else
            {//entry is modified
                auditEntity = new DocumentAudit();
                Guid auditId = new Guid(GetEntryValueInString(entry, false, "Id"));
                auditEntity = this.DocumentAudits.FirstOrDefault(p => p.DocumentId == auditId);
                GetEntryValueInString(entry, false, ref auditEntity);
            }

            return(auditEntity);// audit;
        }