In one of the requirements, got to retrieve the files which are modified after a specific time stamp. As part of that, created a CAML Query and thought of sharing with the community with the usecase.
One thing, just wanted to highlight is, the below code uses pnpFramework to get the context. As the earlier PNPCoreOnline is deprecated. Please search for pnpframework on the Nuget Manager.
public static void GetPagesByTimeStamp()
{
System.IO.File.AppendAllText(logFilePath, "Started.." + Environment.NewLine + Environment.NewLine);
string siteUrl = ConfigurationManager.AppSettings["siteUrl"];
string userName = ConfigurationManager.AppSettings["userName"];
string password = ConfigurationManager.AppSettings["password"];
string timestamp = ConfigurationManager.AppSettings["timestamp"];
try
{
using (var ctx = new PnPClientContext(siteUrl))
{
ctx.Credentials = new SharePointOnlineCredentials(userName, password.ToSecureString());
//Get the web from the current context
Web web = ctx.Web;
ctx.Load(web);
ctx.Load(web.Lists);
ctx.ExecuteQueryRetry();
//Get the Pages Library
var pages = ctx.Web.Lists.GetByTitle("Site Pages");
ctx.Load(pages);
//
string datetime = Convert.ToDateTime(timestamp).ToString("yyyy-MM-ddTHH:mm:ssZ");
//Get all Items inside the Pages Library
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = @"<View Scope='Recursive'>
<Query>
<Where>
<Gt>
<FieldRef Name='Modified'/>
<Value IncludeTimeValue='TRUE' Type='DateTime'>" + datetime + "</Value>" +
@"</Gt>
</Where>
<OrderBy>
<FieldRef Name='Modified' Ascending = 'true' />
</OrderBy>
</Query>
</View>";
ListItemCollection listItems = pages.GetItems(camlQuery);
ctx.Load(listItems);
ctx.ExecuteQuery();
List<Page> lstPages = new List<Page>();
foreach (var listItem in listItems)
{
System.Console.WriteLine(listItem["Title"]);
Page p = new Page();
p.Id = Convert.ToInt32(listItem["ID"]);
p.Name = Convert.ToString(listItem["Title"]);
lstPages.Add(p);
}
TextWriter txtWriter = new StreamWriter(ConfigurationManager.AppSettings["LogFilePath"] + "Pages.csv");
using (CsvWriter writer = new CsvWriter(txtWriter, new CsvHelper.Configuration.CsvConfiguration(System.Globalization.CultureInfo.InvariantCulture)))
{
writer.WriteRecords(lstPages);
writer.Flush();
}
}
}
catch (Exception ex)
{
System.Console.WriteLine("Exception occurred : " + ex.Message);
System.Console.ReadLine();
}
}
The above code is self explanatory and doesn’t require much explanation I guess.
Happy Coding
Sathish Nadarajan
Leave a comment