コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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
                    });
コード例 #4
0
        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);
        }