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); } }); } }