【问题标题】:item.Recycle returns an empty GUID (SharePoint Online, C#)item.Recycle 返回一个空的 GUID(SharePoint Online、C#)
【发布时间】:2017-02-20 18:29:23
【问题描述】:

所以,长话短说,我想删除(回收)一个项目,保存它的 ID,然后使用该 ID 从垃圾箱中恢复它。

我可以按名称从垃圾箱中恢复项目,如下所示:

if (rItem.leafname == "torecycle.docx")
    {
        rItem.restore();
        client.executequery();
    }
}

但这需要用户事先知道项目的名称。

当一个项目被回收并移到回收站时,它的 ID 会改变。 item.Recycle() 方法应该返回带有 RecycleBinItem 的新 ID 的 ClientResult<Guid>,但返回的 Guid 是空的(全为零)。

我这样回收物品:

if (item.DisplayName == "torecycle")
{
    client.Load(item);

    var recycledItem = item.Recycle(); 
    var newGuid = recycledItem.Value;

    Console.WriteLine("new guid " + newGuid);

    Client.ExecuteQuery();
}              

打印出来的是new guid 00000000-0000-0000-0000-000000000000,但它确实将回收站项目正确地移动到了垃圾箱。

我在这里遗漏了什么吗?如何获得RecycleBinItem 的实际Guid?

任何帮助将不胜感激!

【问题讨论】:

  • 这是一种奇怪的行为,msdn 不言自明,它应该返回“回收站中的新项目”的有效 GUID。您是否尝试过调试?调用方法后sharepoint是否有文件在回收站?
  • .Value,是因为 guid 是 Nullable,还是因为 newGuid 实际上是 ClientResult<Guid> 类型?
  • @Tatranskymedved 是的,尽管 Guid 是空的,但它确实正确地回收了该项目。我更新了原始帖子以包含那一点!
  • @dlatikay 我更新了第一篇文章以使其更清晰。是的,基本上Recycle() 返回一个ClientResult<Guid>.Value。应该给一个指导。
  • 先运行ExecuteQuery,然后读取值。这是否已经解决了问题?

标签: c# sharepoint sharepoint-online


【解决方案1】:

Recycle 函数的返回值是ClientResult<T>,它只是底层 SOAP 请求/响应模型的包装器。请求在本地收集并在调用ExecuteQuery 时发送。因此,只有在调用完成后才会填充结果值。

要了解 SharePoint 服务器和客户端对象模型之间的这种差异,有必要查看 overall concept,因为在 ClientResult 的文档中,从未提及。

【讨论】:

    猜你喜欢
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 2021-10-13
    相关资源
    最近更新 更多