2017-02-20 62 views
1

因此,長話短說,我想刪除(回收)一個項目,保存它的ID,然後使用該ID從垃圾箱恢復它。item.Recycle返回一個空的GUID(SharePoint Online,C#)

我可以通過名稱從垃圾桶中恢復一個項目,像這樣:

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

但這需要用戶知道該項目的名稱預先。

當物料被回收並移動到垃圾箱時,其ID會發生變化。 item.Recycle()方法應該返回一個ClientResult<Guid>RecycleBinItem的新ID,但返回的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?

任何幫助將不勝感激!

+0

這是奇怪的行爲,msdn自己說它應該返回'回收站中的新項目'的有效GUID。你嘗試過調試嗎?調用方法後,sharepoint是否在回收站中有文件? – Tatranskymedved

+0

'.Value',是因爲guid是一個'Nullable',還是因爲'newGuid'實際上是'ClientResult '類型? – dlatikay

+0

@Tatranskymedved是的,它確實可以正確地回收物品,儘管空的Guid。我更新了原始帖子以包含那一點! – Kuura

回答

0

Recycle函數的返回值是ClientResult<T>,它只是底層SOAP請求/響應模型的包裝。請求在本地收集並在調用ExecuteQuery時發送。因此結果值將僅在該通話完成後填充。

要理解SharePoint服務器和客戶端對象模型之間的這種差異,有必要查看overall concept,因爲在ClientResult的文檔中,它從未被提及。