Thanks for reading this post.
In this post, I’m going to show a way to load the whole “Project and Tasks” data for a given project in a single request to the server using CSOM. When I say complete Project and Task data it includes project properties, project level custom fields, Task properties, Task level custom fields including lookup tables and entries. Earlier, I used to hit the server for every task to read the task level level custom fields. Below is the simple load query that brings all the data at once in a single hit.
Note: If something is not loaded and asking you for “Initialize explicitly” just add that property in the load query.
var projColl = context.LoadQuery(context.Projects .Where(p => p.Id == projectGuid) .Include( p => p.Id, p => p.Name, p => p.StartDate, p => p.FinishDate, p => p.LastPublishedDate, p => p.CustomFields, p => p.IncludeCustomFields, p => p.IncludeCustomFields.CustomFields, p => p.Tasks, p => p.Tasks.Include( t => t.Id, t => t.Name, t => t.Parent, t => t.Predecessors, t => t.Successors, t => t.TotalSlack, t => t.CustomFields, t => t.CustomFields.IncludeWithDefaultProperties( cf => cf.LookupTable, cf => cf.LookupEntries ) ) ) ); context.ExecuteQuery();
this really saves lot of time and also improves the performance.