Share via


How to copy list item from one Sharepoint list to another with permission and attachment

Below code helps in copying listitems from one sharepoint list to another along with attachments and permissions

/// <summary>

/// Function copies list item from source list to destination list in folder named '2015'

/// </summary>

/// <param name="web"></param>

/// <param name="sourceListName"></param>

/// <param name="destListName"></param>

/// <returns></returns>

private int CopyItems(SPWeb web, string sourceListName, string destListName)

{

//Get Source List

SPList sourceList = web.Lists[sourceListName];

//Get Destination List

SPList destList = web.Lists[destListName];

//Initiate variables

SPListItem folderListItem = null;

web.AllowUnsafeUpdates = true;

bool IsFolderExist = false;

int itemCount=0;

try

{

      //Check if list already contains folder name '2015'

      foreach (SPListItem item in destList.Folders

      {

         if (item.Title == "2015")

         {

            //set the folder name

            folderListItem = item;

            IsFolderExist = true;

         }

      }

          //If folder dows not exist

           if (!IsFolderExist)

          {

           /* Path within the list where the new folder gets created Leave it empty if it needs to be created under root */           

           String nodeDepthPath = @"";

           /* create a folder under the path specified */

           SPListItem folderItem = destList.Items.Add(destList.RootFolder.ServerRelativeUrl + nodeDepthPath, SPFileSystemObjectType.Folder);

           /* set the folder name and update */

           folderItem["Title"] = ddlYear.SelectedValue;

           folderItem.Update();

           folderListItem = folderItem;

          }

          //Get Desired list items

          SPQuery myQuery = new SPQuery();

          /*Form Query if required*/

          //Get lists item to copy

          SPListItemCollection sourceListItems = sourceList.GetItems(myQuery);

          foreach (SPListItem item in sourceListItems)

          {

             //Call Copy list items to copy data

             CopyItem(item, destList, folderListItem);

             itemCount++;

          }

}

catch (Exception ex)

{

         lblErrorMessage.Text = ex.Message;

         lblErrorMessage.ForeColor = Color.Red;

}

return itemCount;

 }

 /// <summary>

/// Function Copies data

/// </summary>

/// <param name="item"></param>

/// <param name="destList"></param>

/// <param name="DestinationfolderItem"></param>

private void CopyItem(SPListItem item, SPList destList, SPListItem DestinationfolderItem)

{

   //Create new list item in destination folder

    SPListItem newItem = destList.Items.Add(DestinationfolderItem.Folder.ServerRelativeUrl, SPFileSystemObjectType.File);

    //Set variable for copying attachments

    bool IsItemsAttached = false;

    try

    {

     //Iterate through all fields of source list item

      for (int i = 0; i < item.Fields.Count - 1; i++)

     {

         //Copy field to new item if they are not read only fields

        if ((!newItem.Fields[i].ReadOnlyField) && (newItem.Fields[i].InternalName != "Attachments"))

         {

          newItem[newItem.Fields[i].InternalName] = item[newItem.Fields[i].InternalName];

         }

      //Copy attachments

      else if (newItem.Fields[i].InternalName != "Attachments" && !IsItemsAttached)

      {

        if (newItem.Fields[i].InternalName == "Created")

        {    

           newItem["Created_x0020_Date0"] = item[newItem.Fields[i].InternalName];

         }

         foreach (string filename in item.Attachments)

         {    

          var file = item.ParentList.ParentWeb.GetFile(item.Attachments.UrlPrefix + filename);

          var imageData = file.OpenBinary();

          newItem.Attachments.Add(filename, imageData);

          IsItemsAttached = true;

        }

     }

}

newItem.Update();

 //Call Function to copy permission

CopyPermission(item, newItem); }

catch (Exception ex)

{

lblErrorMessage.Text = ex.Message;

lblErrorMessage.ForeColor = Color.Red;

 }

}

 /// <summary>

/// Function Copies permission

/// </summary>

/// <param name="destList"></param>

/// <param name="DestinationfolderItem"></param>

private void CopyPermission(SPListItem sourceItem, SPListItem destItem)

{

     //Get role assignment of source list item

     foreach (SPRoleAssignment roleAssign in sourceItem.RoleAssignments)

    {

     SPSecurity.RunWithElevatedPrivileges(delegate

     {

     if (destItem != null)

     { 

       //Assign role in destination list item

        destItem.BreakRoleInheritance(false); destItem.RoleAssignments.Add(roleAssign);

     }

});

}

}