Monday, October 12, 2009

Copy an existing item to another list

Scenario:
I wanted to copy an existing item to another list. I found a solution here but it didn't work for me fully.
Item I was trying to copy are inside a folder with the list.

Solution:
Solution i found was copying items at the root level. But as my items were inside the folder , I wanted to copy over to new list in same folder. Here's modified code.

Code:

public static SPListItem CopyItem(SPListItem sourceItem, string destinationListName)
        {
            //copy sourceItem to destinationList
            SPList destinationList = sourceItem.Web.Lists[destinationListName];
            string folderName = "/" + itemToCopy.Url.Remove(itemToCopy.Url.LastIndexOf('/'));
            
            SPListItem targetItem = destinationList.Items.Add(folderName, SPFileSystemObjectType.File);

            foreach (SPField f in sourceItem.Fields)
            {
                if (!f.ReadOnlyField && f.InternalName != "Attachments")
                {
                    targetItem[f.InternalName] = sourceItem[f.InternalName];
                }
            }

            //copy attachments
            foreach (string fileName in sourceItem.Attachments)
            {
                SPFile file = sourceItem.ParentList.ParentWeb.GetFile(sourceItem.Attachments.UrlPrefix + fileName);
                byte[] imageData = file.OpenBinary();
                targetItem.Attachments.Add(fileName, imageData);
            }

            targetItem.Update();
            return targetItem;
        }
Article:
Copying over a SharePoint list from source site to destination site
Copy or move Sharepoint list items using SPExport and SPImport
SPListItem.CopyTo does not copy

2 comments:

Archana February 8, 2012 at 6:18 AM  

Is there any way to copy large number of list items to a SPList through a sandbox solution? I tried using ProcessBatchData; but it fails giving this errortext in output XML string - The operation failed because an unexpected error occurred. (Result Code: 0x80020005)

Any idea?

Sandeep February 8, 2012 at 9:38 AM  

While there are ways to copy items, but with client object model you will surely face lot of issues. May be you can write a WCF with the main code and call it via jQuery Ajax by passing required parameters.