My scenario: I need to update 2 columns of items in a certain subfolder.But here the subfolder can contain subfolder and so on which i need to update too.I am using csom to try to accomplish that.I cant figure out how to recursively get all the items and once i get those item how to differentiate between files and folders
I can't get the item name to pass a relative url in the recursive function.
private static void GetFolderItems(string folderServerRelativeUrl, List list, ClientContext clientContext)
{
try
{
var query = new CamlQuery();
query.FolderServerRelativeUrl = folderServerRelativeUrl;
query.ViewXml = "<View Scope=\"RecursiveAll\"> " +
"<Query>" +
"<Where>" +
"<Eq>" +
"<FieldRef Name=\"FileDirRef\" />" +
"<Value Type=\"Text\">" + folderServerRelativeUrl + "</Value>" +
"</Eq>" +
"</Where>" +
"</Query>" +
"</View>";
ListItemCollection folderItems = list.GetItems(query);
clientContext.Load(folderItems);
clientContext.ExecuteQuery();
foreach (ListItem item in folderItems)
{
if (item.FileSystemObjectType == FileSystemObjectType.File)
{
item["Title"] = "Test";
item.Update();
list.Update();
clientContext.ExecuteQuery();
}
else if (item.FileSystemObjectType == FileSystemObjectType.Folder)
{
// item is a folder
String SubFolderUrl = folderServerRelativeUrl + "/" + item["Title"];
GetFolderItems(SubFolderUrl, list,clientContext);
}
}
}
catch (Exception)
{
Console.WriteLine("error occured");
}
}