我正在从一台未安装SharePoint的客户端计算机上开发MS Office 2010 Excel AddIn。我从远程SharePoint服务器导入了Lists web服务引用。我开发了一个wpf用户控件,可以从列表中加载数据并将其显示在excel工作表中。它工作得很好。然后我扩展我的客户端应用程序以更新服务器中的列表项。因此,我尝试使用web服务引用,使用UpdateListItems方法更新服务器中的列表项。
但它失败了,出现了一个异常"Soap Server exception"。我不知道这里出了什么问题,因为我可以毫无问题地导入数据。下面是我的代码块。
SPListsWS.Lists myListUpdateProxy = new SPListsWS.Lists();
myListUpdateProxy.Credentials = CredentialCache.DefaultCredentials;
myListUpdateProxy.Url = "http://uvo1y1focm66gonf7gw.env.cloudshare.com/_vti_bin/Lists.asmx";
XmlNode listView = myListUpdateProxy.GetListAndView("Products", "");
string listID = listView.ChildNodes[0].Attributes["Name"].Value;
string viewID = listView.ChildNodes[1].Attributes["Name"].Value;
XmlDocument Xdoc = new XmlDocument();
XmlElement updateElement = Xdoc.CreateElement("updateElement");
updateElement.SetAttribute("OnError", "Continue");
updateElement.SetAttribute("ListVersion", "1");
updateElement.SetAttribute("ViewName", viewID);
updateElement.InnerXml = "<Method ID='1' Cmd='Update'>"
+ "<Field Name = 'ID'>" + index + "</Field>"
+ "<Field Name = 'Title'>" + prodTitle + "</Field>"
+ "<Field Name = 'Product_SKU'>" + prodSKU + "</Field>"
+ "<Field Name = 'Product_Price'>" + prodPrice + "</Field>"
+ "</Method>";
XmlNode responseXml = myListUpdateProxy.UpdateListItems("Products", updateElement);
MessageBox.Show(responseXml.OuterXml);
要更新项目,应使用UpdateListItems
而不是GetListItems
。此外,使用UpdateListItems
时,请将<Metdod>
标记包装在<Batch>
元素中。这将代替您的updateElement
。看看这是否有效,如果无效,请包括实际错误消息的responseText
以及您正在使用的SharePoint版本。