public IEnumerable <DataModel.AuditLogModel> ToDwItems(IOrganizationService service, AuditDetail source, int langCode, IJobTime job) { List <DataModel.AuditLogModel> items = new List <DataModel.AuditLogModel>(); var audtLog = source; if (source.GetType() != typeof(AttributeAuditDetail)) { return(items); } var attr = (AttributeAuditDetail)source; Entity record = (Entity)source.AuditRecord; AuditLogModelBase baseEntity = new AuditLogModelBase(); var modified = attr.AuditRecord.GetAttributeValue <EntityReference>("userid"); baseEntity.EntityType = record.GetAttributeValue <EntityReference>("objectid").LogicalName; baseEntity.EntityTypeDesc = record.FormattedValues["objecttypecode"]; baseEntity.ChangeDateTime = attr.AuditRecord.GetAttributeValue <DateTime>("createdon"); baseEntity.ChangeType = record.FormattedValues["operation"]; baseEntity.CrmAuditId = audtLog.AuditRecord.Id; baseEntity.ModifiedByName = modified.Name; baseEntity.ModifiedByID = modified.Id; baseEntity.JobId = job.JobId; baseEntity.ModifiedOn = DateTime.UtcNow; AddToListItems(service, baseEntity.EntityType, langCode, source, items, baseEntity); return(items); }
public void RetreiveAndSet(IConfiguration config, IJobTime job, Imapping mapping, IDwService dw) { int?duplicates = null; var maxRecordsPerExcution = int.Parse(config.Get("MaxRecordsPerExcution").ToString()); var languageCode = int.Parse(config.Get("LanguageCode").ToString()); var untilDate = config.Get("UntilDate").ToString(); var isRemoveDuplicate = config.Get("IsRemoveDuplicate").ToString(); var last = DateTime.UtcNow; var first = job.RetrieveLastDateJob(config); if (!String.IsNullOrWhiteSpace(untilDate)) { last = DateTime.ParseExact(untilDate, "yyyy-MM-dd", null); } int pageNumber = 1; int crmLogsItemsCount = 0; int fieldsChangeCount = 0; List <AuditLogModel> audtLogs; bool moreRecords = true; do { audtLogs = new List <AuditLogModel>(); audtLogs.Clear(); var rmr = new RetrieveMultipleRequest(); var resp = new RetrieveMultipleResponse(); QueryExpression query = new QueryExpression() { EntityName = "audit", ColumnSet = new ColumnSet(true), Criteria = new FilterExpression { FilterOperator = LogicalOperator.And, Conditions = { new ConditionExpression { AttributeName = "createdon", Operator = ConditionOperator.Between, Values = { first, last } //access } }, }, Orders = { new OrderExpression { AttributeName = "createdon", OrderType = OrderType.Ascending } } }; query.PageInfo = new PagingInfo { PageNumber = pageNumber, Count = maxRecordsPerExcution }; rmr.Query = query; resp = (RetrieveMultipleResponse)_service.Execute(rmr); foreach (Entity entiyAuditLog in resp.EntityCollection.Entities) { crmLogsItemsCount++; Console.WriteLine(entiyAuditLog.Id); // Retrieve the audit details and display them. var auditDetailsRequest = new RetrieveAuditDetailsRequest { AuditId = entiyAuditLog.Id }; var auditDetailsResponse = (RetrieveAuditDetailsResponse)_service.Execute(auditDetailsRequest); var changes = mapping.ToDwItems(_service, auditDetailsResponse.AuditDetail, languageCode, job); if (changes.Any()) { audtLogs.AddRange(changes); fieldsChangeCount += changes.Count(); } } moreRecords = resp.EntityCollection.MoreRecords; if (moreRecords) { pageNumber++; } dw.BulkAdd(audtLogs); }while (moreRecords); if (isRemoveDuplicate == "1") { try { duplicates = dw.RemoveDuplicate(); } catch (Exception e) { _log("WARNING:can not remove duplicate see log"); _log(e.ToString()); } } job.UpdateEndDateOnComplete(fieldsChangeCount, crmLogsItemsCount, duplicates, last); }