private void BuildDynamicFieldMetadata() { var cachedMetadata = this.GetCachedData(DYNAMICMETADATA_CACHEKEY) as IDictionary <string, FieldMetadata>; if (cachedMetadata != null) { _dynamicFieldMetadata = cachedMetadata; } else { if (BinaryAsJObject != null) { var meta = new Dictionary <string, FieldMetadata>(); if (!this.IsNew) { // Find inherited settings files var chain = Settings.GetAllSettingsByName <Settings>(this.GetSettingName(), this.Path).ToList(); // Workaround in case the current item was not yet loaded into the settings cache: the // first element in this chain should always be the current settings file. if (chain.Count == 0 || chain[0].Id != this.Id) { chain.Insert(0, this); } // Get metadata from inherited settings files var fieldDictionaries = chain.Select(x => JsonDynamicFieldHelper.BuildDynamicFieldMetadata(x.BinaryAsJObject)).ToList(); // The result should be composed in a way that the inheritor's metadata always overrides the original metadata fieldDictionaries.Reverse(); foreach (var dict in fieldDictionaries) { foreach (var k in dict.Keys) { meta[k] = dict[k]; } } } _dynamicFieldMetadata = meta; } else { _dynamicFieldMetadata = new Dictionary <string, FieldMetadata>(); } this.SetCachedData(DYNAMICMETADATA_CACHEKEY, _dynamicFieldMetadata); } }
void BuildDynamicFieldMetadata() { var cachedMetadata = this.GetCachedData(DYNAMICMETADATA_CACHEKEY) as IDictionary <string, FieldMetadata>; if (cachedMetadata != null) { _dynamicFieldMetadata = cachedMetadata; } else { if (BinaryAsJObject != null) { var meta = new Dictionary <string, FieldMetadata>(); if (!this.IsNew) { // Find inherited settings files var chain = Settings.GetAllSettingsByName <Settings>(this.GetSettingName(), this.Path); // Get metadata from inherited settings files var fieldDictionaries = chain.Select(x => JsonDynamicFieldHelper.BuildDynamicFieldMetadata(x.BinaryAsJObject)).ToList(); // The result should be composed in a way that the inheritor's metadata always overrides the original metadata fieldDictionaries.Reverse(); foreach (var dict in fieldDictionaries) { foreach (var k in dict.Keys) { meta[k] = dict[k]; } } } _dynamicFieldMetadata = meta; } else { _dynamicFieldMetadata = new Dictionary <string, FieldMetadata>(); } this.SetCachedData(DYNAMICMETADATA_CACHEKEY, _dynamicFieldMetadata); } }