public void WriteData(IConnection connection, IDatabaseInterface databaseInterface, IDatastore dataObject, ReportProgressMethod reportProgress) { this.reportProgress = reportProgress; reportProgress(new SimpleProgressReport("Connection to crm")); CrmConnection crmConnection = (CrmConnection)connection.GetConnection(); this.service = new OrganizationService(crmConnection); this.dataObject = dataObject; reportProgress(new SimpleProgressReport("Load required metadata from crm")); entity1Metadata = Crm2013Wrapper.Crm2013Wrapper.GetEntityMetadata(this.service, this.Configuration.Entity1Name); entity2Metadata = Crm2013Wrapper.Crm2013Wrapper.GetEntityMetadata(this.service, this.Configuration.Entity2Name.Split(';')[0]); relationshipMetadata = Crm2013Wrapper.Crm2013Wrapper.GetRelationshipMetadata(this.service, this.Configuration.Entity2Name.Split(';')[1]) as ManyToManyRelationshipMetadata; reportProgress(new SimpleProgressReport("Cache keys of existing " + entity1Metadata.LogicalName + "-records")); var entity1Resolver = new JoinResolver(this.service, entity1Metadata, this.Configuration.Entity1Mapping); this.existingEntities1 = entity1Resolver.BuildMassResolverIndex(); reportProgress(new SimpleProgressReport("Cache keys of existing " + entity2Metadata.LogicalName + "-records")); var entity2Resolver = new JoinResolver(this.service, entity2Metadata, this.Configuration.Entity2Mapping); this.existingEntities2 = entity2Resolver.BuildMassResolverIndex(); RelateEntities(); }
public void WriteData(IConnection connection, IDatabaseInterface databaseInterface, IDatastore dataObject, ReportProgressMethod reportProgress) { this.reportProgress = reportProgress; reportProgress(new SimpleProgressReport("Connection to crm")); this.service = connection.GetConnection() as IOrganizationService; this.dataObject = dataObject; reportProgress(new SimpleProgressReport("Load marketinglist metadata")); this.listEntityMetaData = Crm2013Wrapper.Crm2013Wrapper.GetEntityMetadata(service, "list"); reportProgress(new SimpleProgressReport("Resolve existing marketinglists")); JoinResolver listResolver = new JoinResolver(this.service, listEntityMetaData, this.Configuration.ListMapping); this.existingLists = listResolver.BuildMassResolverIndex(); reportProgress(new SimpleProgressReport("Load members metadata")); EntityMetadata memberEntityMetaData = Crm2013Wrapper.Crm2013Wrapper.GetEntityMetadata(service, this.Configuration.ListMemberType.ToString().ToLower()); reportProgress(new SimpleProgressReport("Resolve listmembers")); JoinResolver memberResolver = new JoinResolver(this.service, memberEntityMetaData, this.Configuration.ListMemberMapping); this.existingMembers = memberResolver.BuildMassResolverIndex(); switch (this.Configuration.JoinList) { case MarketinglistJoinType.Manual: DoManualMarketingList(); break; case MarketinglistJoinType.Join: DoJoinMarketingLists(); break; } }
public void WriteData(IConnection connection, IDatabaseInterface databaseInterface, IDatastore dataObject, ReportProgressMethod reportProgress) { reportProgress(new SimpleProgressReport("Building logging database")); this.logger = new Logger(databaseInterface); this.logger.InitializeDatabase(); reportProgress(new SimpleProgressReport("Connection to crm")); CrmConnection crmConnection = (CrmConnection)connection.GetConnection(); this.service = new OrganizationService(crmConnection); this.dataObject = dataObject; reportProgress(new SimpleProgressReport("Load " + this.Configuration.EntityName + " metadata")); this.entityMetaData = Crm2013Wrapper.Crm2013Wrapper.GetEntityMetadata(service, this.Configuration.EntityName); reportProgress(new SimpleProgressReport("Resolve existing entityrecords")); JoinResolver entityResolver = new JoinResolver(this.service, entityMetaData, this.Configuration.DeleteMapping); this.existingEntityRecords = entityResolver.BuildMassResolverIndex(); for (int i = 0; i < this.dataObject.Count; i++) { string joinKey = JoinResolver.BuildExistingCheckKey(this.dataObject[i], this.Configuration.DeleteMapping, this.dataObject.Metadata); if (existingEntityRecords.ContainsKey(joinKey)) { var existingRecordIds = existingEntityRecords[joinKey]; if (existingRecordIds.Length == 1 || this.Configuration.MultipleFoundMode == DeleteInCrmMultipleFoundMode.DeleteAll) { string entityIds = string.Empty; string deletionFaults = string.Empty; foreach (Guid entityId in existingRecordIds) { entityIds += entityId.ToString() + ","; try { Crm2013Wrapper.Crm2013Wrapper.DeleteRecordInCrm(this.service, this.Configuration.EntityName, entityId); } catch (FaultException <OrganizationServiceFault> ex) { deletionFaults += ex.Detail.Message + "\n"; } } entityIds = entityIds.TrimEnd(','); logger.AddRecord(i, joinKey, entityIds, deletionFaults); } else { // TODO Log that multiplerecords were found but none deleted } } else { // TODO Log that no record was found to delete } } }
public void WriteData(IConnection connection, IDatabaseInterface databaseInterface, IDatastore dataObject, ReportProgressMethod reportProgress) { reportProgress(new SimpleProgressReport("Building logging database")); this.logger = new Logger(databaseInterface); this.logger.InitializeDatabase(); reportProgress(new SimpleProgressReport("Connection to crm")); CrmConnection crmConnection = (CrmConnection)connection.GetConnection(); service = new OrganizationService(crmConnection); reportProgress(new SimpleProgressReport("Loading Entitymetadata")); EntityMetadata entityMetaData = Crm2013Wrapper.Crm2013Wrapper.GetEntityMetadata(service, this.Configuration.EntityName); Dictionary <string, AttributeMetadata> primaryKeyAttributeMetadataDictionary = new Dictionary <string, AttributeMetadata>(); foreach (string primaryKey in this.Configuration.PrimaryKeyAttributes) { AttributeMetadata attributeMetadata = entityMetaData.Attributes.Where(t => t.LogicalName == primaryKey).FirstOrDefault(); primaryKeyAttributeMetadataDictionary.Add(primaryKey, attributeMetadata); } reportProgress(new SimpleProgressReport("Mapping attributes of records")); EntityMapper entityMapper = new EntityMapper(entityMetaData, dataObject.Metadata, this.Configuration.Mapping, this.Configuration.PicklistMapping); Entity[] entities = new Entity[dataObject.Count]; for (int i = 0; i < dataObject.Count; i++) { object[] data = dataObject[i]; Entity entity = new Entity(this.Configuration.EntityName); entityMapper.MapAttributes(entity, data); entities[i] = entity; logger.AddRecord(i); if (StatusHelper.MustShowProgress(i, dataObject.Count) == true) { reportProgress(new SimpleProgressReport("Mapped " + (i + 1) + " of " + dataObject.Count + " records")); } } reportProgress(new SimpleProgressReport("Resolving relationship entities")); foreach (var relationMapping in Configuration.RelationMapping) { reportProgress(new SimpleProgressReport("Resolving relationship - load metadata for entity " + relationMapping.EntityName)); EntityMetadata relationEntityMetadata = Crm2013Wrapper.Crm2013Wrapper.GetEntityMetadata(service, relationMapping.EntityName); reportProgress(new SimpleProgressReport("Resolving relationship - load related records")); JoinResolver relationResolver = new JoinResolver(service, relationEntityMetadata, relationMapping.Mapping); Dictionary <string, Guid[]> relatedEntities = relationResolver.BuildMassResolverIndex(); reportProgress(new SimpleProgressReport("Resolving relationship - set relations")); RelationSetter relationSetter = new RelationSetter(relationEntityMetadata, relationMapping.Mapping); relationSetter.SetRelation(relationMapping.LogicalName, entities, dataObject, relatedEntities); } reportProgress(new SimpleProgressReport("Resolving primarykeys of records")); PrimaryKeyResolver primaryKeyResolver = new PrimaryKeyResolver(service, entityMetaData, primaryKeyAttributeMetadataDictionary); Dictionary <string, Guid[]> resolvedEntities = primaryKeyResolver.OneByOneResolver(entities); reportProgress(new SimpleProgressReport("Writing records to crm")); WriteEntity(entities, resolvedEntities, primaryKeyAttributeMetadataDictionary, reportProgress); }