Arrange the Activities (Tasks List) Hierarchy Using Patterns and Practice C# in SharePoint Office 365


Sathish Nadarajan
SharePoint MVP
Published On :   26 Sep 2017
Visit Count
Today :  1    Total :   524
Plan, Migrate, Secure, Report
SharePoint & Office 365 Tool. Simple & Easy to Use. 15-Day Trial!

SharePoint Office 365 Tool
Simple & Powerful Tool for Migration, Security & Reporting. Free Trial


Recently in one of the Migration activity, we faced a strange issue. We are migrating the Task List using a Custom Migration tool. Which will pull the tasks from a legacy application (IBM Connect) and push to the SharePoint Office 365 Tasks List.

While doing this, the tool was not able to maintain the Task and Sub Task.

i.e., all the activities were migrated as Tasks. Not with a Parent Child relationship.

clip_image002

But we have a column which has the ID of the Parent Task. With that, we need to write a Small snippet, which should arrange the hierarchy. Thought of sharing to the community.

There is a Field called “ParentID” for all the Tasks item. That is a Lookup column of the same list. Hence, we need to generate a LookupValueCollection and assign that to this field. I am explaining here with a single item. But, we can implement the for loop with the Recursive method in the actual implementation.

 using Microsoft.SharePoint.Client;
 using System;
 
 namespace Office365.Console
 {
     class Program
     {
         static void Main(string[] args)
         {
             UpdateTaskHierarchy();
         }
 
         public static void UpdateTaskHierarchy()
         {
             OfficeDevPnP.Core.AuthenticationManager authMgr = new OfficeDevPnP.Core.AuthenticationManager();
             
             //Site URL
             string siteUrl = "https://*********.sharepoint.com/sites/communitysite";
             // UserName 
             string userName = "sathish@**********.onmicrosoft.com";
             //Password
             string password = "*******";
 
             
             using (var clientContext = authMgr.GetSharePointOnlineAuthenticatedContextTenant(siteUrl, userName, password))
             {
                 try
                 {
                     Site site = clientContext.Site;
                     Web web = clientContext.Web;
                     
                     clientContext.Load(web);
                     clientContext.Load(web.Lists);
                     clientContext.ExecuteQuery();
                     //Get the Tasks List
                     List list = web.Lists.GetByTitle("TasksList");
 
                     //Get the Child Item - The IDs were Hard coded for the demo purpose
                     ListItem listItem = list.GetItemById(4);
                     clientContext.Load(listItem);
                     clientContext.ExecuteQuery();
 
                     // Get the Parent Item - The LookupID is hard coded for the demo purpose
                     var lookupValue = new FieldLookupValue();
                     lookupValue.LookupId = 3;
 
                     var lookupValueCollection = new FieldLookupValue[1];
                     lookupValueCollection.SetValue(lookupValue, 0);
 
                     // Set the LookupValueCollection
                     listItem["ParentID"] = lookupValueCollection;
 
                     listItem.Update();
                     clientContext.ExecuteQuery();
 
                 }
                 catch (Exception ex)
                 {
                     System.Console.ForegroundColor = ConsoleColor.Red;
                     System.Console.WriteLine("Exception Occured : " + ex.Message);
                     System.IO.File.AppendAllText("C:\\Temp\\UpdateTaskHierarchy.txt", ex.Message + " - " + siteUrl + Environment.NewLine);
                 }
 
 
             }
 
 
             System.Console.WriteLine("Completed....");
             System.Console.WriteLine("Press Any Key to Exit ....");
             System.Console.ReadLine();
         }
          
 
          
     }
 }
 

The output of the method will be as below.

clip_image004

Though it is very rare scenario, definitely will be useful in the migration projects.

Happy Coding,

Sathish Nadarajan.

SharePoint Usage Reports
Usage reports, collaboration and audit for SharePoint.
Categories

Migratiin Tools for SharePoint