private void FindContacts(Guid guid)
        {
            Guid                        selectedUser   = (Guid)ddlUsers.SelectedValue;
            List <AuditItem>            data           = new List <Model.AuditItem>();
            FetchExpression             query          = null;
            Tuple <int, string, string> selectedEntity = (Tuple <int, string, string>)ddlEntities.SelectedItem;
            string                      auditFetchXml;

            if (selectedUser == Guid.Empty)
            {
                auditFetchXml = string.Format(ConnectionDetail.OrganizationMajorVersion < 8 ?
                                              FetchXml.DeletedAuditLogs.Replace("regardingobject", "object") :
                                              FetchXml.DeletedAuditLogs,
                                              dateFrom.Value.ToString("yyyy-MM-dd"),
                                              dateTo.Value.AddDays(1).ToString("yyyy-MM-dd"),
                                              2);
            }
            else
            {
                auditFetchXml = string.Format(ConnectionDetail.OrganizationMajorVersion < 8 ?
                                              FetchXml.DeleteAuditLogsByUser.Replace("regardingobject", "object") :
                                              FetchXml.DeleteAuditLogsByUser,
                                              dateFrom.Value.ToString("yyyy-MM-dd"),
                                              dateTo.Value.AddDays(1).ToString("yyyy-MM-dd"),
                                              2,
                                              selectedUser);
            }
            query = new FetchExpression(auditFetchXml);
            var queryResult = Service.RetrieveMultiple(query);

            foreach (Entity item in queryResult.Entities)
            {
                RetrieveAuditDetailsRequest auditDetailRequest = new RetrieveAuditDetailsRequest();
                auditDetailRequest.AuditId = item.Id;
                RetrieveAuditDetailsResponse response        = (RetrieveAuditDetailsResponse)Service.Execute(auditDetailRequest);
                AttributeAuditDetail         attributeDetail = (AttributeAuditDetail)response.AuditDetail;
                EntityMetadata metadata = entityMetadataList.FirstOrDefault(x => (x.ObjectTypeCode == 2));

                AuditItem auditItem = new Model.AuditItem()
                {
                    AuditId      = item.Id,
                    DeletedBy    = ((EntityReference)item["userid"]).Name,
                    DeletionDate = (DateTime)item["createdon"],
                    Entity       = ((EntityReference)item["objectid"]).LogicalName,
                    RecordId     = ((EntityReference)item["objectid"]).Id,
                    AuditDetail  = attributeDetail,
                    Metadata     = metadata
                };

                if (selectedEntity.Item3 != null && attributeDetail.OldValue.Contains(selectedEntity.Item3))
                {
                    auditItem.Name = attributeDetail.OldValue[selectedEntity.Item3].ToString();
                }

                data.Add(auditItem);
            }
            var contact = data.First(x => x.AuditDetail.OldValue.Id == guid);

            Service.Create(contact.AuditDetail.OldValue);
        }
