Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 4
0
        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");
        }