Thursday, June 12, 2014

Copy/Move/Update/Save the List items from Source List to Destination List using ProcessBatchData in SharePoint

Copy/Move/Update/Save the List items from Source List to Destination List using ProcessBatchData in SharePoint.
http://msdn.microsoft.com/en-us/library/office/ms461938(v=office.14).aspx
http://msdn.microsoft.com/en-us/library/office/ms480784(v=office.14).aspx
ProcessBatchData
In list1, list2 column name should be same like Title, USER_NAME, PLACE. column name are case sensitive.
in .aspx page:-
------------------------
<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Import Namespace="Microsoft.SharePoint.ApplicationPages" %>
<%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"
    Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test.aspx.cs" Inherits="test.Layouts.test.test"
    DynamicMasterPageFile="~masterurl/default.master" %>

<asp:Content ID="PageHead" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">
</asp:Content>
<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">  
    <table>
        <tr>
            <td align="center">
                <asp:Button ID="btnClose" Font-Bold="true" runat="server" Text="Move Items from list1 to list2"
                    OnClick="btnMove_Click" />
            </td>
        </tr>
    </table>
</asp:Content>
<asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">
    Application Page
</asp:Content>
<asp:Content ID="PageTitleInTitleArea" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea"
    runat="server">
    My Application Page

</asp:Content>

In .aspx.cs page:-
---------------------------
using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using System.Text;
using System.Data;
using System.Web;

namespace test.Layouts.test
{
    public partial class test : LayoutsPageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void btnMove_Click(object sender, EventArgs e)
        {
            try
            {
                SPWeb web = SPContext.Current.Web;
                SPList source_list = web.Lists["list1"];
                SPList destination_list = web.Lists["list2"];

                SPQuery query = new SPQuery();
                query.RowLimit = 2000;
                StringBuilder sbQuery = new StringBuilder();
                sbQuery.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Batch>");
                string command =
                    "<Method>" +
                        "<SetList Scope=\"Request\">{0}</SetList>" +
                        "<SetVar Name=\"ID\">New</SetVar>" +
                        "<SetVar Name=\"Cmd\">Save</SetVar>" +
                        "<SetVar Name=\"urn:schemas-microsoft-com:office:office#Title\">{1}</SetVar>" +
                        "<SetVar Name=\"urn:schemas-microsoft-com:office:office#USER_NAME\">{2}</SetVar>" +
                        "<SetVar Name=\"urn:schemas-microsoft-com:office:office#PLACE\">{3}</SetVar>" +
                    "</Method>";

                string deleteCommand =
                    "<Method>" +
                        "<SetList Scope=\"Request\">{0}</SetList>" +
                        "<SetVar Name=\"ID\">{1}</SetVar>" +
                        "<SetVar Name=\"Cmd\">Delete</SetVar>" +
                    "</Method>";

                //string CopyCommand =
                //   "<Method>" +
                //       "<SetList Scope=\"Request\">{0}</SetList>" +
                //       "<SetVar Name=\"ID\">{1}</SetVar>" +
                //       "<SetVar Name=\"Cmd\">Copy</SetVar>" +
                //   "</Method>";

                SPListItemCollection itmColl;
                do
                {
                    itmColl = source_list.GetItems(query);
                    if (itmColl.Count >= 0)
                    {
                    }
                    query.ListItemCollectionPosition = itmColl.ListItemCollectionPosition;
                    DataTable dtData = new DataTable();
                    dtData = itmColl.GetDataTable();
                    foreach (DataRow dr in dtData.Rows)
                    {
                        sbQuery.AppendFormat(command, destination_list.ID, Convert.ToString(dr["Title"]), Convert.ToString(dr["USER_NAME"]), Convert.ToString(dr["PLACE"]));
                        sbQuery.AppendFormat(deleteCommand, source_list.ID, Convert.ToString(dr["ID"]));
                        //sbQuery.AppendFormat(CopyCommand, source_list.ID, Convert.ToString(dr["ID"]));
                    }

                } while (query.ListItemCollectionPosition != null);

                sbQuery.Append("</Batch>");
                web.ProcessBatchData(sbQuery.ToString());
            }
            catch (Exception ex)
            {
            }
        }
    }
}

1 comment:

  1. There is alot of talk on the Internet with people looking for Legitimate home based jobs - here is a
    list - while we cannot endorse them we can tell you they are real companies that hire people to work from home.
    Follow the steps provided during the sign up process, which will get you set up
    with your account login, which will then allow you
    INSTANT ACCESS to the training and jobs program so you
    can BEGIN EARNING MONEY TODAY. As we're chatting about this, I see that
    we have a common issue here.

    my blog ... jobs you can do from home

    ReplyDelete