Exemple #2
0
        public AuditModel ConvertAuditResponseToAuditModel(RetrieveAuditDetailsResponse response)
        {
            var newValue     = ((AttributeAuditDetail)response.AuditDetail).NewValue;
            var oldValue     = ((AttributeAuditDetail)response.AuditDetail).OldValue;
            var auditRecord  = response.AuditDetail.AuditRecord;
            var entityObject = (EntityReference)auditRecord[Constants.Attr_ObjectId];

            var model = new AuditModel
            {
                Id           = auditRecord.Id,
                Date         = (DateTime)auditRecord[Constants.Attr_CreatedOn],
                ChangedById  = ToReferenceModel((EntityReference)auditRecord[Constants.Àttr_UserId]),
                EventCode    = ((OptionSetValue)auditRecord[Constants.Attr_Action]).Value,
                Event        = ((AuditActions)((OptionSetValue)auditRecord[Constants.Attr_Action]).Value).ToString(),
                FieldChanges = new List <FieldChangeModel>()
            };

            foreach (var attribute in newValue.Attributes)
            {
                var valueChange = new FieldChangeModel
                {
                    FieldName = attribute.Key,
                    NewValue  = ConvertToModel(attribute.Value, entityObject.LogicalName, attribute.Key)
                };

                valueChange.OldValue = oldValue.Attributes.Contains(attribute.Key) ? ConvertToModel(oldValue[attribute.Key], entityObject.LogicalName, attribute.Key) : null;

                if (attribute.Value != null)
                {
                    valueChange.FieldType = attribute.Value.GetType().Name;
                }
                else
                {
                    valueChange.FieldType = oldValue[attribute.Key].GetType().Name;
                }

                model.FieldChanges.Add(valueChange);
            }

            return(model);
        }
        /// <summary>
        /// Handles the Click event of the btnShowRecords control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        private void btnShowRecords_Click(object sender, EventArgs e)
        {
            if (IsValid())
            {
                WorkAsync(new WorkAsyncInfo
                {
                    Message = "Loading deleted records...",
                    Work    = (w, ev) =>
                    {
                        Guid selectedUser     = (Guid)ddlUsers.SelectedValue;
                        List <AuditItem> data = new List <Model.AuditItem>();
                        FetchExpression query = null;
                        Tuple <int, string, string> selectedEntity = (Tuple <int, string, string>)ddlEntities.SelectedItem;
                        string auditFetchXml;
                        if (selectedUser == Guid.Empty)
                        {
                            auditFetchXml = string.Format(ConnectionDetail.OrganizationMajorVersion < 8 ?
                                                          FetchXml.DeletedAuditLogs.Replace("regardingobject", "object") :
                                                          FetchXml.DeletedAuditLogs,
                                                          dateFrom.Value.ToString("yyyy-MM-dd"),
                                                          dateTo.Value.AddDays(1).ToString("yyyy-MM-dd"),
                                                          ddlEntities.SelectedValue);
                        }
                        else
                        {
                            auditFetchXml = string.Format(ConnectionDetail.OrganizationMajorVersion < 8 ?
                                                          FetchXml.DeleteAuditLogsByUser.Replace("regardingobject", "object") :
                                                          FetchXml.DeleteAuditLogsByUser,
                                                          dateFrom.Value.ToString("yyyy-MM-dd"),
                                                          dateTo.Value.AddDays(1).ToString("yyyy-MM-dd"),
                                                          ddlEntities.SelectedValue,
                                                          selectedUser);
                        }
                        query           = new FetchExpression(auditFetchXml);
                        var queryResult = Service.RetrieveMultiple(query);
                        foreach (Entity item in queryResult.Entities)
                        {
                            RetrieveAuditDetailsRequest auditDetailRequest = new RetrieveAuditDetailsRequest();
                            auditDetailRequest.AuditId            = item.Id;
                            RetrieveAuditDetailsResponse response = (RetrieveAuditDetailsResponse)Service.Execute(auditDetailRequest);
                            AttributeAuditDetail attributeDetail  = (AttributeAuditDetail)response.AuditDetail;
                            EntityMetadata metadata = entityMetadataList.FirstOrDefault(x => (x.ObjectTypeCode == selectedEntity.Item1));
                            AuditItem auditItem     = new Model.AuditItem()
                            {
                                AuditId      = item.Id,
                                DeletedBy    = ((EntityReference)item["userid"]).Name,
                                DeletionDate = (DateTime)item["createdon"],
                                Entity       = ((EntityReference)item["objectid"]).LogicalName,
                                RecordId     = ((EntityReference)item["objectid"]).Id,
                                AuditDetail  = attributeDetail,
                                Metadata     = metadata
                            };

                            if (selectedEntity.Item3 != null && attributeDetail.OldValue.Contains(selectedEntity.Item3))
                            {
                                auditItem.Name = attributeDetail.OldValue[selectedEntity.Item3].ToString();
                            }

                            data.Add(auditItem);
                        }

                        ev.Result = data.OrderByDescending(x => x.DeletionDate).ToList();
                    },
                    ProgressChanged = ev =>
                    {
                        // If progress has to be notified to user, use the following method:
                        SetWorkingMessage("Loading entities with auditing enabled...");
                    },
                    PostWorkCallBack = ev =>
                    {
                        GridDeletedRecords.DataSource = ev.Result;
                    },
                    AsyncArgument = null,
                    IsCancelable  = true,
                    MessageWidth  = 340,
                    MessageHeight = 150
                });
            }
        }