public void Publishing(PublishContentContext context, FieldIndexPart fieldIndexPart) { foreach (var part in fieldIndexPart.ContentItem.Parts) { foreach (var field in part.PartDefinition.Fields) { // get all drivers for the current field type // the driver will describe what values of the field should be indexed var drivers = _contentFieldDrivers.Where(x => x.GetFieldInfo().Any(fi => fi.FieldTypeName == field.FieldDefinition.Name)).ToList(); ContentPart localPart = part; ContentPartFieldDefinition localField = field; var membersContext = new DescribeMembersContext( (storageName, storageType, displayName, description) => { var fieldStorage = _fieldStorageProvider.BindStorage(localPart, localField); // fieldStorage.Get<T>(storageName) var getter = typeof(IFieldStorage).GetMethod("Get").MakeGenericMethod(storageType); var fieldValue = getter.Invoke(fieldStorage, new[] { storageName }); _fieldIndexService.Set(fieldIndexPart, localPart.PartDefinition.Name, localField.Name, storageName, fieldValue, storageType); }); foreach (var driver in drivers) { driver.Describe(membersContext); } } } }
public void Process(IEnumerable <int> contentItemIds, string partName, string fieldName, HiddenStringFieldSettings settings) { var parts = _contentManager.GetMany <ContentItem>(contentItemIds, VersionOptions.Published, new QueryHints()) .Select(ci => ci.Parts.FirstOrDefault(pa => pa.PartDefinition.Name == partName)); if (settings.Tokenized) { foreach (var part in parts) { var item = new KeyValuePair <HiddenStringField, Dictionary <string, object> >( part.Fields.FirstOrDefault(fi => IsMyField(fi, fieldName)) as HiddenStringField, new Dictionary <string, object> { { "Content", part.ContentItem } }); item.Key.Value = _tokenizer.Replace(settings.TemplateString, item.Value); //Updates the index for projections _fieldIndexService.Set( part.ContentItem.As <FieldIndexPart>(), part.PartDefinition.Name, item.Key.Name, "", item.Key.Value, typeof(string)); } } else { foreach (var part in parts) { var fields = part.Fields .Where(fi => IsMyField(fi, fieldName)) .Select(fi => fi as HiddenStringField); foreach (var field in fields) { field.Value = settings.TemplateString; //Updates the index for projections _fieldIndexService.Set( part.ContentItem.As <FieldIndexPart>(), part.PartDefinition.Name, field.Name, "", field.Value, typeof(string)); } } } }
private void ProcessParts(string fieldName, IEnumerable <ContentPart> parts, string templateString) { foreach (var part in parts) { var fields = part.Fields .Where(fi => fi is HiddenStringField && fi.Name.Equals(fieldName, StringComparison.OrdinalIgnoreCase)) .Select(fi => fi as HiddenStringField); foreach (var field in fields) { field.Value = templateString; // Updates the index for projections _fieldIndexService.Set( part.ContentItem.As <FieldIndexPart>(), part.PartDefinition.Name, field.Name, "", field.Value, typeof(string)); } } }