通常,我们在SharePoint中创建、更新,删除Item,文档或者文件夹时,都有对应的方法,比如创建一个Item:

                        SPListItem item = list.Items.Add(web.Url + "/" + list.RootFolder.Url,SPFileSystemObjectType.File,"myitem001");
                        item["Title"] = "item001";
                        item.Update();

创建一个folder:

                        SPListItem item = list.Items.Add(web.Url + "/" + list.RootFolder.Url,SPFileSystemObjectType.Folder,"myfolder001");
                        item.Update();

创建一个从folder继承来的Content Type:

                        SPListItem item = list.Items.Add(web.Url + "/" + list.RootFolder.Url,SPFileSystemObjectType.Folder,"myfolderContentType001");

                        item["ContentTypeId"] = myCType.Id;
                        item.Update();

 

但是当需要做大量的操作时,如果用上面的方法,效率就会比较低,比如Update,实际上SharePoint是调用了一个存储过程,这样会造成频繁的向服务器发起请求,严重增加了服务器的负担,最好的方法就是使用批量操作的方法:ProcessBatchData,当然也可以使用web services,不过web services的方法不在本文的讨论范围内。

msdn上有对该方法的描述(http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spweb.processbatchdata.aspx),但是总觉得不是很详细,而且实例太少,本文结合自己在实际使用中遇到的问题,尽量详细的对该方法做具体的说明,使我们能够用好ProcessBatchData方法。

 

ProcessBatchData方法本身很简单:

string strReturnValue = web.ProcessBatchData(strBatchOperation)

主要在构建strBatchOperation上,刚刚开始使用该方法的人,往往觉得不好使用,因为某个参数或者值不对,就会导致该方法失败,但是如果用好了,其实该方法会使批量操作的性能大大提高。

strBatchOperation的格式如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<ows:Batch OnError="Continue">
  <Method ID='0'>
    <SetVar Name="Cmd">Save</SetVar>
    <SetVar Name="ID">New</SetVar>
    <SetList>af653a38-7a6a-455c-a295-1604c4104a61</SetList>
    <SetVar Name="urn:schemas-microsoft-com:office:office#ContentType">Item子类型</SetVar>
    <SetVar Name="urn:schemas-microsoft-com:office:office#Title">Item001</SetVar>
    <SetVar Name="owsfileref">/ProjectCenter/ATP/Lists/Schedules/folderLevel1/Item001</SetVar>
  </Method>
</ows:Batch>

 

其中:

OnError: 表示遇到错误是继续还是跳出,有两个选项:

Return:默认值,表示遇到错误即返回;

Continue:表示遇到错误后,记录错误然后继续。

Method:一个Method表示一个操作,必备的参数是方法的ID,每个要不同

SetVar: 设置栏位(Field)值,用来更新栏位值或者使用该栏位值搜索到对象

Cmd:表示操作类型,有三种:Save,Delete和Moderate

    Save:根据ID值是New还是ID值,来确定是否新建还是更新

    Delete: 删除

    Moderate:设置审批状态,同时也可以用来设置属性值,和Save的区别后面再描述

ID:如果是新建,就为New,如果是更新,就填写待更新的对象的ID值,注意不是GUID

以“urn:schemas-microsoft-com:office:office#”开头的变量,表示自定义Field、ContentType或Title,需要注意的是,此处需要填写Field的内部值

SetList:列表GUID值,表示在该列表下操作。

后面会详细介绍每种类型操作的具体用法,点击进入下一节 用好ProcessBatchData (2)批量创建

posted on 2010-07-27 14:54  重金属  阅读(638)  评论(0编辑  收藏  举报