private ProvisioningTemplate ProcessLibraryItems(Web web, List siteList, ProvisioningTemplate template, ListInstance listInstance, Model.Configuration.Lists.Lists.ExtractConfiguration extractionConfig, Model.Configuration.Lists.Lists.ExtractQueryConfiguration queryConfig, ProvisioningTemplateCreationInformation creationInfo, PnPMonitoredScope scope, ListItemCollection items, Uri baseUri) { var itemCount = 1; foreach (var item in items) { switch (item.FileSystemObjectType) { case FileSystemObjectType.File: { //PnP:File ProcessDocumentRow(web, siteList, baseUri, item, listInstance, template, creationInfo, scope, itemCount, items.Count); break; } case FileSystemObjectType.Folder: { //PnP:Folder ProcessFolderRow(web, item, siteList, listInstance, queryConfig, template, scope); break; } default: { //PnP:DataRow ProcessDataRow(web, siteList, item, listInstance, extractionConfig, queryConfig, baseUri, creationInfo, scope); break; } } itemCount++; } return(template); }
private ListInstance ProcessListItems(Web web, List siteList, ListInstance listInstance, ProvisioningTemplateCreationInformation creationInfo, Model.Configuration.Lists.Lists.ExtractConfiguration extractionConfig, Model.Configuration.Lists.Lists.ExtractQueryConfiguration queryConfig, Uri baseUri, ListItemCollection items, PnPMonitoredScope scope) { var itemCount = 1; foreach (var item in items) { WriteMessage($"List|{listInstance.Title}|{itemCount}|{items.Count}", ProvisioningMessageType.Progress); var dataRow = ProcessDataRow(web, siteList, item, listInstance, extractionConfig, queryConfig, baseUri, creationInfo, scope); listInstance.DataRows.Add(dataRow); itemCount++; } return(listInstance); }
private Model.DataRow ProcessDataRow(Web web, List siteList, ListItem item, ListInstance listInstance, Model.Configuration.Lists.Lists.ExtractConfiguration extractionConfig, Model.Configuration.Lists.Lists.ExtractQueryConfiguration queryConfig, Uri baseUri, ProvisioningTemplateCreationInformation creationInfo, PnPMonitoredScope scope) { var dataRow = new Model.DataRow(); var filteredFieldValues = item.FieldValues.ToList(); if (queryConfig != null && queryConfig.ViewFields != null && queryConfig.ViewFields.Count > 0) { filteredFieldValues = item.FieldValues.Where(f => queryConfig.ViewFields.Contains(f.Key)).ToList(); } foreach (var fieldValue in filteredFieldValues) { var value = item.FieldValuesAsText[fieldValue.Key]; var skip = extractionConfig.SkipEmptyFields && string.IsNullOrEmpty(value); if (!skip) { dataRow.Values.Add(fieldValue.Key, TokenizeValue(web, siteList.Fields.FirstOrDefault(f => f.InternalName == fieldValue.Key).TypeAsString, fieldValue, value)); } } if (queryConfig != null && queryConfig.IncludeAttachments && siteList.EnableAttachments && (bool)item["Attachments"]) { #if !SP2013 && !SP2016 item.Context.Load(item, i => i.AttachmentFiles.Include(a => a.FileName, a => a.FileNameAsPath, a => a.ServerRelativePath)); #else item.Context.Load(item, i => i.AttachmentFiles.Include(a => a.FileName, a => a.FileName, a => a.ServerRelativeUrl)); #endif item.Context.ExecuteQueryRetry(); foreach (var attachmentFile in item.AttachmentFiles) { #if !SP2013 && !SP2016 var fullUri = new Uri(baseUri, attachmentFile.ServerRelativePath.DecodedUrl); #else var fullUri = new Uri(baseUri, attachmentFile.ServerRelativeUrl); #endif var folderPath = HttpUtility.UrlDecode(fullUri.Segments.Take(fullUri.Segments.Count() - 1).ToArray().Aggregate((i, x) => i + x).TrimEnd('/')); var targetFolder = $"Attachments/{item.Id}"; dataRow.Attachments.Add(new Model.SharePoint.InformationArchitecture.DataRowAttachment() { #if !SP2013 && !SP2016 Name = attachmentFile.FileNameAsPath.DecodedUrl, Src = $"{targetFolder}/{attachmentFile.FileNameAsPath.DecodedUrl}" #else Name = attachmentFile.FileName, Src = $"{targetFolder}/{attachmentFile.FileName}" #endif });
private ListItemCollectionPosition RetrieveItems(Web web, ProvisioningTemplate template, ProvisioningTemplateCreationInformation creationInfo, PnPMonitoredScope scope, List siteList, Model.Configuration.Lists.Lists.ExtractConfiguration extractionConfiguration, CamlQuery camlQuery, Model.Configuration.Lists.Lists.ExtractQueryConfiguration queryConfig, ListInstance listInstance) { var items = siteList.GetItems(camlQuery); siteList.Context.Load(items, i => i.IncludeWithDefaultProperties(li => li.FieldValuesAsText), i => i.ListItemCollectionPosition); if (queryConfig != null && queryConfig.ViewFields != null && queryConfig.ViewFields.Count > 0) { foreach (var viewField in queryConfig.ViewFields) { siteList.Context.Load(items, i => i.Include(li => li[viewField])); } } siteList.Context.ExecuteQueryRetry(); var baseUri = new Uri(web.Url); if (siteList.BaseType == BaseType.DocumentLibrary) { ProcessLibraryItems(web, siteList, template, listInstance, extractionConfiguration, queryConfig, creationInfo, scope, items, baseUri); } else { ProcessListItems(web, siteList, listInstance, creationInfo, extractionConfiguration, queryConfig, baseUri, items, scope); } return(items.ListItemCollectionPosition); }