• 用好ProcessBatchData (1)概述


    通常,我们在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值,表示在该列表下操作。

  • 相关阅读:
    致敬尤雨溪,Vue.js 让我赚到了第一桶金
    JavaScript 构造树形结构的一种高效算法
    Webpack 4 Tree Shaking 终极优化指南
    腾讯前端面试题:一言不合就写个五子棋
    使用Web代理实现Ajax跨域
    Extjs 4 chart自定义坐标轴刻度
    五分钟了解浏览器的工作原理
    面试官:JavaScript 原始数据类型 Symbol 有什么用?
    JavaScript 初学者容易犯的几个错误,你中招没?
    帮助你更好的理解Spring循环依赖
  • 原文地址:https://www.cnblogs.com/poissonnotes/p/1803257.html
Copyright © 2020-2023  润新知