private PropagationProcessResult PropagatePrototype(Prototype prototype, IEnumerable <Content> content) { var processResult = new PropagationProcessResult(); var newRows = new List <XElement>(); foreach (var contentItem in content) { // Create new item from the prototype. var newItemEntry = prototype.Clone(); foreach (var xElement in newItemEntry.PrototypeItems) { var newElement = new XElement(xElement); if (!newElement.DescendantsAndSelf(W.sdt).Any()) { newRows.Add(newElement); continue; } foreach (var sdt in newElement.FirstLevelDescendantsAndSelf(W.sdt).ToList()) { var fieldContent = contentItem.GetContentItem(sdt.SdtTagName()); if (fieldContent == null) { processResult.AddError(new CustomError( string.Format("Field content for field '{0}' not found", sdt.SdtTagName()))); continue; } var contentProcessResult = new ContentProcessor(this.context) .SetRemoveContentControls(this.isNeedToRemoveContentControls) .FillContent(sdt, fieldContent); processResult.Merge(contentProcessResult); } newRows.Add(newElement); } } processResult.Result = newRows; return(processResult); }
// Fills prototype with values recursive. private PropagationProcessResult PropagatePrototype(Prototype prototype, IEnumerable <ListItemContent> content) { var processResult = new PropagationProcessResult(); var newRows = new List <XElement>(); foreach (var contentItem in content) { var currentLevelPrototype = prototype.CurrentLevelPrototype(contentItem.FieldNames); if (currentLevelPrototype == null || !currentLevelPrototype.IsValid) { processResult.AddError(new CustomError( string.Format("Prototype for list item '{0}' not found", string.Join(", ", contentItem.FieldNames)))); continue; } // Create new item from the prototype. var newItemEntry = currentLevelPrototype.Clone(); foreach (var xElement in newItemEntry.PrototypeItems) { var newElement = new XElement(xElement); if (!newElement.DescendantsAndSelf(W.sdt).Any()) { newRows.Add(newElement); continue; } foreach (var sdt in newElement.FirstLevelDescendantsAndSelf(W.sdt).ToList()) { var fieldContent = contentItem.GetContentItem(sdt.SdtTagName()); if (fieldContent == null) { processResult.AddError(new CustomError( string.Format("Field content for field '{0}' not found", sdt.SdtTagName()))); continue; } var contentProcessResult = new ContentProcessor(_context) .SetRemoveContentControls(_isNeedToRemoveContentControls) .FillContent(sdt, fieldContent); processResult.Merge(contentProcessResult); } newRows.Add(newElement); } // If there are nested items fill prototype for them. if (contentItem.NestedFields != null) { var filledNestedFields = PropagatePrototype( prototype.Exclude(currentLevelPrototype), contentItem.NestedFields); newRows.AddRange(filledNestedFields.Result); } } processResult.Result = newRows; return(processResult); }
// Fills prototype with values recursive. private PropagationProcessResult PropagatePrototype(Prototype prototype, IEnumerable<ListItemContent> content) { var processResult = new PropagationProcessResult(); var newRows = new List<XElement>(); foreach (var contentItem in content) { var currentLevelPrototype = prototype.CurrentLevelPrototype(contentItem.FieldNames); if (currentLevelPrototype == null || !currentLevelPrototype.IsValid) { processResult.Errors.Add( string.Format("Prototype for list item '{0}' not found", string.Join(", ", contentItem.FieldNames))); continue; } // Create new item from the prototype. var newItemEntry = currentLevelPrototype.Clone(); foreach (var xElement in newItemEntry.PrototypeItems) { var newElement = new XElement(xElement); if (!newElement.DescendantsAndSelf(W.sdt).Any()) { newRows.Add(newElement); continue; } foreach (var sdt in newElement.FirstLevelDescendantsAndSelf(W.sdt).ToList()) { var fieldContent = contentItem.GetContentItem(sdt.SdtTagName()); if (fieldContent == null) { processResult.Errors.Add(string.Format("Field content for field '{0}' not found", sdt.SdtTagName())); continue; } var contentProcessResult = new ContentProcessor(_context) .SetRemoveContentControls(_isNeedToRemoveContentControls) .FillContent(sdt, fieldContent); if (!contentProcessResult.Success) processResult.Errors.AddRange(processResult.Errors); } newRows.Add(newElement); } // If there are nested items fill prototype for them. if (contentItem.NestedFields != null) { var filledNestedFields = PropagatePrototype( prototype.Exclude(currentLevelPrototype), contentItem.NestedFields); newRows.AddRange(filledNestedFields.Result); } } processResult.Result = newRows; return processResult; }