通过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的更新相同。
真的是相当费解的设计,在使用之前最好针对不同的情况封装为方法,这样使用的时候就不用再费解了。