public List <ListItemCreator> GetListItems(ClientContext ctx, Web web, string listName) { List list = web.Lists.GetByTitle(listName); CamlQuery query = CamlQuery.CreateAllItemsQuery(2000); ListItemCollection items = list.GetItems(query); //{67df98f4-9dec-48ff-a553-29bece9c5bf4} is Attachments var attachmentsFieldId = Guid.Parse("{67df98f4-9dec-48ff-a553-29bece9c5bf4}"); //ContentTypeId is hidden ctx.Load(list.Fields, fields => fields.Where(f => (!f.Hidden && !f.ReadOnlyField && f.Id != attachmentsFieldId) || f.InternalName == "ContentTypeId")); ctx.Load(items, itemCol => itemCol.Include(item => item.FieldValuesForEdit, item => item.FieldValuesAsText, item => item.FieldValuesAsHtml, item => item.ContentType)); ctx.ExecuteQueryRetry(); var listItems = new List <ListItemCreator>(); var listItemCreatorBuilder = new ListItemCreatorBuilder(ctx, web, list); foreach (ListItem listItem in items) { var itemCreator = listItemCreatorBuilder.GetListItemCreator(listItem); listItems.Add(itemCreator); } return(listItems); }
private FoldersAndFileCreator GetFoldersAndFileCreatorFromSite(ClientContext ctx, Web web, string fileWebRelativeUrl, string downloadFolderPath, bool getRelatedFileCreators, AppManifestBase appManifest) { OnVerboseNotify("Getting file from site " + fileWebRelativeUrl); var retVal = new FoldersAndFileCreator { Folders = new List <string>(), FileCreators = new Dictionary <string, FileCreator>() }; if (!fileWebRelativeUrl.StartsWith("/")) { fileWebRelativeUrl = "/" + fileWebRelativeUrl; } var parts = fileWebRelativeUrl.Split('/'); var lastFolder = string.Empty; for (var i = 1; i < parts.Length - 1; i++) { lastFolder = lastFolder + "/" + parts[i]; retVal.Folders.Add(lastFolder); } ctx.Load(web, w => w.ServerRelativeUrl); ctx.ExecuteQueryRetry(); var fileUrl = fileWebRelativeUrl; if (web.ServerRelativeUrl != "/") { fileUrl = web.ServerRelativeUrl + fileWebRelativeUrl; } //Get the file var file = web.GetFileByServerRelativeUrl(fileUrl); ctx.Load(file, f => f.Exists); ctx.ExecuteQueryRetry(); if (file.Exists) { OnVerboseNotify("Got file from site " + fileWebRelativeUrl); //Try to load the list items, if the list doesn't exist, ie. it's a folder there will be an exception ctx.Load(file, f => f.ListItemAllFields); ctx.Load(file.ListItemAllFields, l => l.ParentList, l => l.HasUniqueRoleAssignments, l => l.FieldValuesForEdit, l => l.ContentType); var couldGetListItem = false; try { ctx.ExecuteQueryRetry(); couldGetListItem = file.ListItemAllFields.ServerObjectIsNull != null && !(bool)file.ListItemAllFields.ServerObjectIsNull; } catch { // ignored } var fileName = parts[parts.Length - 1]; retVal.FileCreators.Add(fileWebRelativeUrl, new FileCreator { Name = fileName, ForceOverwrite = true, Url = fileWebRelativeUrl }); var newFileCreator = retVal.FileCreators[fileWebRelativeUrl]; newFileCreator.RelativeFilePath = fileWebRelativeUrl.Replace(@"/", @"\"); if (couldGetListItem && file.ListItemAllFields.FieldValues.Count > 0) { newFileCreator.List = file.ListItemAllFields.ParentList.Title; AnalyzeSecurityConfiguration(newFileCreator, file.ListItemAllFields, ctx); var listItemCreatorBuilder = new ListItemCreatorBuilder(ctx, web, file.ListItemAllFields.ParentList); newFileCreator.ListItemFieldValues = listItemCreatorBuilder.GetListItemCreator(file.ListItemAllFields).FieldValues; //Some item types have a list value, but a server null content type, such as dwp files if (file.ListItemAllFields.ContentType.ServerObjectIsNull != true) { newFileCreator.ContentType = file.ListItemAllFields.ContentType.Name; newFileCreator.ContentTypeId = file.ListItemAllFields.ContentType.StringId; if (newFileCreator.ContentTypeId.StartsWith(WikiPageContentTypeId) || newFileCreator.ContentTypeId.StartsWith(PublishingPageContentTypeId)) { var contentFieldName = newFileCreator.ContentTypeId.StartsWith(WikiPageContentTypeId) ? WikiPageContentFieldName : PublishingPageContentFieldName; ProcessWikiOrPublishingPage(ctx, web, fileUrl, file, contentFieldName, newFileCreator); if (getRelatedFileCreators) { var contentField = file.ListItemAllFields[contentFieldName]?.ToString() ?? string.Empty; GetRelatedFileCreators(ctx, web, appManifest, downloadFolderPath, contentField); } newFileCreator.IsHomePage = IsHomePage(ctx, fileUrl); //Wiki pages don't get downloaded, they are created from a template return(retVal); } //0x010107 is declarative workflow document if (file.ListItemAllFields.ContentType.Id.StringValue.StartsWith(DeclarativeWorkflowDocumentContentTypeId)) { DownloadWorkflowFile(ctx, web, downloadFolderPath, fileUrl, newFileCreator, appManifest); newFileCreator.ContentType = "Workflow"; return(retVal); } } } if (fileName.ToLowerInvariant().EndsWith(".aspx")) { var listIds = GetWebListIds(ctx, web); ProcessWebPartPage(ctx, web, fileUrl, file, newFileCreator, listIds); DownloadAspxFile(ctx, downloadFolderPath, fileUrl, newFileCreator, listIds, appManifest); if (newFileCreator.WebParts != null && newFileCreator.WebParts.Count > 0) { newFileCreator.ContentType = "Web Part Page"; } newFileCreator.IsHomePage = IsHomePage(ctx, newFileCreator.Url); } else { var listIds = GetWebListIds(ctx, web); DownloadFile(ctx, downloadFolderPath, fileUrl, newFileCreator, listIds, appManifest); } } return(retVal); }