/// <summary> /// Updates the CustomFieldsComponent from the ExternalSettingsComponent /// </summary> /// <param name="externalSettingsComponent"></param> /// <param name="sellableItem"></param> /// <returns></returns> public CustomFieldsComponent UpdateFromExternalSettingsComponent(ExternalSettingsComponent externalSettingsComponent, SellableItem sellableItem) { var updatedSettings = ParseExternalSettings(externalSettingsComponent.Settings); var originalSettings = ParseExternalSettings(this.OriginalSettings); string[] allParents = GetAllParents(sellableItem); var newValues = this.CustomFields; if (allParents != null) { foreach (var parent in allParents) { Guid parentId; if (!string.IsNullOrEmpty(parent) && Guid.TryParse(parent, out parentId)) { var deterministicId = GuidUtils.GetDeterministicGuid($"{sellableItem.SitecoreId}|{parent}"); if (!updatedSettings.ContainsKey(deterministicId)) { updatedSettings[deterministicId] = new Dictionary <string, Dictionary <string, string> >(); } // Check which parent was updated if (originalSettings.ContainsKey(deterministicId) && HaveSettingsBeenUpdated(updatedSettings[deterministicId], originalSettings[deterministicId])) { var settings = updatedSettings[deterministicId]; if (!settings.ContainsKey(ExternalSettingsSharedFieldName)) { // Create the language dictionary settings[ExternalSettingsSharedFieldName] = new Dictionary <string, string>(); } // Assign new values only checking the keys we have in the custom fields component var currentDictionary = new Dictionary <string, string>(this.CustomFields); foreach (var keyValuePair in currentDictionary) { if (settings[ExternalSettingsSharedFieldName].ContainsKey(keyValuePair.Key)) { if (string.CompareOrdinal(settings[ExternalSettingsSharedFieldName][keyValuePair.Key], keyValuePair.Value) != 0) { this.CustomFields[keyValuePair.Key] = settings[ExternalSettingsSharedFieldName][keyValuePair.Key]; } } } } } } } this.OriginalSettings = externalSettingsComponent.Settings; return(this); }
public static Dictionary <Guid, Dictionary <string, Dictionary <string, string> > > UpdateSettings( this Dictionary <Guid, Dictionary <string, Dictionary <string, string> > > settingsCollection, string sellableItemSitecoreId, string[] parents, string[] languages, Dictionary <string, string> keyValuePairs) { if (parents == null) { return(settingsCollection); } foreach (var parent in parents) { Guid parentId; if (!string.IsNullOrEmpty(parent) && Guid.TryParse(parent, out parentId)) { var deterministicId = GuidUtils.GetDeterministicGuid($"{sellableItemSitecoreId}|{parent}"); if (!settingsCollection.ContainsKey(deterministicId)) { settingsCollection[deterministicId] = new Dictionary <string, Dictionary <string, string> >(); } var settings = settingsCollection[deterministicId]; foreach (var language in languages) { if (!settings.ContainsKey(language)) { // Create the language dictionary settings[language] = new Dictionary <string, string>(); } // Assign new values foreach (var keyValuePair in keyValuePairs) { settings[language][keyValuePair.Key] = keyValuePair.Value; } } } } return(settingsCollection); }