【问题标题】:Can I delete a Sharepoint List, then recreate it with the same GUID?我可以删除 Sharepoint 列表,然后使用相同的 GUID 重新创建它吗?
【发布时间】:2011-01-07 21:41:18
【问题描述】:

我正在尝试使用 Sharepoint Web 服务参考创建一个 C# 程序,该参考将每天接受用户输入并更新列表。数据每天都可能不同,因此我需要一种可靠的方法在为新项目发送更新语句之前删除列表中的每个项目。

删除条目的唯一方法是引用其项目 ID 号。我尝试创建一个循环,该循环将生成一个覆盖 ID 1-50 的删除语句,但由于该列表始终递增,仅在 50 个项目通过之前有效。在我的谷歌搜索中,我发现将列表重置为 ID 1 的唯一方法是删除它并重新创建它。不幸的是,如果我这样做,它将具有不同的 GUID,并且我的程序将无法在下次运行时调用它。

是否有一些我在这里没有看到的解决方案?

【问题讨论】:

  • 我是否正确理解您需要一种方法来从 SharePoint 列表中删除所有项目
  • 正确。我正在使用 Web 服务,所以除非你有一个从 GetListItems() 解析 XML 的好方法,否则 foreach 不会解决它。
  • 您是否正在考虑删除列表中的所有项目,因为您不想费心弄清楚每个项目是否已更改?
  • 您不能按名称而不是 GUID 引用列表吗?
  • Tundey - 项目每天都会有所不同;整个列表可能完全不同,并且包含不同数量的项目。不幸的是,每次运行时我都必须清除列表。如果我尝试按名称引用,我只会得到“Guid 应该包含 32 位数字和 4 个破折号”。

标签: c# xml sharepoint


【解决方案1】:

您无法使用指定的 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>

注意事项

  • “方法 ID='XXX'...”必须是 每个批处理方法的顺序 +1。
  • “字段名称='ID'100...”匹配 您在 上面的 for 循环。

【讨论】:

  • 我还是个 C# 新手,不知道如何从 GetListItems() 解析 XML。我没有意识到 getAttribute 可以为我做这件事。我会尝试并报告 - 谢谢!
猜你喜欢
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2012-02-14
  • 1970-01-01
  • 2011-11-12
  • 2021-03-21
  • 2011-01-09
相关资源
最近更新 更多