Sharepoint回收站文件還原,還原其他用戶刪除的文件

需求:有兩個site collection admin權限的用戶user1和user2,user2刪除OtherUserDelete.txt文件,user1進行還原,其中user1的回收站裏面有兩個文件CurrentUserDelete.txt(user1刪除)和OtherUserDelete.txt(user2刪除),這裏只考慮first stage一級回收站的情況

dll引用:主要是調用Microsoft.SharepointOnline.CSOM中的Client api

問題:回收站分爲兩個,一個是End User的只有自己刪除的文件,另外一個是site collection級別的回收站,但是Web.Recyclebin裏面只能得到當前用戶刪除的文件,如下面代碼

using (ClientContext clientContext = new ClientContext("https://youserver"))
                {
                    string pass = "yourpassword";
                    var securepassword = new SecureString();
                    foreach (char c in pass.ToCharArray())
                    {
                        securepassword.AppendChar(c);
                    }
                    clientContext.Credentials = new SharePointOnlineCredentials("[email protected]", securepassword);
                    var deletedItems = new List<RecycleBinItem>();
                    try
                    {
                        RecycleBinItem deletedItem = null;
                        Web web = clientContext.Site.RootWeb;
                        clientContext.Load(web);
                        clientContext.Load(web.RecycleBin, items => items.Include(
                            oItem => oItem.Title,
                            oItem => oItem.Id,
                            oItem => oItem.Author,
                            oItem => oItem.DeletedBy,
                            oItem => oItem.DirName,
                            oItem => oItem.DeletedDate
                            ));
                        clientContext.ExecuteQuery();                      
                        var recycleBinItems = web.RecycleBin;
                        for (int i = recycleBinItems.Count; i > 0; i--)
                        {
                            RecycleBinItem item = recycleBinItems[i - 1];
                            deletedItems.Add(item);
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                    }

                }

1.通過Web.GetRecycleBinItemsByQueryInfo(RecycleBinQueryInformation query)拿到回收站所有的文件,其中屬性 ShowOnlyMyItems要設置爲false才能拿到其他用戶刪除的文件

RecycleBinQueryInformation queryInformation = new RecycleBinQueryInformation
                        {
                            ShowOnlyMyItems = false
                        };
                        var recycleBinItems = web.GetRecycleBinItemsByQueryInfo(queryInformation);
                        clientContext.Load(recycleBinItems, items => items.Include(
                            oItem => oItem.Title,
                            oItem => oItem.Id,
                            oItem => oItem.Author,
                            oItem => oItem.DeletedBy,
                            oItem => oItem.DirName,
                            oItem => oItem.DeletedDate,
                            oItem => oItem.DirNamePath
                            ));
                        clientContext.ExecuteQuery();
foreach (RecycleBinItem item in recycleBinItems)
                        {
                            string guid = item.Id.ToString();
                            //你想要還原的文件guid
                            if (item.Id.ToString().Equals("424d868f-f08a-4f56-809b-37466d8c2f79"))
                            {
                                deletedItem = item;
                                item.Restore();
                                clientContext.ExecuteQuery();
                                break;
                            }
                        }

2.上面方法成功拿到user2刪除的文件,但是還原的時候出問題了,報錯:Value does not fall within the expected range.

3.解決辦法是通過RecycleBinItemCollection.GetById(Guid id)方法拿到想要還原的user2刪除的文件RecycleBinItem,然後進行還原就成功還原了

RecycleBinItem deletedItem = null;
                        Web web = clientContext.Web;                       
                        RecycleBinQueryInformation queryInformation = new RecycleBinQueryInformation
                        {
                            ShowOnlyMyItems = false
                        };
                        var recycleBinItems = web.GetRecycleBinItemsByQueryInfo(queryInformation);
                        clientContext.Load(recycleBinItems, items => items.Include(
                            oItem => oItem.Title,
                            oItem => oItem.Id,
                            oItem => oItem.Author,
                            oItem => oItem.DeletedBy,
                            oItem => oItem.DirName,
                            oItem => oItem.DeletedDate,
                            oItem => oItem.DirNamePath
                            ));
                        clientContext.ExecuteQuery();                        
                        deletedItem =recycleBinItems.GetById(new Guid("yourfileid"));
                        clientContext.Load(deletedItem, w => w.DirName);                        
                        deletedItem.Restore();
                        clientContext.ExecuteQuery();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章