private void UpdateEntity(IOrganizationService service, Entity entity, string entityKey, int recordNumber, EntityReference ownerid, OptionSetValue statecode, OptionSetValue statuscode, Dictionary <string, ResolvedEntity[]> resolvedEntities) { if (!Constants.UpdateModes.Contains(Configuration.ImportMode)) { return; } bool validForUpdate = resolvedEntities[entityKey].Length == 1 || (resolvedEntities[entityKey].Length > 1 && Configuration.MultipleFoundMode == MultipleFoundMode.All); if (!validForUpdate) { return; } for (int i = 0; i < resolvedEntities[entityKey].Length; i++) { var resolvedEntity = resolvedEntities[entityKey][i].Value; entityUpdateHandler.BuildEntityForUpdate(entity, resolvedEntity, Configuration.ImportMode); try { if (entity.Attributes.Count > 0) { service.Update(entity); foreach (var attribute in entity.Attributes) { resolvedEntity.Attributes.Add(attribute.Key, attribute.Value); } } else { // Can optionally implement - log that an empty was not updated because it was equal } } catch (FaultException <OrganizationServiceFault> ex) { logger.SetWriteFault(recordNumber, ex.Detail.Message); } var resolvedEntityOwnerId = resolvedEntity.Contains("ownerid") ? (EntityReference)resolvedEntity["ownerid"] : null; bool ownerMustBeSet = EntityUpdateHandler.OwnerMustBeSet(ownerid, resolvedEntityOwnerId, Configuration.SetOwnerMode); if (ownerMustBeSet) { service.SetOwnerOfEntity(entity.LogicalName, entity.Id, ownerid.LogicalName, ownerid.Id); resolvedEntity.Attributes.Add("ownerid", ownerid); } var resolvedEntityStatuscode = resolvedEntity.Contains("statuscode") ? (OptionSetValue)resolvedEntity["statuscode"] : null; bool statusMustBeSet = EntityUpdateHandler.StatusMustBeSet(statuscode, resolvedEntityStatuscode, Configuration.SetStateMode); if (statusMustBeSet) { service.SetStateOfEntity(entity.LogicalName, entity.Id, statecode, statuscode); resolvedEntity.Attributes.Add("statecode", statecode); resolvedEntity.Attributes.Add("statuscode", statuscode); } } }
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")); this.service = connection.GetConnection() as IOrganizationService; reportProgress(new SimpleProgressReport("Loading Entitymetadata")); var entityMetaData = Crm2013Wrapper.Crm2013Wrapper.GetEntityMetadata(service, this.Configuration.EntityName); var 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); } attributeMetadataDictionary = entityMetaData.GetAttributeMetadata(); reportProgress(new SimpleProgressReport("Initialize service-objects")); var entityMapper = new EntityMapper(attributeMetadataDictionary, dataObject.Metadata, Configuration.Mapping, Configuration.PicklistMapping); var entityAttributeComparer = new EntityAttributeComparer(attributeMetadataDictionary); entityUpdateHandler = new EntityUpdateHandler(entityAttributeComparer); reportProgress(new SimpleProgressReport("Mapping attributes of records")); 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")); var primaryKeyResolver = new PrimaryKeyResolver(service, entityMetaData, primaryKeyAttributeMetadataDictionary); var resolvedEntities = primaryKeyResolver.BatchResolver(entities, Configuration.GetAllMappedAttributes(), Configuration.BatchSizeResolving); reportProgress(new SimpleProgressReport("Writing records to crm")); WriteEntity(entities, resolvedEntities, primaryKeyAttributeMetadataDictionary, reportProgress); }
public void Test_EntityUpdateHandler_SetStateMode() { var value3 = new OptionSetValue(3); var value4 = new OptionSetValue(4); bool test1 = EntityUpdateHandler.StatusMustBeSet(null, value3, ImportMode.All); Assert.IsFalse(test1); bool test2 = EntityUpdateHandler.StatusMustBeSet(value3, value3, ImportMode.Create); Assert.IsFalse(test2); bool test3 = EntityUpdateHandler.StatusMustBeSet(value3, value3, ImportMode.UpdateChangedValuesOnly); Assert.IsFalse(test3); bool test4 = EntityUpdateHandler.StatusMustBeSet(value3, value3, ImportMode.AllChangedValuesOnly); Assert.IsFalse(test4); bool test5 = EntityUpdateHandler.StatusMustBeSet(value4, value3, ImportMode.UpdateChangedValuesOnly); Assert.IsTrue(test5); bool test6 = EntityUpdateHandler.StatusMustBeSet(value4, value3, ImportMode.AllChangedValuesOnly); Assert.IsTrue(test6); bool test7 = EntityUpdateHandler.StatusMustBeSet(value3, value3, ImportMode.Update); Assert.IsTrue(test7); bool test8 = EntityUpdateHandler.StatusMustBeSet(value3, value3, ImportMode.All); Assert.IsTrue(test8); bool test9 = EntityUpdateHandler.StatusMustBeSet(value4, value3, ImportMode.Update); Assert.IsTrue(test9); bool test10 = EntityUpdateHandler.StatusMustBeSet(value4, value3, ImportMode.All); Assert.IsTrue(test10); bool test11 = EntityUpdateHandler.StatusMustBeSet(value4, null, ImportMode.UpdateChangedValuesOnly); Assert.IsTrue(test11); bool test12 = EntityUpdateHandler.StatusMustBeSet(value4, null, ImportMode.AllChangedValuesOnly); Assert.IsTrue(test12); bool test13 = EntityUpdateHandler.StatusMustBeSet(value4, null, ImportMode.Update); Assert.IsTrue(test13); bool test14 = EntityUpdateHandler.StatusMustBeSet(value4, null, ImportMode.All); Assert.IsTrue(test14); }
public void Test_EntityUpdateHandler_SetOwnerMode() { Guid testGuid = Guid.NewGuid(); var ownerInSourceWithTestGuid = new EntityReference("systemuser", testGuid); var ownerInCrmWithTestGuid = new EntityReference("systemuser", testGuid); var ownerInSourceWithRandomGuid = new EntityReference("systemuser", Guid.NewGuid()); var ownerInCrmWithRandomGuid = new EntityReference("systemuser", Guid.NewGuid()); bool test1 = EntityUpdateHandler.OwnerMustBeSet(null, ownerInCrmWithRandomGuid, ImportMode.AllChangedValuesOnly); Assert.IsFalse(test1); bool test2 = EntityUpdateHandler.OwnerMustBeSet(ownerInSourceWithTestGuid, ownerInCrmWithTestGuid, ImportMode.Create); Assert.IsFalse(test2); bool test3 = EntityUpdateHandler.OwnerMustBeSet(ownerInSourceWithTestGuid, ownerInCrmWithTestGuid, ImportMode.UpdateChangedValuesOnly); Assert.IsFalse(test3); bool test4 = EntityUpdateHandler.OwnerMustBeSet(ownerInSourceWithTestGuid, ownerInCrmWithTestGuid, ImportMode.AllChangedValuesOnly); Assert.IsFalse(test4); bool test5 = EntityUpdateHandler.OwnerMustBeSet(ownerInSourceWithRandomGuid, ownerInCrmWithTestGuid, ImportMode.UpdateChangedValuesOnly); Assert.IsTrue(test5); bool test6 = EntityUpdateHandler.OwnerMustBeSet(ownerInSourceWithRandomGuid, ownerInCrmWithTestGuid, ImportMode.AllChangedValuesOnly); Assert.IsTrue(test6); bool test7 = EntityUpdateHandler.OwnerMustBeSet(ownerInSourceWithTestGuid, ownerInCrmWithTestGuid, ImportMode.Update); Assert.IsTrue(test7); bool test8 = EntityUpdateHandler.OwnerMustBeSet(ownerInSourceWithTestGuid, ownerInCrmWithTestGuid, ImportMode.All); Assert.IsTrue(test8); bool test9 = EntityUpdateHandler.OwnerMustBeSet(ownerInSourceWithRandomGuid, ownerInCrmWithTestGuid, ImportMode.Update); Assert.IsTrue(test9); bool test10 = EntityUpdateHandler.OwnerMustBeSet(ownerInSourceWithRandomGuid, ownerInCrmWithTestGuid, ImportMode.All); Assert.IsTrue(test10); bool test11 = EntityUpdateHandler.OwnerMustBeSet(ownerInSourceWithRandomGuid, null, ImportMode.UpdateChangedValuesOnly); Assert.IsTrue(test11); bool test12 = EntityUpdateHandler.OwnerMustBeSet(ownerInSourceWithRandomGuid, null, ImportMode.AllChangedValuesOnly); Assert.IsTrue(test12); bool test13 = EntityUpdateHandler.OwnerMustBeSet(ownerInSourceWithRandomGuid, null, ImportMode.Update); Assert.IsTrue(test13); bool test14 = EntityUpdateHandler.OwnerMustBeSet(ownerInSourceWithRandomGuid, null, ImportMode.All); Assert.IsTrue(test14); }