private CrmExportedDataStore ReadCrmExportedDataStore(int batchNo) { CrmExportedDataStore exportedStore = null; var batchFile = GetFileNameForBatchNo(batchNo); if (!string.IsNullOrWhiteSpace(batchFile)) { logger.LogVerbose($"DataFileStoreReader ReadCrmExportedDataStore started, file:{batchFile}, batchNo:{batchNo}"); if (!File.Exists(batchFile)) { logger.LogInfo("File does not exist, finishing processing:" + batchFile); return(null); } using (FileStream stream = File.OpenRead(batchFile)) { exportedStore = JsonHelper.Deserialize <CrmExportedDataStore>(stream); } logger.LogVerbose($"DataFileStoreReader ReadCrmExportedDataStore finished, loaded {exportedStore.RecordsCount} records"); } return(exportedStore); }
public void CrmExportedDataStore() { CrmExportedDataStore systemUnderTest = null; FluentActions.Invoking(() => systemUnderTest = new CrmExportedDataStore()) .Should() .NotThrow(); Assert.IsTrue(systemUnderTest.ExportedEntities.Count == 0); Assert.IsTrue(systemUnderTest.RecordsCount == 0); }
private List <string> GetHeader(CrmExportedDataStore store) { store.ThrowArgumentNullExceptionIfNull(nameof(store)); var ent = store.ExportedEntities.FirstOrDefault(); List <string> header = new List <string>(); if (!ent.IsManyToMany) { CrmEntity entity = schemaConfig.Entities.FirstOrDefault(p => p.Name == ent.LogicalName); var fields = entity.CrmFields.Where(p => p.FieldName != entity.PrimaryIdField).Select(p => p.FieldName).ToList(); AddFieldWithCheck(header, entity.PrimaryIdField); if (fields != null) { foreach (var field in fields) { AddFieldWithCheck(header, field); } } } else { CrmEntity entity = schemaConfig.Entities .First(r => r.CrmRelationships.Select(a => a.RelatedEntityName == ent.LogicalName).Any()); CrmRelationship rel = entity.CrmRelationships.FirstOrDefault(a => a.RelatedEntityName == ent.LogicalName); AddFieldWithCheck(header, $"{rel.RelationshipName}id"); AddFieldWithCheck(header, entity.PrimaryIdField); AddFieldWithCheck(header, rel.TargetEntityPrimaryKey); } foreach (var item in store.ExportedEntities) { var mapAtr = item.Attributes.Where(p => p.AttributeType == "Microsoft.Xrm.Sdk.AliasedValue" && !header.Contains(p.AttributeName)).Select(p => p.AttributeName).ToList(); foreach (var field in mapAtr) { AddFieldWithCheck(header, field); } } return(header); }
public void SaveBatchDataToStore(List <EntityWrapper> entities) { entities.ThrowArgumentNullExceptionIfNull(nameof(entities)); currentBatchNo++; logger.LogVerbose($"DataFileStoreWriter SaveBatchDataToStore started, records:{entities.Count}, batchNo:{currentBatchNo}"); var entitiesToExport = entities.Select(e => new CrmEntityStore(e)).ToList(); if (excludedFields != null && excludedFields.Any()) { foreach (var item in entitiesToExport) { item.Attributes.RemoveAll(p => excludedFields.Contains(p.AttributeName)); } } RemoveEntityReferenceNameProperty(entitiesToExport); var exportedStore = new CrmExportedDataStore { RecordsCount = entitiesToExport.Count, }; exportedStore.ExportedEntities.AddRange(entitiesToExport); var batchFile = GetFileNameForBatchNo(currentBatchNo, entities[0].LogicalName); if (File.Exists(batchFile)) { throw new ConfigurationException($"Store File {batchFile} already exists, clean the store folder first"); } using (FileStream stream = File.OpenWrite(batchFile)) { JsonHelper.Serialize(exportedStore, stream); } logger.LogVerbose("DataFileStoreWriter SaveBatchDataToStore finished"); }
public void SaveBatchDataToStore(List <EntityWrapper> entities) { entities.ThrowArgumentNullExceptionIfNull(nameof(entities)); currentBatchNo++; logger.LogVerbose($"DataFileStoreWriterCsv SaveBatchDataToStore started, records:{entities.Count}, batchNo:{currentBatchNo}"); var entitiesToExport = entities.Select(e => new CrmEntityStore(e)).ToList(); var exportedStore = new CrmExportedDataStore { RecordsCount = entitiesToExport.Count, }; exportedStore.ExportedEntities.AddRange(entitiesToExport); var batchFile = GetFileNameForBatchNo(currentBatchNo, entities[0].LogicalName); if (File.Exists(batchFile)) { throw new ConfigurationException($"Store File {batchFile} already exists, clean the store folder first"); } List <string> tempCsvFile = new List <string>(); var header = GetHeader(exportedStore); tempCsvFile.Add(CreateCsvHeader(header)); foreach (CrmEntityStore item in exportedStore.ExportedEntities) { tempCsvFile.Add(CreateCsvLine(item, header)); } File.WriteAllLines(batchFile, tempCsvFile.ToArray()); logger.LogVerbose("DataFileStoreWriterCsv SaveBatchDataToStore finished"); }