概述
在sharepoint 项目中,后期做数据迁移时,会用到sharepoint的web service来完成把数据导入sharepoint站点的功能。
web service 名称:
http://[site]/_vti_bin/Lists.asmx
我们用它来新增,修改或者删除当前站点特定list 的item操作。
调用的方法:
[SoapDocumentMethodAttribute("http://schemas.microsoft.com/sharepoint/soap/UpdateListItems", RequestNamespace="http://schemas.microsoft.com/sharepoint/soap/", ResponseNamespace="http://schemas.microsoft.com/sharepoint/soap/", Use=SoapBindingUse.Literal, ParameterStyle=SoapParameterStyle.Wrapped)]
public XmlNode UpdateListItems (
string listName,
XmlNode updates
)
listName:当前站点list的名字。
操作list的item则通过XmlNode来完成。
更改普通list里item对应field Name的xml代码:
<Batch OnError="Continue" ListVersion="1"
ViewName="270C0508-A54F-4387-8AD0-49686D685EB2">
<Method ID="1" Cmd="Update">
<Field Name="ID">4<Field>
<Field Name="Field_Name">Value</Field>
</Method>
<Method ID="2" Cmd="Update">
<Field Name="ID" >6</Field>
<Field Name="Field_Name">Value</Field>
</Method>
</Batch>
新增list里item的xml代码:
<Batch OnError="Continue" ListVersion="1"
ViewName="270C0508-A54F-4387-8AD0-49686D685EB2">
<Method ID="1" Cmd="New">
<Field Name='ID'>New</Field>
<Field Name="Title">Value</Field>
<Field Name="Date_Column">2007-3-25</Field>
<Field Name="Date_Time_Column">
2006-1-11T09:15:30Z</Field>
</Method>
</Batch>
删除list里item的xml代码:
<Batch OnError="Continue" ListVersion="1"
ViewName="270C0508-A54F-4387-8AD0-49686D685EB2">
<Method ID="1" Cmd="Delete">
<Field Name='ID'>2</Field>
</Method>
<Method ID="2" Cmd="Delete">
<Field Name='ID'>8</Field>
</Method>
</Batch>
document libraries操作:
新建文件夹xml的代码:
<Batch OnError="Continue" PreCalc="TRUE"
ListVersion="0"
ViewName="{EF2F5A21-0FD0-4654-84ED-112B4F5A48F8}">
<Method ID="1" Cmd="New">
<Field Name="ID">New</Field>
<Field Name="FSObjType">1</Field>
<Field Name="BaseName">Name</Field>
</Method>
</Batch>
更新文件夹的xml代码:
<Batch OnError="Continue" PreCalc="TRUE"
ListVersion="0"
ViewName="{EF2F5A21-0FD0-4654-84ED-112B4F5A48F8}">
<Method ID="1" Cmd="Update">
<Field Name="ID">3</Field>
<Field Name="owshiddenversion">1</Field>
<Field Name="FileRef">
http://Server/[sites/][Site/]Shared
Documents/Folder</Field>
<Field Name="FSObjType">1</Field>
<Field Name="BaseName">Name</Field>
</Method>
</Batch>
删除文件夹xml代码:
<Batch OnError="Continue" PreCalc="TRUE"
ListVersion="0"
ViewName="{EF2F5A21-0FD0-4654-84ED-112B4F5A48F8}">
<Method ID="1" Cmd="Delete">
<Field Name="ID">4</Field>
<Field Name="FileRef">
http://Server/[sites/][Site/]Shared
Documents/Folder</Field>
</Method>
</Batch>
更新文件夹里文件的xml代码:
<Batch OnError="Continue" PreCalc="TRUE"
ListVersion="0"
ViewName="{EF2F5A21-0FD0-4654-84ED-112B4F5A48F8}">
<Method ID="1" Cmd="Update">
<Field Name="ID">2</Field>
<Field Name="owshiddenversion">1</Field>
<Field Name="FileRef">
http://Server/[sites/][Site/]Shared
Documents/File</Field>
<Field Name="BaseName">Name</Field>
</Method>
</Batch>
删除文件夹里文件的xml代码:
<Batch OnError="Continue" PreCalc="TRUE"
ListVersion="0"
ViewName="{EF2F5A21-0FD0-4654-84ED-112B4F5A48F8}">
<Method ID="1" Cmd="Delete">
<Field Name="ID">3</Field>
<Field Name="FileRef">
http://Server/[sites/][Site/]Shared
Documents/File</Field>
</Method>
</Batch>
调用方法:
Web_Reference_Folder.Lists listService = new Web_Reference_Folder.Lists();
listService.Credentials= System.Net.CredentialCache.DefaultCredentials;
string strBatch = "<Method ID='1' Cmd='Update'>" +
"<Field Name='ID'>4</Field>" +
"<Field Name='Field_Number'>999</Field></Method>" +
"<Method ID='2' Cmd='Update'><Field Name='ID' >6</Field>" +
"<Field Name='Field_DateTime'>
2003-11-11T09:15:30Z</Field></Method>";
XmlDocument xmlDoc = new System.Xml.XmlDocument();
System.Xml.XmlElement elBatch = xmlDoc.CreateElement("Batch");
elBatch.SetAttribute("OnError","Continue");
elBatch.SetAttribute("ListVersion","1");
elBatch.SetAttribute("ViewName",
"0d7fcacd-1d7c-45bc-bcfc-6d7f7d2eeb40");
elBatch.InnerXml = strBatch;
XmlNode ndReturn = listService.UpdateListItems("List_Name", elBatch);
MessageBox.Show(ndReturn.OuterXml);
返回XmlNode代码的格式:
<Results xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<Result ID="1,Update">
<ErrorCode>0x00000000</ErrorCode>
<z:row ows_ID="4" ows_Title="Title"
ows_Modified="2003-06-19 20:31:21"
ows_Created="2003-06-18 10:15:58"
ows_Author="3;#User1_Display_Name"
ows_Editor="7;#User2_Display_Name" ows_owshiddenversion="3"
ows_Attachments="-1"
ows__ModerationStatus="0" ows_LinkTitleNoMenu="Title"
ows_LinkTitle="Title"
ows_SelectTitle="4" ows_Order="400.000000000000"
ows_GUID="{4962F024-BBA5-4A0B-9EC1-641B731ABFED}"
ows_DateColumn="2003-09-04 00:00:00"
ows_NumberColumn="791.00000000000000"
xmlns:z="#RowsetSchema" />
</Result>
<Result ID="2,Update">
<ErrorCode>0x00000000</ErrorCode>
<z:row ows_ID="6" ows_Title="Title"
ows_Modified="2003-06-19 20:31:22"
ows_Created="2003-06-18 19:07:14"
ows_Author="2;#User1_Display_Name"
ows_Editor="6;#User2_Display_Name" ows_owshiddenversion="4"
ows_Attachments="0" ows__ModerationStatus="0"
ows_LinkTitleNoMenu="Title"
ows_LinkTitle="Title" ows_SelectTitle="6"
ows_Order="600.000000000000"
ows_GUID="{2E8D2505-98FD-4E3E-BFDA-0C3DEBE483F7}"
ows_DateColumn="2003-06-23 00:00:00"
ows_NumberColumn="9001.00000000000000"
xmlns:z="#RowsetSchema" />
</Result>
...
</Results>
取返回值的方法:
foreach (XmlNode node in nodes)
{
if (node.Name == "rs:data")
{
for (int i = 0; i < node.ChildNodes.Count; i++)
{
if (node.ChildNodes[i].Name == "z:row")
{
string ID = node.ChildNodes[i].Attributes["ows_ID"].Value;
string Title = node.ChildNodes[i].Attributes["ows_Title"].Value;
}
}
}
}
总结
简单介绍了Lists.UpdateListItems (string listName,XmlNode node)的用法。