public static void StoreChangedMetaData(DeletedMetadataCollection deletedMD, EntityMetadataCollection changedMD) { int deletedAmount = deletedMD.Count; int changedAmount = changedMD.Count; Console.WriteLine("*Changed Metadata* \n" + deletedAmount + " deletes found. \n" + changedAmount + " changes found."); log("\n* CRM: " + URL + " \n*Changed Metadata* \n" + deletedAmount + " deletes found. \n" + changedAmount + " changes found.", "Results", true, false); string[,] _deletedMD = new string[deletedAmount, 2]; string[,] _modifiedMD = new string[changedAmount, 2]; //Parse into Arrays //deletes int i = 0; foreach (var _key in deletedMD.Keys) { DataCollection <Guid> _tmpGUID; if (deletedMD.TryGetValue(_key, out _tmpGUID)) { Console.WriteLine(_tmpGUID); } else { Console.WriteLine(_key + " not found i deleted metadata!"); } } //changes for (i = 0; i < changedMD.Count; i++) { Console.WriteLine("change found to: '" + changedMD[i].SchemaName.ToString() + "' since " + _ClientVersionStamp); log("change found to: '" + changedMD[i].SchemaName.ToString() + "' since " + _ClientVersionStamp, "Results", true, false); } }
public static void UpdateCache(List <EntityMetadata> entityMetadataList , IDictionary <Guid, MappingEntity> mappingEntities, string serverStamp, DeletedMetadataCollection deletedMetadata, bool isTitleCaseLogicalName) { if (deletedMetadata != null) { ParseDeleted(entityMetadataList, mappingEntities, serverStamp, deletedMetadata); } // update modified entities var modifiedEntities = entityMetadataList .Where(entity => entity.MetadataId.HasValue && mappingEntities.ContainsKey(entity.MetadataId.Value)).ToList(); modifiedEntities.AsParallel().ForAll(entity => GetMappingEntity(entity, serverStamp, mappingEntities[entity.MetadataId.GetValueOrDefault()], isTitleCaseLogicalName)); var newEntities = entityMetadataList .Where(entity => entity.MetadataId.HasValue && !mappingEntities.ContainsKey(entity.MetadataId.Value)).ToList(); newEntities.AsParallel().ForAll(entity => mappingEntities .Add(entity.MetadataId.GetValueOrDefault(), GetMappingEntity(entity, serverStamp, null, isTitleCaseLogicalName))); }
//</snippetaddOptionLabelsToCache> //<snippetremoveOptionLabelsFromCache> protected void removeOptionLabelsFromCache(DeletedMetadataCollection DeletedMetadata, Boolean showChanges) { List <OptionSetOption> optionSetOptionsToRemove = new List <OptionSetOption>(); if (DeletedMetadata.Keys.Contains(DeletedMetadataFilters.OptionSet)) { DataCollection <Guid> optionsetmetadataids = (DataCollection <Guid>)DeletedMetadata[DeletedMetadataFilters.OptionSet]; foreach (Guid metadataid in optionsetmetadataids) { foreach (OptionSetOption oso in _optionLabelList) { if (metadataid == oso.optionsetId) { optionSetOptionsToRemove.Add(oso); } } } } foreach (OptionSetOption option in optionSetOptionsToRemove) { _optionLabelList.Remove(option); } if (showChanges) { if (optionSetOptionsToRemove.Count > 0) { Console.WriteLine("{0} Option Labels removed", optionSetOptionsToRemove.Count); Console.WriteLine("{0} Total Option Labels currently cached", _optionLabelList.Count); Console.WriteLine(""); } else { Console.WriteLine("No Option Labels removed."); Console.WriteLine(""); } } }
private static void ParseDeleted(List <EntityMetadata> entityMetadataList, IDictionary <Guid, MappingEntity> mappingEntities, string serverStamp , DeletedMetadataCollection deletedMetadata) { if (deletedMetadata.ContainsKey(DeletedMetadataFilters.Entity)) { // remove deleted entities deletedMetadata[DeletedMetadataFilters.Entity].ToList().ForEach(guid => mappingEntities.Remove(guid)); } if (deletedMetadata.ContainsKey(DeletedMetadataFilters.Attribute)) { // remove deleted fields deletedMetadata[DeletedMetadataFilters.Attribute].ToList() .ForEach(guid => { var entity = mappingEntities.Values.FirstOrDefault( entityQ => entityQ.Fields.ToList().Any(field => field.MetadataId == guid)); if (entity == null) { return; } entity.Fields = entity.Fields.ToList().Where(field => field.MetadataId != guid).ToArray(); entity.Enums = entity.Enums.ToList().Where(field => field.MetadataId != guid).ToArray(); entity.ServerStamp = serverStamp; }); } if (deletedMetadata.ContainsKey(DeletedMetadataFilters.Relationship)) { // remove deleted relationships deletedMetadata[DeletedMetadataFilters.Relationship].ToList() .ForEach(guid => { // 1:N var entity = mappingEntities.Values.FirstOrDefault( entityQ => entityQ.RelationshipsOneToMany.ToList().Any(relation => relation.MetadataId == guid)); if (entity != null) { entity.RelationshipsOneToMany = entity.RelationshipsOneToMany.ToList().Where(relation => relation.MetadataId != guid).ToArray(); entity.ServerStamp = serverStamp; return; } // N:1 entity = mappingEntities.Values.FirstOrDefault( entityQ => entityQ.RelationshipsManyToOne.ToList().Any(relation => relation.MetadataId == guid)); if (entity != null) { entity.RelationshipsManyToOne = entity.RelationshipsManyToOne.ToList().Where(relation => relation.MetadataId != guid).ToArray(); entity.ServerStamp = serverStamp; return; } // M:N var entities = mappingEntities.Values.Where( entityQ => entityQ.RelationshipsManyToMany.ToList().Any(relation => relation.MetadataId == guid)) .ToList(); if (entities.Any()) { entities.ForEach(entityQ => { entityQ.RelationshipsManyToMany = entityQ.RelationshipsManyToMany .ToList() .Where(relation => relation.MetadataId != guid) .ToArray(); entityQ.ServerStamp = serverStamp; }); } }); } }
public static void UpdateCache(List <EntityMetadata> entityMetadataList , IDictionary <Guid, MappingEntity> mappingEntities, string serverStamp, DeletedMetadataCollection deletedMetadata) { ParseDeleted(mappingEntities, serverStamp, deletedMetadata); // update modified entities var modifiedEntities = entityMetadataList.Where(entity => entity.MetadataId.HasValue && mappingEntities.ContainsKey(entity.MetadataId.Value)).ToList(); modifiedEntities.ForEach( entity => UpdateMappingEntity(entity, entity.MetadataId.HasValue ? mappingEntities[entity.MetadataId.Value] : null, serverStamp)); var newEntities = entityMetadataList.Where(entity => entity.MetadataId.HasValue && !mappingEntities.ContainsKey(entity.MetadataId.Value)).ToList(); newEntities.ForEach(entity => mappingEntities.Add(entity.MetadataId.Value, GetMappingEntity(entity, serverStamp))); }
//</snippetaddOptionLabelsToCache> //<snippetremoveOptionLabelsFromCache> protected void removeOptionLabelsFromCache(DeletedMetadataCollection DeletedMetadata, Boolean showChanges) { List<OptionSetOption> optionSetOptionsToRemove = new List<OptionSetOption>(); if (DeletedMetadata.Keys.Contains(DeletedMetadataFilters.OptionSet)) { DataCollection<Guid> optionsetmetadataids = (DataCollection<Guid>)DeletedMetadata[DeletedMetadataFilters.OptionSet]; foreach (Guid metadataid in optionsetmetadataids) { foreach (OptionSetOption oso in _optionLabelList) { if (metadataid == oso.optionsetId) { optionSetOptionsToRemove.Add(oso); } } } } foreach (OptionSetOption option in optionSetOptionsToRemove) { _optionLabelList.Remove(option); } if (showChanges) { if (optionSetOptionsToRemove.Count > 0) { Console.WriteLine("{0} Option Labels removed", optionSetOptionsToRemove.Count); Console.WriteLine("{0} Total Option Labels currently cached", _optionLabelList.Count); Console.WriteLine(""); } else { Console.WriteLine("No Option Labels removed."); Console.WriteLine(""); } } }