我正在尝试使用Sharepoint Web Service引用创建一个C#程序,该引用将每天接受用户输入并更新列表。数据可能每天都有所不同所以我需要一种可靠的方法来删除列表中的每个项目,然后再为新项目发送更新语句。
删除条目的唯一方法是引用其项目ID号。我尝试创建一个循环,它将生成一个删除语句,覆盖ID 1-50,但由于列表总是递增,只有50个项目通过才能生效。在我的谷歌搜索中,我发现将列表重置为ID 1的唯一方法是删除它并重新创建它。不幸的是,如果我这样做,它将有一个不同的GUID,我的程序将无法在下次运行时调用它。
有没有我在这里看不到的解决方案?
答案 0 :(得分:3)
您无法使用指定的GUID重新创建列表。
但是,如果您需要将ID重置为1的唯一原因是帮助您进行空列表操作,那么从您的评论开始,您就会在此处切断。
从GetListItems()返回的XML格式为
<listitems xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema"
xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<rs:data ItemCount="4">
<z:row ows_Number_Field="6555.00000000000"
ows_Created="2003-06-18T03:41:09Z"
ows_ID="100" ows_owshiddenversion="3" />
<z:row ows_Number_Field="78905456.0000000"
ows_Created="2003-06-18T17:15:58Z"
ows_ID="101" ows_owshiddenversion="2" />
...
</rs:data>
</listitems>
所以'可靠'循环就是这样(没有经过测试,但你明白了)
// Call GetListItems and setup XmlDocument with results
System.Xml.XmlNode nodeListItems =
listService.GetListItems
(listName, viewName,query,viewFields,rowLimit,queryOptions,null);
/*Loop through each node in the XML response and display each item.*/
foreach (System.Xml.XmlNode listItem in nodeListItems)
{
Console.WriteLine("ID:{0}",listItem.getAttribute("ows_ID"));
}
有关更多灵感,请参阅此MSDN article
此外 - 要通过一次调用删除所有这些记录,您可以通过在上面的for循环中构建类似这样的XML片段来发送UpdateListItems来进行批量更新。
<Batch>
<Method ID='1' Cmd='Delete'><Field Name='ID'>100</Field></Method>
<Method ID='2' Cmd='Delete'><Field Name='ID'>101</Field></Method>
</Batch>
注释