private void ProcessInternal(HiddenStringFieldUpdateProcessVariant variant, string contentTypeName, string partName, string fieldName) { var contents = _contentManager.Query( VersionOptions.Latest, contentTypeName); var contentCount = _contentManager.Query( VersionOptions.Latest, contentTypeName).Count(); for (var i = 0; i < contentCount; i += PAGE_SIZE) { // Content Items with the required part. var contentPage = Enumerable.Empty <ContentItem>(); if (variant == HiddenStringFieldUpdateProcessVariant.All) { contentPage = contents.Slice(i, PAGE_SIZE) .Where(ci => ci.Parts .Any(pa => pa.PartDefinition.Name.Equals(partName, StringComparison.OrdinalIgnoreCase))); } else if (variant == HiddenStringFieldUpdateProcessVariant.Empty) { contentPage = contents.Slice(i, PAGE_SIZE) .Where(ci => ci.Parts .Any(pa => pa.PartDefinition.Name.Equals(partName, StringComparison.OrdinalIgnoreCase) && string.IsNullOrWhiteSpace( (pa.Fields .First(fi => fi.Name.Equals(fieldName, StringComparison.OrdinalIgnoreCase)) as HiddenStringField).Value))); } // Read settings from the first content item var firstCi = contentPage.FirstOrDefault(); if (firstCi != null) { var field = firstCi.Parts .SelectMany(p => p.Fields) .FirstOrDefault(f => f.Name.Equals(fieldName, StringComparison.OrdinalIgnoreCase)); if (field != null) { var settings = field.PartFieldDefinition.Settings.GetModel <HiddenStringFieldSettings>(); if (settings != null) { var parts = contentPage .Select(ci => ci.Parts .FirstOrDefault(pa => pa.PartDefinition.Name.Equals(partName, StringComparison.OrdinalIgnoreCase))); if (settings.Tokenized) { ProcessPartsTokenized(fieldName, parts, settings.TemplateString); } else { ProcessParts(fieldName, parts, settings.TemplateString); } } } } } }
private IEnumerable <int> GetIdsToProcess(HiddenStringFieldUpdateProcessVariant variant, ContentPartFieldDefinitionBuilder builder) { var partDefinition = _contentDefinitionManager.GetPartDefinition(builder.PartName); return(_contentManager.Query( _contentDefinitionManager.ListTypeDefinitions() .Where(td => td.Parts.Any(ptd => ptd.PartDefinition.Name == partDefinition.Name)) .Select(td => td.Name) .ToArray()) .List() .Where(ci => ci.Parts.Where(_partsEnumerableFilters[variant](builder)).Any()) .Select(ci => ci.Id)); }
public void AddTask(HiddenStringFieldUpdateProcessVariant variant, HiddenStringFieldSettings settings, ContentPartFieldDefinitionBuilder builder) { if (variant != HiddenStringFieldUpdateProcessVariant.None) { _processingEngine .AddTask(_shellSettings, _shellDescriptorManager.GetShellDescriptor(), "IHiddenStringFieldUpdateProcessor.Process", new Dictionary <string, object> { { "contentItemIds", GetIdsToProcess(variant, builder) }, { "partName", builder.PartName }, { "fieldName", builder.Name }, { "settings", settings } }); } }