通过WebService操作SharePoint列表数据

通过Webservice add/update/delete SharePoint的列表数据,当然需要使用Lists.asmx 服务了,此服务为增删改只提供了一个方法UpdateListItems,此方法的声明非常简单:

public XmlNode UpdateListItems (
    string listName,
    XmlNode updates
)

对于此方法的说明可以参考MSDN:

http://msdn.microsoft.com/en-us/library/lists.lists.updatelistitems(v=office.14).aspx

     方法简单不代表逻辑简单,增删改的操作逻辑都封装在Xml中,使用时千变万化的xml参数让人相当费解,经过这些天的不懈努力,终可窥得其中些许奥秘!根据可能操作的不同情况,可总结为以下表格,每一种情况可参考表后的示例。

 

Add

Update

Delete

Generic list item

1

3

4

Generic list item(in folder)

2

Folder(Generic list)

5

6

Folder(document library)

7

Document

Unsupported

3

1) Add Generic list item

<Batch OnError="Continue">
     <Method ID="1" Cmd="New">
          <Field Name="ID">New</Field>
          <Field Name="URL">http://192.168.1.1</Field>
          <Field Name="Comments">Redmond</Field>
     </Method>
</Batch>

注:这是最常见的格式了.

2) Generic list item(in folder)

<Batch OnError="Continue" RootFolder="/Lists/Links/folder">
    <Method ID="1" Cmd="New">
        <Field Name="ID">New</Field>
        <Field Name="URL">http://192.168.1.1</Field>
        <Field Name="Comments">Redmond</Field>
    </Method>
</Batch>

注:这里的RootFolder格式必须为’/Lists/listName/folderpathOrName'(RootFolder属性在MSDN中未提到,但确实是有效的操作属性)

3) Update ListItem

<Batch OnError="Continue">
    <Method ID="1" Cmd="Update">
        <Field Name="ID">1</Field>
        <Field Name="URL">http://192.168.1.1</Field>
        <Field Name="Comments">Redmond</Field>
    </Method>
</Batch>

4) Delete generic listitem or folder

<Batch OnError="Continue">
    <Method ID="1" Cmd="Delete">
        <Field Name="ID">1</Field>
     </Method>
</Batch>

注:如果删除的是文件夹,则文件夹内的数据项也全部删除

5) Add folder

<Batch OnError="Continue">
     <Method ID="1" Cmd="New">
      <Field Name="ID">New</Field>
      <Field Name="FSObjType">1</Field>
      <Field Name="BaseName">folderName</Field>
  </Method>
</Batch>

注:其中BaseName格式为:folderName 或者pFolderName/subFolderName,不得以’/’开头,支持文档库操作。

6) Update folder

<Batch OnError="Continue">
    <Method ID="1" Cmd="Update">
      <Field Name="ID">New</Field>
      <Field Name="FSObjType">1</Field>
      <Field Name="BaseName">newfolderName</Field>
    </Method>
</Batch>

注:这里只能修改文件夹名称,其中BaseName格式为:folderName(与创建文件夹时指定路径不同),不得包含’/’等特殊字符,支持文档库操作。

7) Remove document library folder or document

<Batch OnError="Continue">
     <Method ID="1" Cmd="Delete">
          <Field Name="ID">New</Field>
          <Field Name="FileRef">documentpath</Field>
     </Method>
</Batch>

注:这里的FileRef的格式可以为全路径格式:

http://hostOrIP:port/siteName/documentLibraryName/documentNameORFolderName

也可以为相对路径:

/documentLibraryName/documentNameORFolderName

或者

documentLibraryName/documentNameORFolderName

名称大小写不敏感.

     其它:不支持文档的上传添加操作,此部分可参考Copy.asmx服务的CopyIntoItems方法;不支持文档文件的更新操作,仅支持对文档属性字段的更新操作,此操作与generic list的更新相同。

     真的是相当费解的设计,在使用之前最好针对不同的情况封装为方法,这样使用的时候就不用再费解了。

原文地址:https://www.cnblogs.com/Areas/p/2690109.html