public void Export(string entityLogicalName) { Log.Debug($"Exporting data {entityLogicalName}"); var strategy = entityStrategyFactory.Create(entityLogicalName); var data = crmService.GetEntities(strategy.QueryExpressionForEntitiesList); var jsonContent = data.Select(new EntityAndJsonConverter(strategy).ToJson).ToList(); fileService.WriteData(entityLogicalName, jsonContent); Log.Debug($"Finished data {entityLogicalName}"); }
public void Import(CrmCommandsQueue requestsQueue, string entityLogicalName) { Log.Debug($"Importing {entityLogicalName}"); var strategy = entityStrategyFactory.Create(entityLogicalName); var converter = new EntityAndJsonConverter(strategy); var dataFileContent = fileService.ReadData(entityLogicalName); var jsonEntities = dataFileContent.Select(converter.ToEntity).ToList(); var crmEntities = crmService.GetEntities(strategy.QueryExpressionForEntitiesList); var equalityColumn = strategy.EqualityColumn; foreach (var dataEntity in jsonEntities) { var currentDataEntity = crmEntities.FirstOrDefault(x => Equals(x[equalityColumn], dataEntity[equalityColumn])); var diff = new Dictionary <string, object>(); foreach (var key in dataEntity.Attributes.Keys) { var dataAttribute = dataEntity[key]; object currentAttribute = null; if (currentDataEntity?.Contains(key) == true) { currentAttribute = currentDataEntity[key]; } if (!Equals(currentAttribute, dataAttribute)) { diff[key] = dataAttribute; } } if (diff.Any()) { strategy.OnUpsertEntityRecord(requestsQueue, currentDataEntity, dataEntity, diff); } } var excessRows = crmEntities.Where(x => !jsonEntities.Any(y => Equals(x[equalityColumn], y[equalityColumn]))).ToList(); foreach (var excessRow in excessRows) { strategy.OnDeleteEntityRecord(requestsQueue, excessRow); } Log.Debug($"Finished importing {entityLogicalName}"); }