/// <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); }
} // Copy of the Settings property of the ExternalSettingsComponent (used to check for changes) /// <summary> /// Updates the ExternalSettingsComponent from the CustomFieldsComponent /// </summary> /// <param name="externalSettingsComponent"></param> /// <param name="sellableItem"></param> /// <returns></returns> public CustomFieldsComponent UpdateExternalSettings(ExternalSettingsComponent externalSettingsComponent, SellableItem sellableItem) { var settingsCollection = ParseExternalSettings(externalSettingsComponent.Settings); string[] allParents = GetAllParents(sellableItem); var newValues = this.CustomFields; var languages = new List <string>(); languages.Add(ExternalSettingsSharedFieldName); settingsCollection = settingsCollection.UpdateSettings(sellableItem.SitecoreId, allParents, languages.ToArray(), this.CustomFields); var serializedSettings = JsonConvert.SerializeObject(settingsCollection); externalSettingsComponent.Settings = serializedSettings; OriginalSettings = serializedSettings; return(this); }
private Dictionary <Guid, Dictionary <string, Dictionary <string, string> > > GetExternalSettings(ExternalSettingsComponent externalSettings) { var settingsCollection = new Dictionary <Guid, Dictionary <string, Dictionary <string, string> > >(); if (!string.IsNullOrEmpty(externalSettings.Settings)) { try { settingsCollection = JsonConvert.DeserializeObject <Dictionary <Guid, Dictionary <string, Dictionary <string, string> > > >(externalSettings.Settings); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } return(settingsCollection); }